Mein nicht realisiertes Projekt. Netzwerk von 200 MikroTik Routern



Hallo allerseits. Dieser Artikel richtet sich an Benutzer, die über eine Vielzahl von Mikrotik-Geräten im Park verfügen und eine maximale Vereinheitlichung erzielen möchten, um keine Verbindung zu jedem Gerät einzeln herzustellen. In diesem Artikel werde ich ein Projekt beschreiben, das aufgrund menschlicher Faktoren leider keine Kampfbedingungen erreicht hat. Kurz gesagt: Über 200 Router, schnelle Konfiguration und Schulung der Mitarbeiter, Vereinheitlichung nach Regionen, Filtern von Netzwerken und bestimmten Hosts, einfache Möglichkeit, Regeln für alle Geräte hinzuzufügen, Protokollierung und Zugriffskontrolle.

Was im Folgenden beschrieben wird, erhebt keinen Anspruch auf Vollständigkeit, aber ich hoffe, es ist hilfreich für Sie, wenn Sie Ihre Netzwerke planen und Fehler minimieren. Vielleicht scheinen Ihnen einige Punkte und Entscheidungen nicht richtig zu sein - wenn ja, schreiben Sie in die Kommentare. Kritik wird in diesem Fall zu einem Erlebnis in einem gemeinsamen Sparschwein. Deshalb, der Leser, schauen Sie sich die Kommentare an, vielleicht hat der Autor einen schweren Fehler gemacht - die Community wird helfen.

Die Anzahl der Router liegt zwischen 200 und 300, verteilt auf verschiedene Städte mit unterschiedlicher Qualität der Internetverbindung. Es ist notwendig, alles schön zu machen und den lokalen Administratoren zu erklären, wie alles funktionieren wird.

Wo beginnt ein Projekt? Natürlich mit TK .

  1. Organisation eines Netzplans für alle Filialen nach Kundenwunsch, Netzsegmentierung (3 bis 20 Netze in Filialen je nach Anzahl der Geräte).
  2. Konfigurieren Sie Geräte in jedem Zweig. Überprüfung der tatsächlichen Bandbreite des Anbieters unter verschiedenen Arbeitsbedingungen.
  3. Organisation des Geräteschutzes, White-List-Management, automatische Erkennung von Angriffen mit automatischer Sperrung für einen bestimmten Zeitraum, Minimierung des Einsatzes verschiedener technischer Mittel zum Abfangen des Zugriffs und Verweigern von Diensten.
  4. Organisation sicherer VPN-Verbindungen mit Netzwerkfilterung nach Kundenwunsch. Mindestens 3 VPN-Verbindungen von jedem Zweig zur Zentrale.
  5. Basierend auf Absatz 1, 2. Wählen Sie die optimalen Möglichkeiten zum Erstellen von fehlertolerantem VPN. Die dynamische Routing-Technologie kann, wenn dies richtig gerechtfertigt ist, vom Auftragnehmer ausgewählt werden.
  6. Organisation der Verkehrspriorisierung nach Protokollen, Ports, Hosts und anderen spezifischen Diensten, die der Kunde verwendet. (VOIP, Hosts mit wichtigen Diensten)
  7. Organisation der Überwachung und Protokollierung von Router-Ereignissen für die Reaktion der Mitarbeiter des technischen Supports.

Wie wir verstehen, wird TK in einer Reihe von Fällen aus Anforderungen zusammengestellt. Ich habe diese Anforderungen selbst formuliert, nachdem ich mir die Hauptprobleme angehört hatte. Ich habe die Möglichkeit eingeräumt, dass jemand anderes die Umsetzung dieser Punkte übernimmt.

Welche Tools werden verwendet, um diese Anforderungen zu erfüllen:

  1. ELK-Stack (nach einiger Zeit wurde klar, dass fluentd anstelle von logstash verwendet wird).
  2. Ansible. Für eine einfache Administration und gemeinsame Nutzung des Zugriffs verwenden wir AWX.
  3. GITLAB. Es besteht kein Grund zur Erklärung. Wo ohne Versionskontrolle unserer Configs.
  4. PowerShell Es wird ein einfaches Skript für die erste Generierung der Konfiguration geben.
  5. Doku-Wiki zum Verfassen von Dokumentationen und Handbüchern. Verwenden Sie in diesem Fall habr.com.
  6. Die Überwachung erfolgt über zabbix. Dort wird zum allgemeinen Verständnis ein Anschlussplan gezeichnet.

EFK-Einstellungen Momente


Im ersten Absatz werde ich nur die Ideologie beschreiben, nach der die Indizes aufgebaut 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. Nach dem Schema ist es empfehlenswert, Protokolle von verschiedenen Orten und an verschiedenen Ports zu erhalten. Dafür verwenden wir einen Log-Aggregator. Außerdem möchten wir universelle Zeitpläne für alle Router mit der Möglichkeit der gemeinsamen Nutzung des Zugriffs erstellen. Dann konstruieren wir die Indizes wie folgt:

hier ist ein stück config mit fluentd
Geben Sie elasticsearch ein
logstash_format true
index_name mikrotiklogs.north
logstash_prefix mikrotiklogs.north
flush_interval 10s
Hosts elasticsearch : 9200
Port 9200


So können wir Router und Segment nach dem Plan mikrotiklogs.west, mikrotiklogs.south, mikrotiklogs.east kombinieren. Warum das komplizieren? Wir verstehen, dass wir 200 oder mehr Geräte haben werden. Behalten Sie nicht alles im Auge. Seit Version 6.8 von elasticsearch haben wir Zugriff auf Sicherheitseinstellungen (ohne eine Lizenz zu kaufen), sodass wir Anzeigerechte zwischen Mitarbeitern des technischen Supports oder lokalen Systemadministratoren verteilen können.
Tabellen, Grafiken - hier müssen Sie nur zustimmen - verwenden entweder dasselbe oder jedes tut, was ihm passt.

2. Durch die Protokollierung. Wenn wir die Anmeldung in den Firewall-Regeln aktivieren, machen wir die Namen ohne Leerzeichen. Es ist zu sehen, dass wir mit einer einfachen Konfiguration in fluentd die Daten filtern und praktische Panels erstellen können. Auf dem Bild unten ist mein Heimrouter.

Bild

3. Entsprechend dem besetzten Platz und den Protokollen. Im Durchschnitt belegen die Protokolle mit 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 mit Gui Awx geben.

Ich gebe ehrlich zu, vorher habe ich mir andere Anleitungen angeschaut, in denen ssh verwendet wurde, und jeder hatte andere Probleme mit der Reaktionszeit und eine Reihe anderer Probleme. Ich wiederhole, es ist nicht zum Kampf gekommen. Nehmen Sie diese Informationen als Experiment, das nicht über den Stand von 20 Routern hinausging.

Wir müssen ein Zertifikat oder eine Buchhaltung verwenden. Es liegt an Ihnen, ich bin für Zertifikate. Ein subtiler Punkt zu Rechten. Ich erteile Schreibrechte - zumindest "Konfiguration zurücksetzen" ist nicht möglich.

Es sollte keine Probleme beim Generieren, Kopieren und Importieren des Zertifikats geben:

Kurze Auflistung der Teams
Auf deinem PC
ssh-keygen -t RSA, beantworte Fragen, speichere den Schlüssel.
Kopie an mikrotik:
user ssh-keys importieren public-key-file = id_mtx.pub user = ansible
Zuerst müssen Sie ein Konto erstellen und ihm Rechte zuweisen.
Überprüfen Sie die Verbindung per Zertifikat
ssh -p 49475 -i / keys / mtx ansible@192.168.0.120

Wir schreiben 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 Playbook-Beispiel:
- name: add_work_sites
Hosts: testmt
Seriennummer: 1
verbindung: network_cli
remote_user: mikrotik.west
gather_facts: ja
aufgaben:
- name: füge Arbeitsstandorte hinzu
routeros_command:
Befehle:
- / ip Firewall-Adressliste add address = gov.ru list = Arbeitsstandorte comment = Ticket665436_Ochen_nado
- / ip Firewall-Adressliste add address = habr.com list = work_sites comment = for_habr

Wie Sie aus der obigen Konfiguration ersehen können, ist das Kompilieren Ihres Playbooks ein Kinderspiel. Es ist gut genug, um cli mikrotik zu beherrschen. Stellen Sie sich eine Situation vor, in der Sie auf allen Routern die Adressliste mit bestimmten Daten entfernen müssen:

Suchen und löschen
/ ip firewal address-list remove [find where list = "gov.ru"]

Ich habe hier absichtlich nicht die gesamte Auflistung der Firewall eingefügt. Es wird für jedes Projekt individuell sein. Aber eins ist sicher, benutze nur die Adressliste.

Mit GITLAB ist alles klar. Ich werde nicht auf diesen Moment eingehen. Alles ist schön für separate Aufgaben, Vorlagen, Handler.

Powershell


Es wird 3 Dateien geben. Warum Powershell? Ein Tool zum Generieren von Konfigurationen kann von jedem gewählt werden, der es bequemer hat. In diesem Fall hat jeder Windows auf dem PC. Warum also auf Bash, wenn Powershell praktischer ist? Für wen ist es bequemer.

Das Skript selbst (einfach und unkompliziert):
[cmdletBinding ()]
Param (
[Parameter (Obligatorisch = $ true)]
[string] $ EXTERNALIPADDRESS,
[Parameter (Obligatorisch = $ true)]
[string] $ EXTERNALIPROUTE,
[Parameter (Obligatorisch = $ true)]
[string] $ BWorknets,
[Parameter (Obligatorisch = $ true)]
[string] $ CWorknets,
[Parameter (Obligatorisch = $ true)]
[string] $ BVoipNets,
[Parameter (Obligatorisch = $ true)]
[string] $ CVoipNets,
[Parameter (Obligatorisch = $ true)]
[string] $ CClientss,
[Parameter (Obligatorisch = $ true)]
[string] $ BVPNWORKs,
[Parameter (Obligatorisch = $ true)]
[string] $ CVPNWORKs,
[Parameter (Obligatorisch = $ true)]
[string] $ BVPNCLIENTSs,
[Parameter (Obligatorisch = $ true)]
[string] $ cVPNCLIENTSs,
[Parameter (Obligatorisch = $ true)]
[string] $ NAMEROUTER,
[Parameter (Obligatorisch = $ true)]
[string] $ ServerCertificates,
[Parameter (Obligatorisch = $ true)]
[string] $ infile,
[Parameter (Obligatorisch = $ 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


Bitte vergib mir, ich kann da nicht alle Regeln aufstellen es wird nicht ganz schön sein. Sie können die Regeln selbst festlegen und sich dabei an bewährten Methoden orientieren.

Hier ist zum Beispiel eine Liste von Links, von denen ich geleitet wurde:
wiki.mikrotik.com/wiki/Manual : Sichern_Ihres_Routers
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 : Upgrading_RouterOS
wiki.mikrotik.com/wiki/Manual : IP / Fasttrack - hier müssen Sie wissen, dass, wenn Sie Fasttrack aktivieren, die Regeln zum Priorisieren und Formen des Datenverkehrs nicht funktionieren - nützlich für schwache Geräte.

Symbole für Variablen:
Die folgenden Netzwerke werden als Beispiel genommen:
192.168.0.0/24 Arbeitsnetzwerk
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 Sie beim Start nach B fragen, müssen Sie die Zahl 0 für das Netzwerk 192.168.0.0/24 und für C = 0 eingeben.
$ EXTERNALIPADDRESS - eine dedizierte Adresse vom Anbieter.
$ EXTERNALIPROUTE - Die Standardroute zum Netzwerk ist 0.0.0.0/0
$ BWorknets - Arbeitsnetzwerk, in unserem Beispiel wird es 168 geben
$ CWorknets - Das funktionierende Netzwerk, 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 Kunden - Nur Internetzugang, in unserem Fall hier 0
$ BVPNWORKs - VPN-Netzwerk für große Filialen, in unserem Beispiel 20
$ CVPNWORKs - VPN-Netzwerk für große Zweigstellen, in unserem Beispiel 255
$ BVPNCLIENTS - VPN-Netzwerk für kleine Filialen, dann 19
$ CVPNCLIENTS - VPN-Netzwerk für kleine Filialen, dh 255
$ NAMEROUTER - Der Name des Routers
$ ServerCertificate - Der Name des Zertifikats, das Sie vor dem Importieren verwenden
$ infile - Geben Sie den Pfad zu der Datei an, aus der die Konfiguration gelesen werden soll, z. B. D: \ config.txt (der englische Pfad ohne Anführungszeichen und Leerzeichen ist besser).
$ outfile - Geben Sie den Pfad zum Speichern an, z. B. D: \ MT-test.txt

Ich habe die Adressen in den Beispielen aus offensichtlichen Gründen absichtlich geändert.

Ich habe den Punkt über das Erkennen von Angriffen und abnormalem Verhalten übersprungen - dies verdient einen separaten Artikel. Es ist jedoch darauf hinzuweisen, dass Sie in dieser Kategorie die Werte der Überwachungsdaten mit Zabbix + verwenden können, die mit Elasticsearch ermittelt wurden.

Auf welche Punkte müssen Sie sich konzentrieren:

  1. Netzwerkplan. Es ist besser, sofort in lesbarer Form zu verfassen. Genug ist genug. Leider sehe ich oft, dass Netzwerke nach dem Prinzip zusammengestellt werden: "Ein neuer Zweig ist erschienen, hier bist du / 24". Niemand findet heraus, wie viele Geräte sich an einem bestimmten Ort befinden sollen und ob es weiteres Wachstum geben wird. Zum Beispiel ein kleines Geschäft eröffnet, in dem zunächst klar ist, dass das Gerät nicht mehr als 10 sein wird, warum / 24 zuweisen? In großen Filialen - im Gegenteil, sie weisen / 24 zu, und es gibt 500 Geräte - können Sie einfach ein Netzwerk hinzufügen, aber Sie möchten alles sofort durchdenken.
  2. Filterregeln. Wenn das Projekt davon ausgeht, dass es zu einer Trennung von Netzwerken und maximaler Segmentierung kommt. Best Practices ändern sich im Laufe der Zeit. Früher teilten sie ein PC-Netzwerk und ein Netzwerk von Druckern, jetzt ist es normal, diese Netzwerke nicht mehr zu teilen. Es lohnt sich, den gesunden Menschenverstand zu verwenden und nicht viele Subnetze zu erstellen, in denen sie nicht benötigt werden, und nicht alle Geräte in einem Netzwerk zu verbinden.
  3. "Goldene" Einstellungen auf allen Routern. Das heißt wenn Sie sich für einen Plan entschieden haben. Es lohnt sich, sofort alles vorherzusehen und sicherzustellen, dass alle Einstellungen identisch sind - es gibt nur unterschiedliche Adresslisten und IP-Adressen. Bei Problemen verkürzt sich die Debugging-Zeit.
  4. Organisatorische Fragen sind nicht weniger wichtig als technische. Oft befolgen faule Mitarbeiter diese Empfehlungen „manuell“, ohne fertige Konfigurationen und Skripte zu verwenden, was letztendlich zu Problemen von Grund auf führt.

Durch dynamisches Routing. Benutztes OSPF mit zonaler Teilung. Dies ist jedoch ein Prüfstand. Unter Kampfbedingungen ist es interessanter, solche Dinge einzurichten.

Ich hoffe niemand hat sich darüber geärgert, dass ich die Konfiguration der Router nicht gepostet habe. Ich denke, dass es genug Links geben wird, und dann hängt alles von den Anforderungen ab. Und natürlich sind weitere Tests erforderlich.

Ich wünsche allen, ihre Projekte im neuen Jahr umzusetzen. Ja, der Zugang wird gewährt !!!

Source: https://habr.com/ru/post/de482384/


All Articles