
Hallo zusammen. Dieser Artikel richtet sich an alle, die viele MikroTik-Geräte in ihrem Netzwerk haben und eine maximale Vereinheitlichung wünschen, um nicht jedes Gerät einzeln anschließen zu müssen. In diesem Artikel beschreibe ich ein Projekt, das leider aus menschlichen Faktoren nicht in den Einsatz gelangte. Kurz gesagt: über 200 Router, schnelle Konfiguration und Schulung des Personals, Vereinheitlichung nach Regionen, Netzwerkinfilterung und gezielte Hosts, die Möglichkeit, Regeln einfach für alle Geräte hinzuzufügen, Protokollierung und Zugriffskontrolle.
Was im Folgenden beschrieben wird, ist kein fertig ausgearbeitetes Fallbeispiel, aber ich hoffe, es wird Ihnen bei der Planung Ihrer Netzwerke und der Minimierung von Fehlern nützlich sein. Möglicherweise erscheinen Ihnen einige Punkte und Lösungen nicht ganz richtig – falls ja, schreiben Sie bitte einen Kommentar. Kritik wird in diesem Fall als wertvolle Erfahrung angesehen. Daher, liebe Leser, schauen Sie in die Kommentare, vielleicht hat der Autor einen groben Fehler gemacht – die Gemeinschaft hilft.
Anzahl der Router 200-300, verteilt auf verschiedene Städte mit unterschiedlicher Internetverbindung. Es ist wichtig, alles ansprechend zu gestalten und den lokalen Administratoren zu erklären, wie alles funktionieren wird.
Also, womit beginnt jedes Projekt? Natürlich mit Anforderungen.
- Der Organisation des Netzwerkplans für alle Filialen gemäß den Anforderungen des Kunden, Segmentierung der Netzwerke (von 3 bis 20 Netzen in den Filialen, abhängig von der Anzahl der Geräte).
- Die Konfiguration der Geräte in jeder Filiale. Überprüfung der tatsächlichen Bandbreite des Anbieters unter verschiedenen Arbeitsbedingungen.
- Die Organisation des Geräteschutzes, Verwaltung nach Whitelist, automatisierte Erkennung von Angriffen mit automatischer Eintragung in die Blacklist für einen bestimmten Zeitraum, Minimierung des Einsatzes verschiedener technischer Mittel zur Abfangung des Zugriffs und zur Vermeidung von Ausfällen.
- Die Einrichtung sicherer VPN-Verbindungen mit einer Filterung nach Netzwerken gemäß den Anforderungen des Kunden. Mindestens 3 VPN-Verbindungen von jeder Filiale zum Zentrum.
- Basierend auf Punkt 1, 2. Wählen Sie die optimalen Ansätze für den Aufbau robuster VPNs. Die Technologie der dynamischen Routenwahl kann vom Auftragnehmer bei entsprechender Begründung ausgewählt werden.
- Organisation der Priorisierung des Datenverkehrs nach Protokollen, Ports, Hosts und anderen spezifischen Diensten, die der Kunde nutzt. (VOIP, Hosts mit wichtigen Diensten)
- Organisation der Überwachung und Protokollierung von Routerereignissen zur Reaktion des technischen Supports.
Wie wir verstehen, wird in einigen Fällen das Pflichtenheft aus den Anforderungen erstellt. Diese Anforderungen habe ich selbst formuliert, indem ich die Hauptprobleme angehört habe. Dabei habe ich auch in Betracht gezogen, dass jemand anderes diese Punkte umsetzen könnte.
Welche Tools werden zur Erfüllung dieser Anforderungen verwendet:
- ELK-Stack (nach einiger Zeit kam die Einsicht, dass anstelle von Logstash fluentd verwendet werden wird).
- Ansible. Für eine einfache Verwaltung und Zugriffstrennung werden wir AWX verwenden.
- GITLAB. Hier muss nichts erklärt werden. Wo wäre unser Versionskontrollsystem ohne die Kontrolle unserer Konfigurationen?
- PowerShell. Es wird ein einfaches Skript zur initialen Generierung der Konfiguration geben.
- Dokuwiki für die Erstellung von Dokumentationen und Anleitungen. In diesem Fall nutzen wir habr.com.
- Die Überwachung erfolgt über Zabbix. Dort wird auch ein Schema der Verbindungen zur allgemeinen Verständnis dargestellt.
Einrichtungen von EFK
Zum ersten Punkt werde ich nur die Ideologie beschreiben, nach der die Indizes aufgebaut werden. Es gibt viele
erstklassige Artikel zur Konfiguration und zum Empfang von Logs von Geräten, die mit MikroTik betrieben werden.
Ich werde auf einige Aspekte eingehen:
1. Gemäß dem Schema sollten wir den Empfang von Logs aus verschiedenen Quellen und über verschiedene Ports durchdenken. Zu diesem Zweck werden wir einen Log-Aggregator verwenden. Außerdem möchten wir universelle Grafiken für alle Router schaffen, mit der Möglichkeit zur Zugangstrennung. Daher bauen wir die Indizes wie folgt auf:
Hier ist ein Teil der Konfiguration mit Fluentd type elasticsearch
logstash_format true
index_name mikrotiklogs.north
logstash_prefix mikrotiklogs.north
flush_interval 10s
hosts :9200
port 9200
So können wir Router miteinander verbinden und gemäß dem Plan segmentieren: mikrotiklogs.west, mikrotiklogs.south, mikrotiklogs.east. Warum das Ganze so kompliziert machen? Wir wissen, dass wir über 200 Geräte haben werden. Das lässt sich nicht alles im Auge behalten. Mit der Version 6.8 von Elasticsearch stehen uns Sicherheitsanpassungen zur Verfügung (ohne Lizenzkauf), sodass wir die Zugriffsrechte für die Sichtbarkeit zwischen den Technikmitarbeitern oder lokalen Systemadministratoren verteilen können.
Tabellen, Grafiken – hier muss man einfach einen Konsens finden – entweder wir verwenden ein einheitliches Format, oder jeder macht es so, wie es ihm am besten passt.
2. Zum Logging. Wenn wir im Firewall-Regelwerk Logging aktivieren, sollten die Namen ohne Leerzeichen gestaltet werden. Offensichtlich können wir mit einer einfachen Konfiguration in Fluentd Daten filtern und übersichtliche Dashboards erstellen. Auf dem Bild unten – mein Heimrouter.

3. Zum Speicherplatz und den Logs. Im Durchschnitt belegen 1.000 Nachrichten pro Stunde etwa 2-3 MB pro Tag, was, gehören Sie zu, nicht viel ist. Elasticsearch Version 7.5.
ANSIBLE.AWX
Zu unserem Glück haben wir ein fertiges Modul für RouterOS.
Ich habe AWX erwähnt, aber die folgenden Befehle beziehen sich nur auf reines Ansible – ich denke, dass diejenigen, die mit Ansible gearbeitet haben, keine Probleme beim Zugriff über die GUI von AWX haben werden.
Ich gebe ehrlich zu, dass ich zuvor andere Anleitungen gesehen habe, bei denen SSH verwendet wurde, und alle hatten unterschiedliche Probleme mit der Reaktionszeit und noch viele andere Probleme. Ich wiederhole, es kam nicht zum Kampf , betrachten Sie diese Informationen als Experiment, das nicht über den Stand mit 20 Routern hinausgekommen ist.
Wir müssen ein Zertifikat oder ein Konto verwenden. Hier liegt die Entscheidung bei Ihnen, ich bevorzuge Zertifikate. Ein kleiner Punkt zu den Rechten. Ich gebe Schreibrechte – zumindest kann man "reset config" nicht durchführen.
Bei der Generierung, Kopie des Zertifikats und dem Import sollten keine Probleme auftreten:
Kurz und bündig die Auflistung der BefehleAuf Ihrem PC
ssh-keygen -t RSA, beantworten Sie die Fragen, speichern Sie den Schlüssel.
Kopieren auf Mikrotik:
user ssh-keys import public-key-file=id_mtx.pub user=ansible
Zuvor muss ein Konto erstellt und mit Rechten ausgestattet werden.
Überprüfen Sie die Verbindung über das Zertifikat
ssh -p 49475 -i /keys/mtx ansible@192.168.0.120
Wir tragen vi /etc/ansible/hosts ein
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
Und hier ist ein Beispiel für ein Playbook: — name: add_work_sites
hosts: testmt
serial: 1
connection: network_cli
remote_user: mikrotik.west
gather_facts: ja
tasks:
— name: add Work_sites
routeros_command:
commands:
— /ip firewall address-list add address=gov.ru list=work_sites comment=Ticket665436_Es ist dringend notwendig
— /ip firewall address-list add address=habr.com list=work_sites comment=für_habr
Wie aus der obigen Konfiguration ersichtlich, ist das Erstellen eigener Playbooks nicht schwierig. Man muss die CLI von MikroTik gut beherrschen. Stellen wir uns vor, dass auf allen Routern die Address-Listen mit bestimmten Daten entfernt werden sollen, dann:
Finden und löschen/ip firewal address-list remove [find where list=«gov.ru»]
Ich habe absichtlich nicht die gesamte Firewall-Listing hier eingefügt, da sie für jedes Projekt individuell sein wird. Aber eines kann ich mit Sicherheit sagen: Benutzen Sie nur die Address-Liste.
Zu GITLAB ist alles klar. Ich werde nicht weiter auf diesen Punkt eingehen. Alles ist schön in separaten Tasks, Templates, Handlers.
Powershell
Hier werden 3 Dateien sein. Warum PowerShell? Man kann jedes Tool zur Generierung von Konfigurationen wählen, je nach eigenem Komfort. In diesem Fall läuft auf allen PCs Windows, also warum Bash verwenden, wenn PowerShell einfacher ist? Je nach persönlichem Komfort.
Direkt 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 Entschuldigung, ich kann nicht alle Regeln auflisten, da es nicht ganz ansprechend wäre. Sie können die Regeln selbst erstellen, basierend auf bewährten Praktiken.
Hier ist beispielsweise eine Liste von Links, die ich verwendet habe::Sichern_Sie_Ihren_Router
:IP/Firewall/Filter
:OSPF-Beispiele
:Winbox
:Aktualisierung_RouterOS
:IP/Fasttrack – beachten Sie, dass beim Aktivieren von Fasttrack die Priorisierungs- und Traffic-Shaping-Regeln nicht funktionieren – nützlich für schwache Geräte.
Bezeichnung für Variablen:Als Beispiel werden die folgenden Netzwerke verwendet:
192.168.0.0/24 internes Netzwerk
172.22.4.0/24 VOIP Netzwerk
10.0.0.0/24 Netzwerk für Kunden ohne Zugriff auf das lokale Netzwerk
192.168.255.0/24 VPN-Netzwerk für große Filialen
172.19.255.0/24 VPN-Netzwerk für kleine Filialen
Die Netzwerkadresse besteht aus 4 Dezimalzahlen, wobei das Prinzip A.B.C.D verwendet wird. So funktioniert auch der Austausch: Wenn bei der Ausführung nach B gefragt wird, bedeutet das, dass für das Netzwerk 192.168.0.0/24 die Nummer 0 eingegeben werden muss, und für C = 0.
$EXTERNALIPADDRESS — dedizierte Adresse vom Anbieter.
$EXTERNALIPROUTE — Standardroute für das Netzwerk 0.0.0.0/0
$BWorknets — Arbeitsnetzwerk, in unserem Beispiel 168
$CWorknets — Arbeitsnetzwerk, in unserem Beispiel 0
$BVoipNets — VOIP-Netzwerk, in unserem Beispiel 22
$CVoipNets — VOIP-Netzwerk, in unserem Beispiel 4
$CClientss — Netzwerk für Kunden – nur Internetzugang, in unserem Fall 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 — Name des Routers
$ServerCertificate — Name des Zertifikats, das Sie zuvor importiert haben
$infile — Geben Sie den Pfad zur Datei an, von der wir die Konfiguration lesen, z.B. D:config.txt (am besten englischer Pfad ohne Anführungszeichen und Leerzeichen)
$outfile — den Pfad angeben, wo gespeichert werden soll, z. B. D:MT-test.txt
Ich habe die Adressen in den Beispielen aus offensichtlichen Gründen absichtlich geändert.
Ich habe den Punkt zur Erkennung von Angriffen und anormalem Verhalten ausgelassen – das verdient einen eigenen Artikel. Es ist jedoch erwähnenswert, dass in dieser Kategorie Monitoring-Daten von Zabbix und verarbeitete Curl-Daten von Elasticsearch verwendet werden können.
Auf welche Punkte sollte man achten:
- Netzwerkplan. Am besten gleich in lesbarer Form erstellen. Excel reicht vollkommen aus. Leider sehe ich sehr oft, dass Netzwerke nach dem Prinzip „Ein neuer Standort ist eröffnet, hier ist euer /24“ erstellt werden. Niemand fragt nach, wie viele Geräte an diesem Ort erwartet werden und ob ein zukünftiges Wachstum zu erwarten ist. Zum Beispiel wurde ein kleiner Laden eröffnet, in dem von Anfang an klar ist, dass nicht mehr als 10 Geräte benötigt werden. Warum also ein /24 zuweisen? Bei großen Standorten hingegen wird ein /24 zugewiesen, obwohl es 500 Geräte gibt – man könnte das Netzwerk einfach hinzufügen, aber es wäre schön, das von Anfang an zu planen.
- Filterrichtlinien. Wenn das Projekt die Trennung von Netzwerken und eine maximale Segmentierung vorsieht. Best Practices ändern sich mit der Zeit. Früher wurden das Netzwerk von PCs und das Netzwerk von Druckern getrennt, heute ist es durchaus akzeptabel, diese Netzwerke nicht zu splitten. Es ist ratsam, gesundes Urteilsvermögen zu nutzen und nicht an Orten, wo es nicht notwendig ist, eine Vielzahl von Subnetzen zu schaffen, oder alle Geräte in ein einziges Netzwerk zusammenzuschließen.
- Die „Goldstandardeinstellungen“ auf allen Routern. Das heißt, wenn Sie sich für einen Plan entschieden haben, sollten Sie alle Aspekte sofort berücksichtigen und versuchen, alle Einstellungen identisch zu gestalten — mit Ausnahme von verschiedenen Adresslisten und IP-Adressen. Bei auftretenden Problemen wird die Fehlersuche dann weniger Zeit in Anspruch nehmen.
- Organisatorische Aspekte sind ebenso wichtig wie technische. Oft handeln weniger engagierte Mitarbeiter nach den angegebenen Empfehlungen „manuell“ und nutzen keine vorgefertigten Konfigurationen und Skripte, was letztendlich zu Problemen aus dem Nichts führt.
Zur dynamischen Routenführung. OSPF mit zonaler Unterteilung wurde verwendet. Aber das ist doch eine Testumgebung; unter realen Bedingungen macht es mehr Spaß, solche Dinge einzurichten.
Ich hoffe, niemand ist enttäuscht, dass ich die Router-Konfigurationen nicht geteilt habe. Ich denke, die Links sollten ausreichend sein, und alles hängt von den Anforderungen ab. Und natürlich Tests – es müssen mehr Tests durchgeführt werden.
Ich wünsche allen, dass sie im neuen Jahr ihre Projekte umsetzen können. Möge access granted mit Ihnen sein!!!
Quelle: habr.com
