Mein unvollendetes Projekt. Netzwerk aus 200 MikroTik-Routern

Mein unvollendetes Projekt. Netzwerk aus 200 MikroTik-Routern

Hallo alle. Dieser Artikel richtet sich an diejenigen, die viele Mikrotik-Geräte im Park haben und eine maximale Vereinheitlichung erreichen möchten, um nicht jedes Gerät einzeln anzuschließen. In diesem Artikel werde ich ein Projekt beschreiben, das aufgrund menschlicher Faktoren leider nicht die Kampfbedingungen erreichte. Kurz gesagt: mehr als 200 Router, schnelle Einrichtung und Mitarbeiterschulung, Vereinheitlichung nach Region, Filterung von Netzwerken und bestimmten Hosts, die Möglichkeit, auf einfache Weise Regeln für alle Geräte hinzuzufügen, Protokollierung und Zugriffskontrolle.

Was unten beschrieben wird, erhebt keinen Anspruch auf einen fertigen Fall, aber ich hoffe, dass es Ihnen bei der Planung Ihrer Netzwerke und der Minimierung von Fehlern nützlich sein wird. Vielleicht erscheinen Ihnen einige Punkte und Entscheidungen nicht ganz richtig – wenn ja, schreiben Sie in die Kommentare. Kritik wird in diesem Fall eine Erfahrung in einem gemeinsamen Sparschwein sein. Deshalb, lieber Leser, schauen Sie in die Kommentare, vielleicht hat der Autor einen groben Fehler gemacht – die Community hilft.

Die Anzahl der Router beträgt 200–300, verteilt auf verschiedene Städte mit unterschiedlicher Qualität der Internetverbindung. Es ist notwendig, alles schön zu gestalten und den lokalen Administratoren auf verständliche Weise zu erklären, wie alles funktionieren wird.

Wo beginnt also jedes Projekt? Natürlich mit TK.

  1. Organisation eines Netzwerkplans für alle Filialen nach Kundenwunsch, Netzwerksegmentierung (von 3 bis 20 Netzwerke in Filialen, abhängig von der Anzahl der Geräte).
  2. Richten Sie Geräte in jeder Filiale ein. Überprüfung der tatsächlichen Bandbreite des Anbieters unter verschiedenen Arbeitsbedingungen.
  3. Organisation des Geräteschutzes, Whitelist-Kontrolle, automatische Erkennung von Angriffen mit automatischer Blacklisting für einen bestimmten Zeitraum, Minimierung des Einsatzes verschiedener technischer Mittel zum Abfangen von Kontrollzugriffen und Denial-of-Service.
  4. Organisation sicherer VPN-Verbindungen mit Netzwerkfilterung nach Kundenwunsch. Mindestens 3 VPN-Verbindungen von jeder Filiale zum Zentrum.
  5. Basierend auf den Punkten 1 und 2. Wählen Sie die besten Möglichkeiten zum Aufbau eines fehlertoleranten VPN. Die dynamische Routing-Technologie mit der richtigen Begründung kann vom Auftragnehmer gewählt werden.
  6. Organisation der Traffic-Priorisierung nach Protokollen, Ports, Hosts und anderen spezifischen Diensten, die der Kunde nutzt. (VOIP, Hosts mit wichtigen Diensten)
  7. Organisation der Überwachung und Protokollierung von Router-Ereignissen zur Reaktion des technischen Supportpersonals.

Soweit wir wissen, wird die TOR in einigen Fällen aus den Anforderungen zusammengestellt. Ich habe diese Anforderungen selbst formuliert, nachdem ich mir die Hauptprobleme angehört hatte. Er räumte die Möglichkeit ein, dass jemand anderes die Umsetzung dieser Punkte übernehmen könnte.

Mit welchen Tools werden diese Anforderungen erfüllt:

  1. ELK-Stack (nach einiger Zeit wurde klar, dass fluentd anstelle von logstash verwendet werden würde).
  2. Ansible. Zur einfacheren Verwaltung und Freigabe des Zugriffs verwenden wir AWX.
  3. GITLAB. Hier besteht kein Erklärungsbedarf. Wo ohne Versionskontrolle unserer Konfigurationen.
  4. Power Shell. Für die erste Generierung der Konfiguration wird es ein einfaches Skript geben.
  5. Doku-Wiki zum Schreiben von Dokumentationen und Handbüchern. In diesem Fall nutzen wir habr.com.
  6. Die Überwachung erfolgt über zabbix. Zum allgemeinen Verständnis wird es auch einen Anschlussplan geben.

EFK-Einrichtungspunkte

Zum ersten Punkt beschreibe ich nur die Ideologie, auf der die Indizes aufbauen werden. Es gibt viele
Hervorragende Artikel zum Einrichten und Empfangen von Protokollen von Geräten, auf denen Mikrotik ausgeführt wird.

Ich werde auf einige Punkte eingehen:

1. Gemäß dem Schema ist es eine Überlegung wert, Protokolle von verschiedenen Orten und an verschiedenen Häfen zu empfangen. Dazu verwenden wir einen Protokollaggregator. Wir möchten außerdem universelle Grafiken für alle Router mit der Möglichkeit zum gemeinsamen Zugriff erstellen. Dann bauen wir die Indizes wie folgt auf:

Hier ist ein Teil der Konfiguration mit fluentd elastische Suche
logstash_format true
Indexname mikrotiklogs.north
logstash_prefix mikrotiklogs.north
Flush_Intervall 10s
Gastgeber elasticsearch: 9200
Port 9200

Somit können wir Router kombinieren und nach Plan segmentieren – mikrotiklogs.west, mikrotiklogs.south, mikrotiklogs.east. Warum es so schwierig machen? Wir gehen davon aus, dass wir 200 oder mehr Geräte haben werden. Befolgen Sie nicht alles. Seit Version 6.8 von Elasticsearch stehen uns Sicherheitseinstellungen zur Verfügung (ohne Kauf einer Lizenz), sodass wir Anzeigerechte zwischen Mitarbeitern des technischen Supports oder lokalen Systemadministratoren verteilen können.
Tabellen, Grafiken – hier müssen Sie sich nur einigen – entweder die gleichen verwenden, oder jeder macht es so, wie es für ihn bequem ist.

2. Durch Protokollierung. Wenn wir die Anmeldung in den Firewall-Regeln aktivieren, dann machen wir die Namen ohne Leerzeichen. Es ist ersichtlich, dass wir mit einer einfachen Konfiguration in fluentd die Daten filtern und praktische Panels erstellen können. Das Bild unten zeigt meinen Heimrouter.

Mein unvollendetes Projekt. Netzwerk aus 200 MikroTik-Routern

3. Je nach belegtem Platz und Protokollen. Im Durchschnitt belegen die Protokolle bei 1000 Nachrichten pro Stunde 2-3 MB pro Tag, was, wie Sie sehen, nicht so viel ist. Elasticsearch-Version 7.5.

ANSIBLE.AWX

Zum Glück haben wir ein fertiges Modul für Routeros
Ich habe auf AWX hingewiesen, aber die folgenden Befehle beziehen sich nur auf Ansible in seiner reinsten Form. Ich denke, für diejenigen, die mit Ansible gearbeitet haben, wird es keine Probleme geben, AWX über die GUI zu verwenden.

Um ehrlich zu sein, habe ich mir zuvor andere Anleitungen angesehen, in denen SSH verwendet wurde, und jeder hatte unterschiedliche Probleme mit der Antwortzeit und eine Reihe anderer Probleme. Ich wiederhole, es kam nicht zur Schlacht.  Betrachten Sie diese Informationen als ein Experiment, das nicht über einen Stand von 20 Routern hinausging.

Wir müssen ein Zertifikat oder ein Konto verwenden. Die Entscheidung liegt bei Ihnen, ich bin für Zertifikate. Ein subtiler Punkt zu den Rechten. Ich gebe die Rechte zum Schreiben - zumindest „Reset Config“ wird nicht funktionieren.

Beim Generieren, Kopieren des Zertifikats und Importieren sollte es keine Probleme geben:

Kurze Auflistung der BefehleAuf Ihrem PC
ssh-keygen -t RSA, Fragen beantworten, Schlüssel speichern.
Nach Mikrotik kopieren:
Benutzer ssh-keys import public-key-file=id_mtx.pub user=ansible
Zuerst müssen Sie ein Konto erstellen und ihm Rechte zuweisen.
Überprüfung der Verbindung mit dem Zertifikat
ssh -p 49475 -i /keys/mtx [E-Mail geschützt]

Schreiben Sie 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

Nun, ein Beispiel für ein Playbook: Name: add_work_sites
hosts:testmt
Seriennummer: 1
Verbindung:network_cli
remote_user: mikrotik.west
sammeln_Fakten: ja
Aufgaben:
Name: Work_sites hinzufügen
routeros_command:
Befehle:
- /ip Firewall-Adressliste add address=gov.ru list=work_sites comment=Ticket665436_Ochen_nado
- /ip Firewall-Adressliste add address=habr.com list=work_sites comment=for_habr

Wie Sie der obigen Konfiguration entnehmen können, ist das Zusammenstellen eigener Playbooks eine einfache Sache. Es ist gut genug, um Cli Mikrotik zu beherrschen. Stellen Sie sich eine Situation vor, in der Sie die Adressliste mit bestimmten Daten auf allen Routern löschen müssen, dann:

Finden und entfernen/ip Firewall-Adressliste entfernen [find where list="gov.ru"]

Ich habe hier bewusst nicht die gesamte Firewall-Auflistung aufgeführt. es wird für jedes Projekt individuell sein. Aber eines kann ich mit Sicherheit sagen: Verwenden Sie nur die Adressliste.

Laut GITLAB ist alles klar. Ich werde mich nicht mit diesem Moment befassen. Alles ist schön, was die einzelnen Aufgaben, Vorlagen und Handler betrifft.

Powershell

Es werden 3 Dateien vorhanden sein. Warum Powershell? Das Tool zum Generieren von Konfigurationen kann von jedem gewählt werden, der sich damit auskennt. In diesem Fall hat jeder Windows auf seinem PC. Warum also auf Bash machen, wenn Powershell bequemer ist? Wer fühlt sich wohler?

Das Skript selbst (einfach und verständlich):[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

Ich bitte um Verzeihung, ich kann nicht alle Regeln darlegen. es wird nicht schön sein. Sie können die Regeln selbst festlegen und sich dabei an den Best Practices orientieren.

Hier ist zum Beispiel eine Liste von Links, an denen ich mich orientieren konnte:wiki.mikrotik.com/wiki/Manual:Securing_Your_Router
wiki.mikrotik.com/wiki/Manual:IP/Firewall/Filter
wiki.mikrotik.com/wiki/Manual:OSPF-Beispiele
wiki.mikrotik.com/wiki/Drop_port_scanners
wiki.mikrotik.com/wiki/Manual:Winbox
wiki.mikrotik.com/wiki/Manual:Upgrade_RouterOS
wiki.mikrotik.com/wiki/Manual:IP/Fasttrack – hier müssen Sie wissen, dass bei aktiviertem Fasttrack die Regeln zur Priorisierung und Gestaltung des Datenverkehrs nicht funktionieren – nützlich für schwache Geräte.

Variablenkonventionen:Als Beispiel dienen folgende Netzwerke:
192.168.0.0/24 funktionierendes Netzwerk
172.22.4.0/24 VOIP-Netzwerk
10.0.0.0/24 Netzwerk für Clients ohne LAN-Zugang
192.168.255.0/24 VPN-Netzwerk für große Filialen
172.19.255.0/24 VPN-Netzwerk für kleine

Die Netzwerkadresse besteht aus 4 Dezimalzahlen bzw. ABCD, die Ersetzung funktioniert nach dem gleichen Prinzip, wenn beim Start B gefragt wird, dann muss man für das Netzwerk 192.168.0.0/24 die Zahl 0 eingeben, für C = 0 .
$EXTERNALIPADDRESS – zugewiesene Adresse vom Anbieter.
$EXTERNALIPROUTE – Standardroute zum Netzwerk 0.0.0.0/0
$BWorknets – Arbeitsnetzwerk, in unserem Beispiel sind es 168
$CWorknets – Arbeitsnetzwerk, in unserem Beispiel ist es 0
$BVoipNets – VOIP-Netzwerk in unserem Beispiel hier 22
$CVoipNets – VOIP-Netzwerk in unserem Beispiel hier 4
$CClientss – Netzwerk für Clients – Zugriff nur auf das Internet, in unserem Fall hier 0
$BVPNWORKs – VPN-Netzwerk für große Filialen, in unserem Beispiel 20
$CVPNWORKs – VPN-Netzwerk für große Filialen, in unserem Beispiel 255
$BVPNCLIENTS – VPN-Netzwerk für kleine Filialen, bedeutet 19
$CVPNCLIENTS – VPN-Netzwerk für kleine Filialen, bedeutet 255
$NAMEROUTER – Routername
$ServerCertificate – der Name des Zertifikats, das Sie zuerst importieren
$infile – Geben Sie den Pfad zu der Datei an, aus der wir die Konfiguration lesen, zum Beispiel D:config.txt (besserer englischer Pfad ohne Anführungszeichen und Leerzeichen)
$outfile – Geben Sie den Pfad zum Speichern an, zum Beispiel D:MT-test.txt

Aus offensichtlichen Gründen habe ich die Adressen in den Beispielen bewusst geändert.

Ich habe den Punkt der Erkennung von Angriffen und anomalem Verhalten übersehen – das verdient einen separaten Artikel. Es ist jedoch darauf hinzuweisen, dass Sie in dieser Kategorie Überwachungsdatenwerte von Zabbix + ausgearbeitete Curl-Daten von Elasticsearch verwenden können.

Auf welche Punkte sollte man sich konzentrieren:

  1. Netzwerkplan. Es ist besser, es in einer lesbaren Form zu schreiben. Excel reicht aus. Leider sehe ich oft, dass Netzwerke nach dem Prinzip zusammengestellt werden: „Ein neuer Zweig ist entstanden, hier ist /24 für Sie.“ Niemand erfährt, wie viele Geräte an einem bestimmten Standort erwartet werden und ob es weiteres Wachstum geben wird. Zum Beispiel wurde ein kleiner Laden eröffnet, in dem zunächst klar ist, dass es nicht mehr als 10 Geräte geben wird. Warum / 24 zuweisen? Bei großen Filialen hingegen werden / 24 zugewiesen, und es gibt 500 Geräte – man kann einfach ein Netzwerk hinzufügen, möchte aber gleich alles durchdenken.
  2. Filterregeln. Wenn das Projekt davon ausgeht, dass es eine Trennung der Netzwerke und eine maximale Segmentierung geben wird. Best Practices ändern sich im Laufe der Zeit. Früher teilten sie sich ein PC-Netzwerk und ein Druckernetzwerk, heute ist es ganz normal, diese Netzwerke nicht gemeinsam zu nutzen. Es lohnt sich, den gesunden Menschenverstand zu nutzen und nicht viele Subnetze dort zu erstellen, wo sie nicht benötigt werden, und nicht alle Geräte in einem Netzwerk zusammenzufassen.
  3. „Goldene“ Einstellungen auf allen Routern. Diese. wenn du einen Plan hast. Es lohnt sich, alles auf einmal vorherzusehen und sicherzustellen, dass alle Einstellungen identisch sind – es gibt nur unterschiedliche Adresslisten und IP-Adressen. Bei Problemen verkürzt sich die Zeit zum Debuggen.
  4. Organisatorische Aspekte sind nicht weniger wichtig als technische. Häufig befolgen faule Mitarbeiter diese Empfehlungen „manuell“, ohne vorgefertigte Konfigurationen und Skripte zu verwenden, was letztendlich zu Problemen von Grund auf führt.

Durch dynamisches Routing. Es wurde OSPF mit Zoning verwendet. Aber das ist ein Prüfstand, unter Kampfbedingungen ist es interessanter, solche Dinge einzurichten.

Ich hoffe, es hat niemanden verärgert, dass ich die Konfiguration der Router nicht gepostet habe. Ich denke, dass Links ausreichen werden, und dann kommt es auf die Anforderungen an. Und natürlich sind Tests, noch mehr Tests erforderlich.

Ich wünsche allen, dass sie im neuen Jahr ihre Projekte verwirklichen. Möge der gewährte Zugang mit Dir sein!!!

Source: habr.com

Kommentar hinzufügen