
Ciao a tutti. Questo articolo è destinato a coloro che hanno molti dispositivi MikroTik nel loro parco e vogliono fare la massima unificazione, così da non doversi collegare a ogni singolo dispositivo. In questo articolo descriverò un progetto che, sfortunatamente, non è arrivato in condizioni di lavoro a causa di fattori umani. In breve: oltre 200 router, configurazione rapida e formazione del personale, unificazione per regioni, filtraggio delle reti e di determinati host, possibilità di aggiungere facilmente regole a tutti i dispositivi, registrazione e controllo degli accessi.
Ciò che è descritto di seguito non pretende di essere un case study pronto, ma spero possa esservi utile nella pianificazione delle vostre reti e nella minimizzazione degli errori. Potrebbe sembrare che alcuni punti e soluzioni non siano del tutto corretti - se è così, scrivetelo nei commenti. La critica in questo caso sarà un' esperienza da aggiungere al patrimonio comune. Pertanto, lettore, dai un'occhiata ai commenti, forse l'autore ha commesso un grave errore - la comunità aiuterà.
Il numero di router varia da 200 a 300, distribuiti in diverse città con diverse qualità di connessione internet. È necessario rendere tutto chiaro e facilmente comprensibile per gli amministratori locali su come funzionerà tutto.
Quindi, da dove inizia qualsiasi progetto. Ovviamente, con Specifiche.
- Organizzazione del piano delle reti in tutte le filiali secondo i requisiti del cliente, segmentazione delle reti (da 3 a 20 reti nelle filiali a seconda del numero di dispositivi).
- Configurazione dei dispositivi in ogni filiale. Verifica della reale velocità di trasmissione del provider in diverse condizioni operative.
- Organizzazione della protezione dei dispositivi, gestione tramite lista bianca, autodetenzione degli attacchi con inserimento automatico nella lista nera per un determinato periodo, minimizzazione dell'uso di vari mezzi tecnici utilizzati per intercettare l'accesso alla gestione e rinuncia alla manutenzione.
- Organizzazione di connessioni VPN sicure con filtraggio delle reti secondo i requisiti del cliente. Minimo 3 connessioni VPN da ogni filiale al centro.
- Sulla base dei punti 1 e 2. Scegliere i percorsi ottimali per la costruzione di VPN ad alta disponibilità. La tecnologia di routing dinamico può essere scelta dall'esecutore con una corretta giustificazione.
- Organizzazione della priorizzazione del traffico per protocolli, porte, host e altri servizi specifici utilizzati dal cliente. (VOIP, host con servizi critici)
- Organizzazione del monitoraggio e della registrazione degli eventi dei router per la risposta del personale di supporto tecnico.
Come comprendiamo, in alcuni casi, il capitolato viene redatto dalle esigenze. Queste esigenze le ho formulate personalmente, ascoltando i problemi principali. Ho considerato la possibilità che l'esecuzione di questi punti possa essere delegata a qualcun altro.
Quali strumenti verranno utilizzati per soddisfare questi requisiti:
- Stack ELK (dopo un certo periodo, è emersa la comprensione che al posto di logstash verrà utilizzato fluentd).
- Ansible. Per facilitare l'amministrazione e la separazione degli accessi utilizzeremo AWX.
- GITLAB. Qui non c'è bisogno di spiegazioni. Dove andiamo senza il controllo delle versioni delle nostre configurazioni.
- PowerShell. Sarà creato un semplice script per la generazione iniziale della configurazione.
- Documentazione wiki, per la redazione di documentazione e guide. In questo caso, utilizzeremo habr.com.
- Il monitoraggio sarà effettuato attraverso zabbix. Qui sarà disegnata una mappa delle connessioni per una comprensione generale.
Elementi di configurazione EFK
Nel primo punto descriverò solo l'ideologia secondo cui verranno costruiti gli indici. Ci sono molti
ottimi articoli sulla configurazione e la raccolta dei log dai dispositivi gestiti da mikrotik.
Mi soffermerò su alcuni aspetti:
1. Secondo lo schema, è importante pianificare la ricezione dei log da luoghi diversi e su porte diverse. A tal fine utilizzeremo un aggregatore di log. Inoltre, ci piacerebbe creare grafici universali per tutti i router con possibilità di separazione degli accessi. Pertanto, costruiremo gli indici nel modo seguente:
ecco un pezzo di configurazione con fluentd type elasticsearch
logstash_format true
index_name mikrotiklogs.north
logstash_prefix mikrotiklogs.north
flush_interval 10s
hosts :9200
port 9200
In questo modo possiamo unire i router e segmentare secondo il piano: mikrotiklogs.west, mikrotiklogs.south, mikrotiklogs.east. Perché complicare così tanto? Comprendiamo che avremo 200 o più dispositivi. Con tutti non si riesce a stare al passo. Dalla versione 6.8 di elasticsearch, le impostazioni di sicurezza sono disponibili (senza acquisto di licenza), consentendoci di distribuire i diritti di visualizzazione tra il personale di supporto tecnico o gli amministratori di sistema locali.
Tabelle, grafici – qui è necessario semplicemente accordarsi: o utilizzare uno stile uniforme, o ciascuno fa come è più comodo per lui.
2. Riguardo il logging. Se nelle regole del firewall attiviamo il log, i nomi li facciamo senza spazi. Si vede che, usando una configurazione semplice in fluentd, possiamo filtrare i dati e creare pannelli utili. Nella figura qui sotto - il mio router di casa.

3. Per quanto riguarda lo spazio occupato e i log. In media, con 1000 messaggi all'ora, i log occupano circa 2-3 MB al giorno, che, ammettiamolo, non è molto. Versione di elasticsearch 7.5.
ANSIBLE.AWX
Per nostra fortuna abbiamo un modulo pronto per routeros.
Ho menzionato AWX, ma i comandi qui sotto riguardano solo ansible in modo puro – penso che per chi ha lavorato con ansible non ci saranno problemi nell'uso attraverso l'interfaccia grafica di awx.
Ammetto sinceramente che prima ho guardato altre guide dove usavano ssh, e tutti avevano diversi problemi con i tempi di risposta e molti altri problemi. Ripeto, non si è arrivati al combattimento, percepire queste informazioni come un esperimento che non è andato oltre una dimostrazione con 20 router.
Dobbiamo utilizzare un certificato o un account. Qui sta a voi decidere, io preferisco i certificati. Un piccolo punto riguardo ai diritti. Do i diritti di scrittura – anche solo eseguire il "reset config" non sarà possibile.
Non dovrebbero sorgere problemi durante la generazione, copia del certificato e importazione:
In breve, l'elenco dei comandiSul tuo PC
ssh-keygen -t RSA, rispondiamo alle domande, salviamo la chiave.
Copiamo su mikrotik:
user ssh-keys import public-key-file=id_mtx.pub user=ansible
Prima di tutto, dobbiamo creare un conto e assegnargli i diritti.
Verifichiamo la connessione tramite certificato
ssh -p 49475 -i /keys/mtx ansible@192.168.0.120
Scriviamo vi /etc/ansible/hosts
MT01 ansible_network_os=routeros ansible_ssh_port=49475 ansible_ssh_user= ansible
MT02 ansible_network_os=routeros ansible_ssh_port=49475 ansible_ssh_user= ansible
MT03 ansible_network_os=routeros ansible_ssh_port=49475 ansible_ssh_user= ansible
MT04 ansible_network_os=routeros ansible_ssh_port=49475 ansible_ssh_user= ansible
Ecco un esempio di playbook: — name: add_work_sites
hosts: testmt
serial: 1
connection: network_cli
remote_user: mikrotik.west
gather_facts: yes
tasks:
— name: add Work_sites
routeros_command:
commands:
— /ip firewall address-list add address=gov.ru list=work_sites comment=Ticket665436_Ochen_nado
— /ip firewall address-list add address=habr.com list=work_sites comment=for_habr
Come si può vedere dalla configurazione sopra fornita, creare i propri playbook non è un compito difficile. È sufficiente padroneggiare bene il cli di mikrotik. Immaginiamo una situazione in cui su tutti i router è necessario rimuovere l'address list con determinati dati, quindi:
Cercare e rimuovere/ip firewal address-list remove [find where list=«gov.ru»]
Non ho incluso l'intero elenco del firewall perché sarà individuale per ogni progetto. Ma posso dire con certezza di usare solo un address list.
Su GITLAB è tutto chiaro. Non mi soffermerò su questo punto. Tutto è ben organizzato in singoli tasks, templates, handlers.
Powershell
Ci saranno 3 file. Perché powershell? Si può scegliere qualsiasi strumento per generare i config, a seconda di ciò che è più comodo. In questo caso, tutti hanno Windows sul PC, quindi perché fare in bash quando è più comodo usare powershell. Ognuno ha le sue preferenze.
Il script stesso (semplice e chiaro):[cmdletBinding()]
Param(
[Parameter(Mandatory=$true)]
[string]$EXTERNALIPADDRESS,
[Parameter(Mandatory=$true)]
[string]$EXTERNALIPROUTE,
[Parameter(Mandatory=$true)]
[string]$BWorknets,
[Parameter(Mandatory=$true)]
[string]$CWorknets,
[Parameter(Mandatory=$true)]
[string]$BVoipNets,
[Parameter(Mandatory=$true)]
[string]$CVoipNets,
[Parameter(Mandatory=$true)]
[string]$CClientss,
[Parameter(Mandatory=$true)]
[string]$BVPNWORKs,
[Parameter(Mandatory=$true)]
[string]$CVPNWORKs,
[Parameter(Mandatory=$true)]
[string]$BVPNCLIENTSs,
[Parameter(Mandatory=$true)]
[string]$cVPNCLIENTSs,
[Parameter(Mandatory=$true)]
[string]$NAMEROUTER,
[Parameter(Mandatory=$true)]
[string]$ServerCertificates,
[Parameter(Mandatory=$true)]
[string]$infile,
[Parameter(Mandatory=$true)]
[string]$outfile
)
Get-Content $infile | Foreach-Object {$_.Replace("EXTERNIP", $EXTERNALIPADDRESS)} |
Foreach-Object {$_.Replace("EXTROUTE", $EXTERNALIPROUTE)} |
Foreach-Object {$_.Replace("BWorknet", $BWorknets)} |
Foreach-Object {$_.Replace("CWorknet", $CWorknets)} |
Foreach-Object {$_.Replace("BVoipNet", $BVoipNets)} |
Foreach-Object {$_.Replace("CVoipNet", $CVoipNets)} |
Foreach-Object {$_.Replace("CClients", $CClientss)} |
Foreach-Object {$_.Replace("BVPNWORK", $BVPNWORKs)} |
Foreach-Object {$_.Replace("CVPNWORK", $CVPNWORKs)} |
Foreach-Object {$_.Replace("BVPNCLIENTS", $BVPNCLIENTSs)} |
Foreach-Object {$_.Replace("CVPNCLIENTS", $cVPNCLIENTSs)} |
Foreach-Object {$_.Replace("MYNAMERROUTER", $NAMEROUTER)} |
Foreach-Object {$_.Replace("ServerCertificate", $ServerCertificates)} | Set-Content $outfile
Vi prego di perdonarmi, non posso condividere tutte le regole perché non sarebbero presentate bene. Potete creare le regole voi stessi seguendo le migliori pratiche.
Ad esempio, ecco un elenco di link che ho seguito::Securing_Your_Router
:IP/Firewall/Filter
:OSPF-examples
:Winbox
:Upgrading_RouterOS
:IP/Fasttrack — è importante sapere che attivando il fasttrack non funzioneranno le regole di priorità e shaping del traffico – utile per dispositivi più deboli.
Legende delle variabili:Le seguenti reti sono state utilizzate come esempio:
192.168.0.0/24 rete di lavoro
172.22.4.0/24 rete VOIP
10.0.0.0/24 rete per clienti senza accesso alla rete locale
192.168.255.0/24 rete VPN per grandi filiali
172.19.255.0/24 rete VPN per piccole filiali
L'indirizzo della rete è composto da 4 numeri decimali, ovvero A.B.C.D, la sostituzione funziona in modo simile; se alla partenza richiede B, significa che per la rete 192.168.0.0/24 dovete inserire il numero 0, e per C = 0.
$EXTERNALIPADDRESS — indirizzo allocato dal provider.
$EXTERNALIPROUTE — percorso predefinito per la rete 0.0.0.0/0
$BWorknets — rete di lavoro, nel nostro esempio qui sarà 168
$CWorknets — Rete di lavoro, nel nostro esempio qui ci sarà 0
$BVoipNets — Rete VOIP, nel nostro esempio qui 22
$CVoipNets — Rete VOIP, nel nostro esempio qui 4
$CClientss — Rete per clienti – accesso solo a internet, nel nostro caso qui 0
$BVPNWORKs — Rete VPN per grandi filiali, nel nostro esempio 20
$CVPNWORKs — Rete VPN per grandi filiali, nel nostro esempio 255
$BVPNCLIENTS — Rete VPN per piccole filiali, quindi 19
$CVPNCLIENTS — Rete VPN per piccole filiali, quindi 255
$NAMEROUTER — nome del router
$ServerCertificate — nome del certificato che importerete in anticipo
$infile — Specificare il percorso del file da cui leggeremo la configurazione, ad esempio D:config.txt (meglio un percorso inglese senza virgolette e spazi)
$outfile — specificare il percorso dove salvare, ad esempio D:MT-test.txt
Ho deliberatamente modificato gli indirizzi negli esempi per motivi evidenti.
Ho saltato il punto sulla rilevazione degli attacchi e del comportamento anomalo – questo merita un articolo a parte. Ma va detto che in questa categoria è possibile utilizzare i valori dei dati di monitoraggio di Zabbix + i dati elaborati di curl con elasticsearch.
Su quali aspetti è necessario soffermarsi:
- Piano delle reti. È meglio compilarlo subito in una forma leggibile. Va bene Excel. Sfortunatamente, vedo molto spesso che le reti sono composte secondo il principio "È stata aperta una nuova filiale, ecco un /24". Nessuno verifica quanti dispositivi sono previsti in questo luogo e se ci sarà una crescita futura. Ad esempio, ha aperto un piccolo negozio, dove è evidente fin dall'inizio che i dispositivi non saranno più di 10, perché riservare un /24? Nei grandi uffici – al contrario, si riserva un /24, ma i dispositivi diventano 500 — è possibile aggiungere rete, ma è desiderabile pensare tutto in anticipo.
- Regole di filtraggio. Se nel progetto è previsto che ci sarà una divisione delle reti e la massima segmentazione. Le Best Practice cambiano nel tempo. In passato si dividevano la rete PC e la rete delle stampanti, ora è del tutto normale non dividere queste reti. È opportuno usare il buon senso e non creare molte sottoreti dove non sono necessarie e non unire tutti i dispositivi in un'unica rete.
- Impostazioni "d'oro" su tutti i router. Cioè, se hai deciso il piano. È opportuno prevedere tutto subito e cercare di fare in modo che tutte le impostazioni siano identiche, eccetto per le diverse liste di indirizzi e indirizzi IP. In caso di problemi, il tempo per il debug sarà minore.
- I momenti organizzativi sono altrettanto importanti quanto quelli tecnici. Spesso i dipendenti pigri seguono le raccomandazioni indicate "a mano", senza utilizzare configurazioni e script pronti, il che porta a problemi inutili.
Riguardo al routing dinamico. È stato utilizzato OSPF con suddivisione in aree. Ma questo è un banco di prova, in condizioni reali è più interessante configurare queste cose.
Spero che nessuno sia rimasto deluso dal fatto che non ho condiviso le configurazioni dei router. Penso che i link siano del tutto sufficienti e, da lì in poi, tutto dipende dalle esigenze. E certo, servono più test, è necessario avere più test.
Auguro a tutti, nel nuovo anno, di realizzare i propri progetti. Che l'accesso sia concesso a tutti!!!
Fonte: habr.com
