Az én meg nem valósult projektem. 200 MikroTik routerből álló hálózat

Az én meg nem valósult projektem. 200 MikroTik routerből álló hálózat

Üdvözlet mindenkinek. Ez a cikk azoknak szól, akik sok MikroTik eszközzel rendelkeznek, és szeretnék maximalizálni a standardizálást, hogy ne kelljen minden egyes eszközhöz külön-külön csatlakozniuk. Ebben a cikkben bemutatom azt a projektet, amely sajnos nem jutott el a gyakorlati megvalósításig az emberi tényezők miatt. Röviden: több mint 200 router, gyors beállítás és a személyzet képzése, standardizálás régiók szerint, hálózatok és meghatározott hosztok szűrése, a szabályok könnyű hozzáadásának lehetősége minden eszközre, naplózás és hozzáférés-ellenőrzés.

A lent leírtak nem igényelnek kész megoldást, de remélhetőleg hasznosak lesznek a hálózataik tervezésében és a hibák minimalizálásában. Lehetséges, hogy egyes pontok vagy megoldások nem tűnnek helyesnek – ha így van, kérlek, írj a megjegyzések között. A kritika ebben az esetben tapasztalat a közös tudásba. Ezért, kedves olvasó, nézd meg a megjegyzéseket, lehet, hogy a szerző súlyos hibát követett el – a közösség segíteni fog.

A routerek száma 200-300, különböző városokban helyezkednek el, eltérő internetkapcsolati minőséggel. Mindennek szépen és érthetően kell megvalósulnia, hogy a helyi adminisztrátorok számára világosan elmagyarázzuk, hogyan fog működni.

Tehát, mivel kezdődik bármilyen projekt. Természetesen a Műszaki feladat.

  1. A hálózati terv megszervezése a fiókok között a megrendelő követelményei szerint, hálózatok szegmentálása (3 és 20 hálózat között a fiókokban a berendezések számától függően).
  2. Az eszközök beállítása minden fiókban. A valós átviteli sebesség ellenőrzése a szolgáltatóval különböző működési körülmények között.
  3. Az eszközök védelmének megszervezése, fehérlistás kezelés, támadások automatikus észlelése és automatikus felvétel a fekete listára meghatározott időtartamra, a különböző technikai eszközök minimalizálása, amelyek a vezérlési hozzáférés elfogására és karbantartás megszüntetésére használatosak.
  4. Biztosított VPN-kapcsolatok szervezése a hálózatok szűrésével a megrendelő követelményei szerint. Minimum 3 VPN-kapcsolat minden fiókból a központig.
  5. Az 1. és 2. pont alapján. Az optimális megoldások kiválasztása a hibatűrő VPN-ek kialakításához. A dinamikus útválasztási technológiát helyes indoklással választhatja meg a végrehajtó.
  6. A forgalom priorizálásának megszervezése protokollok, portok, hosztok és egyéb ügyfél által használt specifikus szolgáltatások alapján (VOIP, fontos szolgáltatásokkal rendelkező hosztok).
  7. A routerek eseményeinek monitorozásának és naplózásának megszervezése a műszaki támogató személyzet reagálására.

Ahogy értjük, bizonyos esetekben a műszaki specifikáció a követelményekből származik. Ezeket a követelményeket önállóan fogalmaztam meg, meghallgatva a fő problémákat. Lehetőségként feltételeztem, hogy ezek a feladatok mások által is elvégezhetők.

Milyen eszközöket fogunk használni a követelmények teljesítéséhez:

  1. ELK stack (egy idő után rájöttem, hogy a logstash helyett fluentd-t fogunk használni).
  2. Ansible. Az adminisztráció megkönnyítése és a hozzáférés elkülönítése érdekében AWX-et fogunk használni.
  3. GITLAB. Ezt nem szükséges magyarázni. Hol lenne a változáskezelés a konfigurációink nélkül.
  4. PowerShell. Lesz egy egyszerű szkript az első konfiguráció generálására.
  5. Dokumentáció írására és kézikönyvek létrehozására használt Doku wiki. Ebben az esetben a habr.com-ot használjuk.
  6. A monitorozás a zabbix segítségével fog történni. Ott készítjük el a kapcsolódási sémát a közös megértés érdekében.

EFK beállítási momentuma.

Az első pontról csak az indexek felépítésének ideológiáját írom le. Sok igazán
kiváló cikk van a mikrotik kezelő rendszerrel rendelkező eszközök naplózásának beállításáról és fogadásáról.

Néhány pontra kitérnék:

1. A séma szerint érdemes átgondolni a naplók fogadását különböző helyekről és különböző portokon. Ehhez napló aggregátort fogunk használni. Ezenkívül szeretnénk univerzális grafikonokat készíteni minden router számára a hozzáférés megosztásának lehetőségével. Akkor az indexeket a következőképpen építjük fel:

itt van egy részlet a fluentd konfigurációból type elasticsearch
logstash_format true
index_name mikrotiklogs.north
logstash_prefix mikrotiklogs.north
flush_interval 10s
hosts elasticsearch:9200
port 9200

Ily módon kombinálhatjuk a routereket és szegmentálhatjuk a terv szerint - mikrotiklogs.west, mikrotiklogs.south, mikrotiklogs.east. Miért bonyolítanánk ezt? Megértjük, hogy több mint 200 eszközünk lesz. Mindezt nehéz követni. Az elasticsearch 6.8-as verziójától elérhetők a biztonsági beállítások (licenc vásárlása nélkül), így jogokat oszthatunk meg a műszaki támogatás munkatársai vagy a helyi rendszergazdák között.
Táblázatok, grafikonok - itt már egyszerűen meg kell állapodni - vagy egységesen használjuk, vagy mindenki azt csinál, ami neki kényelmes.

2. A naplózásról. Ha a tűzfal szabályaiban bekapcsoljuk a naplózást, akkor a neveket szóközök nélkül kell megadni. Szembetűnő, hogy egy egyszerű fluentd konfigurációval szűrhetjük az adatokat és kényelmes paneleket készíthetünk. Az alábbi képen - az én otthoni routerem.

Az én meg nem valósult projektem. 200 MikroTik routerből álló hálózat

3. A hely és a naplók kapcsán. Átlagosan, óránként 1000 üzenet mellett, a naplók napi 2-3 MB-ot foglalnak el, ami nem túl sok. Elasticsearch verzió: 7.5.

ANSIBLE.AWX

A szerencsénkre van готовый модуль для routeros
Megemlítettem az AWX-et, de az alábbi parancsok csak tiszta ansible-re vonatkoznak - úgy gondolom, akik dolgoztak az ansible-lal, nem fognak problémába ütközni az awx GUI használatával.

Őszintén bevallom, hogy korábban más útmutatókat néztem, ahol ssh-t használtak, és mindenkinek különböző problémái voltak a válaszidővel és egyéb problémákkal. Ismétlem, nem jutottam el a harcig, ezt az információt kísérletként kell felfogni, ami nem haladt tovább a 20 routerből álló standnál.

Használni kell a tanúsítványt vagy a fiókot. Itt önnek kell dönteni, én a tanúsítványok mellett állok. Van egy apró részlet a jogosultságokkal kapcsolatosan. Adok write jogot - legalább a "reset config"-ot nem lehet végrehajtani.

A tanúsítvány generálása, másolása és importálása során nem kellene problémáknak felmerülniük:

Röviden a parancsok listájaAz Ön számítógépén
ssh-keygen -t RSA, válaszoljunk a kérdésekre, mentjük a kulcsot.
Másolás a mikrotik-re:
felhasználó ssh-keys import public-key-file=id_mtx.pub felhasználó=ansible
Először létre kell hozni egy felhasználói fiókot és neki jogokat adni.
Ellenőrizzük a kapcsolatot tanúsítvány alapján
ssh -p 49475 -i /keys/mtx ansible@192.168.0.120

Megnyitjuk 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

És itt egy példa 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

Ahogy a fenti konfigurációból látható, saját playbookot készíteni nem bonyolult dolog. Elegendő jól elsajátítani a mikrotik CLI-t. Tegyük fel a helyzetet, amikor az összes routeren el kell távolítani az address list-t a megadott adatokkal, akkor:

Megkeresni és törölni/ip firewal address-list remove [find where list=«gov.ru»]

Szándékosan nem tettem ide be az összes tűzfal beállítást, mivel ezek minden projektre egyediek. De egy biztos: csak címjegyzékeket használjatok.

A GITLAB minden világos. Nem fogok ezen a ponton megállni. Minden szép külön feladatokban, sablonokban, kezelőkben.

Powershell

Itt három fájl lesz. Miért powershell? Bármilyen eszköz választható a konfigurációk generálásához, akinek mi kényelmes. Jelen esetben mindenkinek Windows van a PC-jén, tehát miért csináljunk bash-ben, amikor kényelmesebb a powershell. Akinek mi kényelmes.

Magának a skriptnak a törzse (egyszerű és érthető):[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

Kérem, bocsássanak meg, nem tudom megosztani az összes szabályt, mert ez nem lenne túl szép. A szabályokat ti is megalkothatjátok a legjobb gyakorlatok alapján.

Például itt van egy hivatkozások listája, amelyet én is követtem:wiki.mikrotik.com/wiki/Manual:Securing_Your_Router
wiki.mikrotik.com/wiki/Manual:IP/Firewall/Filter
wiki.mikrotik.com/wiki/Manual:OSPF-examples
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 — itt azt kell tudni, hogy a fasttrack bekapcsolásakor nem fognak működni a prioritási és sávszélesség-szabályok – hasznos gyenge eszközök számára.

A változók jelölése:A következő hálózatok szolgáltatják a példát:
192.168.0.0/24 munkahálózat
172.22.4.0/24 VOIP hálózat
10.0.0.0/24 a hálózat, amely nem fér hozzá a helyi hálózathoz
192.168.255.0/24 VPN hálózat nagy irodák számára
172.19.255.0/24 VPN hálózat kisebbek számára

A hálózat címe 4 tízes számjegyből áll, nevezetesen A.B.C.D formátumban, hasonló elven működik a csere; ha indításkor B-t kér, akkor a 192.168.0.0/24 hálózat esetében 0-t kell megadni, C-hez pedig = 0.
$EXTERNALIPADDRESS — a szolgáltatótól kapott dedikált cím.
$EXTERNALIPROUTE — az alapértelmezett útvonal a 0.0.0.0/0 hálózatra.
$BWorknets — Munkahálózat, amint ebben a példában lesz 168.
$CWorknets — Munkahálózat, amint ebben a példában lesz 0.
$BVoipNets — VOIP hálózat a példánkban itt 22
$CVoipNets — VOIP hálózat a példánkban itt 4
$CClientss — Ügyfélnetwork – kizárólag internet hozzáféréssel, a mi esetünkben itt 0
$BVPNWORKs — VPN hálózat nagyobb fiókok számára, a példánkban 20
$CVPNWORKs — VPN hálózat nagyobb fiókok számára, a példánkban 255
$BVPNCLIENTS — VPN hálózat kisebb fiókok számára, ami 19
$CVPNCLIENTS — VPN hálózat kisebb fiókok számára, ami 255
$NAMEROUTER — a router neve
$ServerCertificate — a tanúsítvány neve, amelyet előzetesen importálni kell
$infile — A fájl elérési útvonalát kell megadni, amelyből az konfigurációt olvassuk, például D:config.txt (jobb az angol útvonal idézőjelek és szóközök nélkül)
$outfile — meg kell adni az elérési utat, ahol menteni kell, például D:MT-test.txt

Szándékosan megváltoztattam a címeket a példákban érthető okokból.

Kihagytam a támadások és anomális viselkedés észlelését – ez egy külön cikket érdemel. De meg kell említeni, hogy ezen a területen használhatók a Zabbixból származó monitorozási adatok értékei + a curl-lel készített adatok az elasticsearch-mal.

Mire érdemes figyelmet fordítani:

  1. Hálózati terv. Jobb azonnal olvasható formában elkészíteni. Teljesen elegendő az excel. Sajnos, nagyon gyakran látom, hogy a hálózatokat a következő elv alapján készítik: "Megjelent egy új fiók, itt van nektek /24". Senki sem deríti ki, hány eszköz várható ezen a helyen, és lesz-e további növekedés. Például, ha egy kis bolt nyílik, amelynek eleve világos, hogy nem lesz több mint 10 eszköz, miért osztanánk ki a /24-et? A nagyobb fiókok esetében – éppen ellenkezőleg, /24-et osztanak ki, miközben az eszközök száma 500 – egyszerűen hozzá lehet adni a hálózatot, de szeretnénk mindent előre megtervezni.
  2. Szűrési szabályok. Ha a projekt előirányozza, hogy a hálózatokat szét kell választani és maximális szegmensezés szükséges. A legjobb gyakorlatok idővel változnak. Korábban külön hálózatot osztottak a számítógépek és a nyomtatók között, manapság teljesen normális, ha nem osztják ezeket a hálózatokat. Érdemes az egészséges észszel haladni, és nem kell sok alhálózatot létrehozni, ahol nincs szükség, és nem szabad egy hálózatba tömöríteni az összes eszközt.
  3. A "zöld" beállítások minden routeren. Tehát ha eldöntötted a tervet. Érdemes mindent azonnal figyelembe venni és igyekezni úgy beállítani, hogy minden beállítás azonos legyen - csak eltérő címjegyzék és IP címek legyenek. Problémák esetén az elhárítási idő rövidebb lesz.
  4. A szervezési kérdések legalább olyan fontosak, mint a technikai szempontok. Gyakran a lustább munkavállalók a megadott ajánlásokat "kézzel" valósítják meg, nem használva a kész konfigurációkat és szkripteket, ami végül problémahelyzetekhez vezet.

Dynamikus irányítási módszerrel. OSPF-t használtak zónális felosztással. De ez egy tesztkörnyezet, harci körülmények között sokkal izgalmasabb ilyen dolgokat beállítani.

Remélem, senki sem szomorkodik, amiért nem osztottam meg a routerek konfigurációit. Azt gondolom, hogy elegendőek a linkek, és innentől a követelményektől függ minden. És persze a tesztek, több tesztre van szükség.

Kívánok mindenkinek, hogy az új évben valósítsák meg projektjeiket. Legyen veletek az access granted!!!

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster