Il mio progetto non realizzato. Rete di 200 router MikroTik

Il mio progetto non realizzato. Rete di 200 router MikroTik

Ciao a tutti. Questo articolo è rivolto a chi ha molti dispositivi Mikrotik nel proprio parco macchine e vuole fare la massima unificazione per non collegarsi ad ogni dispositivo separatamente. In questo articolo descriverò un progetto che, sfortunatamente, non ha raggiunto le condizioni di combattimento a causa di fattori umani. In breve: più di 200 router, configurazione rapida e formazione del personale, unificazione per regione, filtraggio di reti e host specifici, possibilità di aggiungere facilmente regole a tutti i dispositivi, logging e controllo degli accessi.

Quanto descritto di seguito non pretende di essere un caso già pronto, ma spero che ti sarà utile per pianificare le tue reti e ridurre al minimo gli errori. Forse alcuni punti e soluzioni potrebbero non sembrarti del tutto corretti: se è così, scrivi nei commenti. La critica in questo caso sarà un'esperienza per l'erario comune. Pertanto, lettore, dai un'occhiata ai commenti, forse l'autore ha commesso un grave errore: la community ti aiuterà.

Il numero di router è 200-300, sparsi in diverse città con diverse qualità di connessione Internet. È necessario fare tutto in modo bello e spiegare chiaramente agli amministratori locali come funzionerà tutto.

Allora, da dove inizia ogni progetto? Naturalmente, con TK.

  1. Organizzazione di un piano di rete per tutte le filiali in base alle esigenze del cliente, segmentazione della rete (da 3 a 20 reti nelle filiali a seconda del numero di apparati).
  2. Configurazione dei dispositivi in ​​ogni filiale. Verifica della velocità di throughput reale del provider in diverse condizioni operative.
  3. Organizzazione della protezione dei dispositivi, gestione della whitelist, rilevamento automatico degli attacchi con blacklist automatica per un certo periodo di tempo, riducendo al minimo l'uso di vari mezzi tecnici utilizzati per intercettare il controllo dell'accesso e negare il servizio.
  4. Organizzazione di connessioni VPN sicure con filtraggio della rete in base alle esigenze del cliente. Minimo 3 connessioni VPN da ogni filiale al centro.
  5. Basato sui punti 1, 2. Seleziona i modi ottimali per creare VPN tolleranti ai guasti. Se giustificata correttamente, la tecnologia di routing dinamico può essere scelta dal contraente.
  6. Organizzazione della prioritizzazione del traffico in base a protocolli, porte, host e altri servizi specifici utilizzati dal cliente. (VOIP, host con servizi importanti)
  7. Organizzazione del monitoraggio e della registrazione degli eventi del router per la risposta del personale di supporto tecnico.

Come abbiamo capito, in molti casi le specifiche tecniche vengono redatte in base ai requisiti. Ho formulato io stesso questi requisiti, dopo aver ascoltato i problemi principali. Ha ammesso la possibilità che qualcun altro possa occuparsi di questi punti.

Quali strumenti verranno utilizzati per soddisfare questi requisiti:

  1. ELK stack (dopo un po' di tempo è diventato chiaro che sarebbe stato utilizzato fluentd al posto di logstash).
  2. Ansible. Per facilitare l'amministrazione e la condivisione degli accessi, utilizzeremo AWX.
  3. GITLAB. Non c'è bisogno di spiegare qui. Dove saremmo senza il controllo della versione delle nostre configurazioni?
  4. PowerShell. Ci sarà un semplice script per la generazione iniziale del config.
  5. Doku wiki, per scrivere documentazione e guide. In questo caso, utilizziamo habr.com.
  6. Il monitoraggio verrà effettuato tramite zabbix. Lì verrà anche disegnato uno schema di collegamento per una comprensione generale.

Punti di installazione EFK

Per quanto riguarda il primo punto, mi limiterò a descrivere l'ideologia con cui verranno costruiti gli indici. Ci sono molti
articoli eccellenti sulla configurazione e la ricezione di registri da dispositivi che eseguono mikrotik.

Mi soffermerò su alcuni punti:

1. Secondo il diagramma, vale la pena considerare la ricezione dei registri da luoghi diversi e su porte diverse. Per questo utilizzeremo un aggregatore di log. Vogliamo anche creare una grafica universale per tutti i router con la possibilità di condividere l'accesso. Quindi costruiamo gli indici come segue:

ecco un pezzo della configurazione con fluente digitare ricercaelastica
logstash_format vero
nome_indice mikrotiklogs.north
logstash_prefix mikrotiklogs.north
flush_interval 10s
padroni di casa elasticsearch: 9200
porto 9200

In questo modo possiamo combinare router e segmentare secondo il piano: mikrotiklogs.west, mikrotiklogs.south, mikrotiklogs.east. Perché renderlo così complicato? Comprendiamo che avremo 200 o più dispositivi. Non puoi tenere traccia di tutto. Con la versione 6.8 di elasticsearch abbiamo a disposizione le impostazioni di sicurezza (senza acquistare una licenza), quindi possiamo distribuire i diritti di visualizzazione tra i dipendenti del supporto tecnico o gli amministratori di sistema locali.
Tabelle, grafici - qui devi solo essere d'accordo - o usa gli stessi, oppure ognuno fa ciò che è conveniente per lui.

2. Effettuando la registrazione. Se abilitiamo l'accesso nelle regole del firewall, creiamo i nomi senza spazi. Si può vedere che utilizzando una semplice configurazione in fluente, possiamo filtrare i dati e creare pannelli convenienti. L'immagine qui sotto è il mio router di casa.

Il mio progetto non realizzato. Rete di 200 router MikroTik

3. Per spazio occupato e log. In media, con 1000 messaggi all'ora, i log occupano 2-3 MB al giorno, il che, come vedi, non è molto. Elasticsearch versione 7.5.

ANSIBLE.AWX

Fortunatamente per noi, abbiamo un modulo già pronto per i router
Ho menzionato AWX, ma i comandi seguenti riguardano solo ansible nella sua forma pura: penso che per coloro che hanno lavorato con ansible, non ci saranno problemi nell'usare awx tramite la GUI.

Ad essere onesti, prima di questo ho guardato altre guide in cui usavano ssh, e tutte avevano problemi diversi con i tempi di risposta e un sacco di altri problemi. Ripeto, non si è trattato di un litigio , prendi queste informazioni come un esperimento che non è andato oltre uno stand di 20 router.

Dobbiamo utilizzare un certificato o un account. Sta a te decidere, io sono per i certificati. Qualche punto sottile sui diritti. Concedo i diritti di scrittura: almeno "reimposta configurazione" non funzionerà.

Non dovrebbero esserci problemi nella generazione, copia e importazione del certificato:

Breve elenco dei comandiSul tuo PC
ssh-keygen -t RSA, rispondi alle domande, salva la chiave.
Copia su mikrotik:
utente ssh-keys import public-key-file=id_mtx.pub user=ansible
Per prima cosa devi creare un account e assegnargli i diritti.
Verifica della connessione utilizzando il certificato
ssh -p 49475 -i /keys/mtx [email protected]

Registra 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

Bene, un esempio di playbook: - nome: add_work_sites
ospiti: testmt
seriale: 1
connessione: rete_cli
utente_remoto: mikrotik.west
raccogliere_fatti: sì
compiti:
- nome: aggiungi Canti_di_lavoro
comando_routeros:
comandi:
— /ip elenco indirizzi firewall aggiungi indirizzo=gov.ru list=work_sites comment=Ticket665436_Ochen_nado
— /ip elenco indirizzi firewall aggiungi indirizzo=habr.com list=work_sites comment=for_habr

Come puoi vedere dalla configurazione sopra, creare i tuoi playbook non è difficile. È sufficiente padroneggiare bene cli mikrotik. Immaginiamo una situazione in cui sia necessario rimuovere la lista indirizzi con determinati dati su tutti i router, quindi:

Trova e rimuovi/ip elenco indirizzi firewall rimuovi [trova dove elenco="gov.ru"]

Intenzionalmente non ho incluso qui l'intero elenco dei firewall perché... sarà individuale per ogni progetto. Ma una cosa posso dire con certezza: usa solo l'elenco degli indirizzi.

Secondo GITLAB è tutto chiaro. Non mi dilungherò su questo punto. Tutto è bello per compiti individuali, modelli, gestori.

PowerShell

Ci saranno 3 file qui. Perché PowerShell? Puoi scegliere qualsiasi strumento per generare configurazioni, qualunque sia più conveniente per te. In questo caso, tutti hanno Windows sul proprio PC, quindi perché farlo in bash quando PowerShell è più conveniente. Quale è più conveniente?

Lo script stesso (semplice e comprensibile):[cmdletBinding()] Param(
[Parametro (Mandatory=$true)] [stringa]$EXTERNALIPADDDRESS,
[Parametro(Mandatory=$true)] [stringa]$EXTERNALIPROUTE,
[Parametro (Mandatory=$true)] [string]$BWorknets,
[Parametro (Mandatory=$true)] [stringa]$CWorknets,
[Parametro (Mandatory=$true)] [stringa]$BVoipNets,
[Parametro(Mandatory=$true)] [stringa]$CVoipNets,
[Parametro(Mandatory=$true)] [string]$CClientss,
[Parametro(Mandatory=$true)] [stringa]$BVPNWORKs,
[Parametro(Mandatory=$true)] [stringa]$CVPNWORKs,
[Parametro(Mandatory=$true)] [stringa]$BVPNCLIENTS,
[Parametro(Mandatory=$true)] [stringa]$cVPNCLIENTS,
[Parametro(Mandatory=$true)] [stringa]$NAMEROUTER,
[Parametro(Mandatory=$true)] [stringa]$ServerCertificates,
[Parametro(Mandatory=$true)] [stringa]$infile,
[Parameter(Mandatory=$true)] [string]$outfile
)

Get-Contenuto $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", $BVPNCLIENTS)} |
Foreach-Object {$_.Replace("CVPNCLIENTS", $cVPNCLIENTS)} |
Foreach-Object {$_.Replace("MYNAMERROUTER", $NAMEROUTER)} |
Foreach-Object {$_.Replace("ServerCertificate", $ServerCertificates)} | Set-Contenuto $outfile

Per favore perdonami, non posso pubblicare tutte le regole perché... non sarà molto carino. Puoi stabilire tu stesso le regole, guidato dalle migliori pratiche.

Ad esempio, ecco un elenco di collegamenti che ho seguito:wiki.mikrotik.com/wiki/Manual:Proteggere_il_tuo_router
wiki.mikrotik.com/wiki/Manual:IP/Firewall/Filtro
wiki.mikrotik.com/wiki/Manual:Esempi OSPF
wiki.mikrotik.com/wiki/Drop_port_scanners
wiki.mikrotik.com/wiki/Manual:Winbox
wiki.mikrotik.com/wiki/Manual:Aggiornamento_RouterOS
wiki.mikrotik.com/wiki/Manual:IP/Fasttrack - qui devi sapere che quando fasttrack è abilitato, le regole di prioritizzazione e modellazione del traffico non funzioneranno - utile per dispositivi deboli.

Simboli per le variabili:Si prendono come esempio le seguenti reti:
192.168.0.0/24 rete funzionante
Rete VOIP 172.22.4.0/24
Rete 10.0.0.0/24 per i client senza accesso alla rete locale
192.168.255.0/24 Rete VPN per filiali di grandi dimensioni
172.19.255.0/24 Rete VPN per piccoli

L'indirizzo di rete è composto da 4 numeri decimali, rispettivamente ABCD, la sostituzione funziona con lo stesso principio, se all'avvio chiede B allora significa che bisogna inserire il numero 192.168.0.0 per la rete 24/0, e per C = 0.
$EXTERNALIPADDDRESS - indirizzo dedicato del provider.
$EXTERNALIPROUTE - percorso predefinito alla rete 0.0.0.0/0
$BWorknets - Rete di lavoro, nel nostro esempio saranno 168
$CWorknets - Rete funzionante, nel nostro esempio sarà 0
$BVoipNets - Rete VOIP nel nostro esempio qui 22
$CVoipNets: rete VOIP nel nostro esempio qui 4
$CClientss - Rete per clienti - Solo accesso a Internet, nel nostro caso qui 0
$BVPNWORKs - Rete VPN per filiali di grandi dimensioni, nel nostro esempio 20
$CVPNWORKs - Rete VPN per filiali di grandi dimensioni, nel nostro esempio 255
$BVPNCLIENTS - Rete VPN per piccole filiali, ovvero 19
$CVPNCLIENTS - Rete VPN per piccole filiali, ovvero 255
$NAMEROUTER: nome del router
$ServerCertificate: il nome del certificato importato in precedenza
$infile — Specifica il percorso del file da cui leggeremo la configurazione, ad esempio D:config.txt (preferibilmente il percorso inglese senza virgolette e spazi)
$outfile: specifica il percorso in cui salvarlo, ad esempio D:MT-test.txt

Ho deliberatamente cambiato gli indirizzi negli esempi per ovvi motivi.

Non ho colto il punto sul rilevamento di attacchi e comportamenti anomali: questo merita un articolo a parte. Ma vale la pena sottolineare che in questa categoria è possibile utilizzare i valori dei dati di monitoraggio di Zabbix + dati di curl elaborati da elasticsearch.

A quali punti dovresti prestare attenzione:

  1. Piano di rete. È meglio comporlo immediatamente in una forma leggibile. Excel sarà sufficiente. Sfortunatamente, vedo molto spesso che le reti sono costruite secondo il principio "È apparso un nuovo ramo, ecco /24 per te". Nessuno sa quanti dispositivi sono attesi in una determinata località o se ci sarà un’ulteriore crescita. Ad esempio, è stato aperto un piccolo negozio in cui inizialmente era chiaro che il dispositivo non sarebbe stato più di 10, perché assegnare /24? Per le filiali di grandi dimensioni, al contrario, assegnano /24 e ci sono 500 dispositivi: puoi semplicemente aggiungere una rete, ma vuoi pensare a tutto in una volta.
  2. Regole di filtraggio. Se il progetto presuppone che ci sarà separazione delle reti e massima segmentazione. Le migliori pratiche cambiano nel tempo. In precedenza, la rete di PC e la rete di stampanti erano divise, ma ora è abbastanza normale non dividere queste reti. Vale la pena usare il buon senso e non creare molte sottoreti dove non sono necessarie e non unire tutti i dispositivi in ​​un'unica rete.
  3. Impostazioni "Golden" su tutti i router. Quelli. se hai deciso un piano. Vale la pena prevedere tutto subito e cercare di assicurarsi che tutte le impostazioni siano identiche: solo l'elenco degli indirizzi e gli indirizzi IP sono diversi. Se sorgono problemi, il tempo di debug sarà inferiore.
  4. Le questioni organizzative non sono meno importanti di quelle tecniche. Spesso i dipendenti pigri eseguono queste raccomandazioni “manualmente”, senza utilizzare configurazioni e script già pronti, il che alla fine porta a problemi dal nulla.

Tramite routing dinamico. È stato utilizzato OSPF con divisione in zone. Ma questo è un banco di prova, è più interessante impostare queste cose in condizioni di combattimento.

Spero che nessuno sia arrabbiato per non aver pubblicato le configurazioni del router. Penso che i collegamenti saranno sufficienti e quindi tutto dipende dai requisiti. E ovviamente sono necessari test, ulteriori test.

Auguro a tutti di realizzare i propri progetti nel nuovo anno. Che l'accesso concesso sia con voi!!!

Fonte: habr.com

Aggiungi un commento