Mój niedokończony projekt. Sieć 200 routerów MikroTik

Mój niedokończony projekt. Sieć 200 routerów MikroTik

Cześć wszystkim. Ten artykuł jest przeznaczony dla tych, którzy mają w parku dużo urządzeń Mikrotik i chcą dokonać maksymalnej unifikacji, aby nie łączyć się z każdym urządzeniem z osobna. W tym artykule opiszę projekt, który niestety nie osiągnął warunków bojowych z powodu czynnika ludzkiego. W skrócie: ponad 200 routerów, szybka konfiguracja i szkolenie personelu, ujednolicenie według regionu, filtrowanie sieci i określonych hostów, możliwość łatwego dodawania reguł do wszystkich urządzeń, logowanie i kontrola dostępu.

To, co zostało opisane poniżej, nie pretenduje do miana gotowego przypadku, ale mam nadzieję, że przyda się Wam przy planowaniu sieci i minimalizowaniu błędów. Być może niektóre punkty i decyzje nie będą Ci się wydawać całkiem poprawne - jeśli tak, napisz w komentarzach. Krytyka w tym przypadku będzie doświadczeniem we wspólnej skarbonce. Dlatego czytelniku, spójrz w komentarze, być może autor popełnił rażący błąd - społeczność pomoże.

Liczba routerów to 200-300, rozsianych po różnych miastach o różnej jakości łącza internetowego. Trzeba wszystko upiększyć i w przystępny sposób wytłumaczyć lokalnym adminom jak to wszystko będzie działać.

Gdzie więc zaczyna się każdy projekt? Oczywiście z TK.

  1. Organizacja planu sieci dla wszystkich oddziałów zgodnie z wymaganiami klienta, segmentacja sieci (od 3 do 20 sieci w oddziałach, w zależności od ilości urządzeń).
  2. Skonfiguruj urządzenia w każdym oddziale. Sprawdzenie rzeczywistej przepustowości dostawcy w różnych warunkach pracy.
  3. Organizacja ochrony urządzeń, kontrola białej listy, automatyczne wykrywanie ataków z automatycznym umieszczaniem na czarnej liście na określony czas, minimalizacja użycia różnych środków technicznych wykorzystywanych do przechwytywania kontroli dostępu i odmowy usługi.
  4. Organizacja bezpiecznych połączeń VPN z filtrowaniem sieci zgodnie z wymaganiami klienta. Co najmniej 3 połączenia VPN z każdego oddziału do centrum.
  5. Bazując na punktach 1, 2. Wybierz najlepsze sposoby na zbudowanie odpornego na awarie vpn. Technologię routingu dynamicznego, z odpowiednim uzasadnieniem, może wybrać wykonawca.
  6. Organizacja priorytetyzacji ruchu według protokołów, portów, hostów i innych specyficznych usług, z których korzysta klient. (VOIP, hosty z ważnymi usługami)
  7. Organizacja monitorowania i rejestrowania zdarzeń routera w celu reagowania personelu wsparcia technicznego.

Jak rozumiemy, w niektórych przypadkach TOR jest kompilowany na podstawie wymagań. Te wymagania sformułowałem sam, po wysłuchaniu głównych problemów. Dopuścił możliwość podjęcia się realizacji tych punktów przez kogoś innego.

Jakie narzędzia zostaną użyte do spełnienia tych wymagań:

  1. stos ELK (po pewnym czasie zrozumiano, że zamiast logstash zostanie użyty fluentd).
  2. Ansibl. Aby ułatwić administrację i współdzielenie dostępu, użyjemy AWX.
  3. GITLAB. Tutaj nie ma potrzeby wyjaśniać. Gdzie bez kontroli wersji naszych konfiguracji.
  4. PowerShell. Będzie prosty skrypt do początkowej generacji konfiguracji.
  5. Doku wiki, do pisania dokumentacji i podręczników. W tym przypadku korzystamy z habr.com.
  6. Monitorowanie będzie odbywać się przez zabbix. Będzie też schemat połączeń dla ogólnego zrozumienia.

Punkty konfiguracji EFK

W pierwszym punkcie opiszę tylko ideologię, na której zostaną zbudowane indeksy. Jest wiele
doskonałe artykuły na temat konfigurowania i odbierania logów z urządzeń z mikrotikiem.

Zatrzymam się na niektórych punktach:

1. Zgodnie ze schematem warto rozważyć przyjmowanie logów z różnych miejsc iz różnych portów. W tym celu użyjemy agregatora logów. Chcemy też zrobić uniwersalną grafikę dla wszystkich routerów z możliwością współdzielenia dostępu. Następnie budujemy indeksy w następujący sposób:

tutaj jest fragment konfiguracji z fluentd elastyczne wyszukiwanie
logstash_format prawda
nazwa_indeksu mikrotiklogs.north
logstash_prefix mikrotiklogs.north
interwał_płukania 10 s
gospodarze wyszukiwanie elastyczne: 9200
Port 9200

W ten sposób możemy łączyć routery i segmentować według planu - mikrotiklogs.west, mikrotiklogs.south, mikrotiklogs.east. Po co to tak utrudniać? Rozumiemy, że będziemy mieć 200 lub więcej urządzeń. Nie podążaj za wszystkim. Od wersji 6.8 elasticsearch ustawienia bezpieczeństwa są dla nas dostępne (bez kupowania licencji), dzięki czemu możemy rozdzielać prawa do przeglądania między pracowników pomocy technicznej lub lokalnych administratorów systemu.
Tabele, wykresy - tutaj wystarczy się zgodzić - albo użyj tych samych, albo każdy zrobi tak, jak będzie mu wygodnie.

2. Logując się. Jeśli włączymy logowanie w regułach zapory sieciowej, wówczas nazwy robimy bez spacji. Widać, że za pomocą prostej konfiguracji we fluentd możemy filtrować dane i tworzyć wygodne panele. Poniższe zdjęcie przedstawia mój domowy router.

Mój niedokończony projekt. Sieć 200 routerów MikroTik

3. Zgodnie z zajętą ​​przestrzenią i dziennikami. Średnio przy 1000 wiadomości na godzinę logi zajmują 2-3 MB dziennie, co, jak widzisz, nie jest tak dużo. wersja elastycznego wyszukiwania 7.5.

ANSIBLE.AWX

Na szczęście dla nas mamy gotowy moduł do routerów
Wspomniałem o AWX, ale poniższe polecenia dotyczą tylko ansible w najczystszej postaci - myślę, że ci, którzy pracowali z ansiblem, nie będą mieli problemów z używaniem awx przez GUI.

Szczerze mówiąc, wcześniej przeglądałem inne przewodniki, w których używano ssh, i każdy miał inne problemy z czasem odpowiedzi i wieloma innymi problemami. Powtarzam, nie trafił do bitwy , potraktuj tę informację jako eksperyment, który nie wyszedł poza stanowisko 20 routerów.

Musimy użyć certyfikatu lub konta. Decyzja należy do Ciebie, ja jestem za certyfikatami. Jakiś subtelny punkt dotyczący praw. Daję prawo do pisania - przynajmniej „resetowanie konfiguracji” nie zadziała.

Nie powinno być problemów z wygenerowaniem, skopiowaniem certyfikatu i zaimportowaniem:

Krótka lista poleceńNa twoim komputerze
ssh-keygen -t RSA, odpowiedz na pytania, zapisz klucz.
Skopiuj do mikrotika:
użytkownik ssh-keys import public-key-file=id_mtx.pub user=ansible
Najpierw musisz utworzyć konto i nadać mu uprawnienia.
Sprawdzanie połączenia z certyfikatem
ssh -p 49475 -i /klucze/mtx [email chroniony]

Napisz vi /etc/ansible/hosts
MT01 ansible_network_os=routery ansible_ssh_port=49475 ansible_ssh_user= ansible
MT02 ansible_network_os=routery ansible_ssh_port=49475 ansible_ssh_user= ansible
MT03 ansible_network_os=routery ansible_ssh_port=49475 ansible_ssh_user= ansible
MT04 ansible_network_os=routery ansible_ssh_port=49475 ansible_ssh_user= ansible

Cóż, przykład podręcznika: nazwa: add_work_sites
hosty: testmt
numer seryjny: 1
połączenie: sieć_cli
zdalny_użytkownik: mikrotik.west
zebrać_fakty: tak
zadania:
nazwa: dodaj Work_sites
routeros_polecenie:
polecenia:
- /ip firewall adres-list add address=gov.ru list=work_sites comment=Ticket665436_Ochen_nado
- /ip firewall adres-list add address=habr.com list=work_sites comment=for_habr

Jak widać z powyższej konfiguracji, kompilacja własnych podręczników to prosta sprawa. Wystarczy opanować cli mikrotik. Wyobraź sobie sytuację, w której musisz usunąć listę adresową z określonymi danymi na wszystkich routerach, a następnie:

Znajdź i usuń/ip firewall adres-list usuń [znajdź gdzie list="gov.ru"]

Celowo nie umieściłem tutaj całej listy zapory. będzie indywidualny dla każdego projektu. Ale jedno mogę powiedzieć na pewno, używaj tylko listy adresów.

Według GITLAB wszystko jest jasne. Nie będę się rozwodzić nad tą chwilą. Wszystko jest piękne pod względem poszczególnych zadań, szablonów, handlerów.

PowerShell

Będą 3 pliki. Dlaczego powershell? Narzędzie do generowania konfiguracji może wybrać każdy, komu wygodniej. W tym przypadku każdy ma system Windows na swoim komputerze, więc po co robić to na bash, skoro powershell jest wygodniejszy. Komu wygodniej.

Sam skrypt (prosty i zrozumiały):[cmdletBinding()] Parametr(
[Parametr(Obowiązkowy=$true)] [string]$EXTERNALIPADDRESS,
[Parametr(Obowiązkowy=$true)] [ciąg znaków]$EXTERNALIPROUTE,
[Parametr(Obowiązkowe=$true)] [string]$BWorknets,
[Parametr(Obowiązkowe=$true)] [string]$CWorknets,
[Parametr(Obowiązkowe=$true)] [string]$BVoipNets,
[Parametr(Obowiązkowe=$true)] [string]$CVoipNets,
[Parametr(Obowiązkowe=$true)] [string]$CClientss,
[Parametr(obowiązkowe=$true)] [string]$BVPNWORKs,
[Parametr(obowiązkowe=$true)] [string]$CVPNWORKs,
[Parametr(obowiązkowe=$true)] [string]$BVPNCLIENTSs,
[Parametr(Obowiązkowy=$true)] [string]$cVPNCLIENTSs,
[Parametr(Obowiązkowy=$true)] [string]$NAMEROUTER,
[Parameter(Mandatory=$true)] [string]$ServerCertyfikaty,
[Parametr(obowiązkowe=$true)] [string]$w pliku,
[Parametr(obowiązkowe=$true)] [string]$plik wyjściowy
)

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("CClienty", $CClientss)} |
Obiekt Foreach {$_.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

Przepraszam, nie mogę wyłożyć wszystkich zasad. nie będzie ładnie. Zasady możesz wymyślić sam, kierując się najlepszymi praktykami.

Na przykład oto lista linków, którymi się kierowałem:wiki.mikrotik.com/wiki/Manual:Zabezpieczanie_Twojego_Routera
wiki.mikrotik.com/wiki/Manual:IP/Zapora sieciowa/Filtr
wiki.mikrotik.com/wiki/Manual:przykłady OSPF
wiki.mikrotik.com/wiki/Drop_port_scanners
wiki.mikrotik.com/wiki/Manual:Winbox
wiki.mikrotik.com/wiki/Manual:Aktualizacja_RouterOS
wiki.mikrotik.com/wiki/Manual:IP/Fasttrack - tutaj musisz wiedzieć, że przy włączonym fasttracku priorytetyzacja ruchu i reguły kształtowania nie będą działać - przydatne dla słabych urządzeń.

Konwencje zmiennych:Jako przykład podano następujące sieci:
Działająca sieć 192.168.0.0/24
Sieć VOIP 172.22.4.0/24
Sieć 10.0.0.0/24 dla klientów bez dostępu do sieci LAN
Sieć VPN 192.168.255.0/24 dla dużych oddziałów
Sieć VPN 172.19.255.0/24 dla małych

Adres sieciowy składa się z 4 cyfr dziesiętnych odpowiednio ABCD, zamiana działa na tej samej zasadzie, jeśli przy starcie pyta B, to trzeba wpisać cyfrę 192.168.0.0 dla sieci 24/0, a dla C=0 .
$EXTERNALIPADDRESS - przydzielony adres od dostawcy.
$EXTERNALIPROUTE - domyślna trasa do sieci 0.0.0.0/0
$BWorknets - Działająca sieć, w naszym przykładzie będzie ich 168
$CWorknets - Sieć robocza, w naszym przykładzie będzie to 0
$BVoipNets - Sieć VOIP w naszym przykładzie tutaj 22
$CVoipNets - sieć VOIP w naszym przykładzie tutaj 4
$CClientss - Sieć dla klientów - dostęp tylko do internetu, w naszym przypadku tutaj 0
$BVPNWORKs - sieć VPN dla dużych oddziałów, w naszym przykładzie 20
$CVPNWORKs - sieć VPN dla dużych oddziałów, w naszym przykładzie 255
$BVPNCLIENTS - Sieć VPN dla małych oddziałów, czyli 19
$CVPNCLIENTS - sieć VPN dla małych oddziałów, czyli 255
$NAMEROUTER - nazwa routera
$ServerCertificate — nazwa certyfikatu, który importujesz jako pierwszy
$infile - Podaj ścieżkę do pliku, z którego odczytamy konfigurację, np. D:config.txt (lepsza angielska ścieżka bez cudzysłowów i spacji)
$outfile - określ ścieżkę do zapisu, na przykład D:MT-test.txt

Celowo zmieniłem adresy w przykładach z oczywistych powodów.

Pominąłem punkt dotyczący wykrywania ataków i nietypowych zachowań - to zasługuje na osobny artykuł. Warto jednak zaznaczyć, że w tej kategorii można skorzystać z monitoringu wartości danych z Zabbix + wypracowane dane curl z elasticsearch.

Na jakich punktach należy się skupić:

  1. Plan sieciowy. Lepiej napisać to w czytelnej formie. Excel wystarczy. Niestety często spotykam się z tym, że sieci są kompilowane zgodnie z zasadą „Pojawiła się nowa gałąź, oto /24 dla Ciebie”. Nikt nie dowiaduje się, ile urządzeń ma być w danej lokalizacji i czy nastąpi dalszy wzrost. Na przykład otworzył się mały sklep, w którym początkowo jest jasne, że urządzenie będzie miało nie więcej niż 10, po co przydzielać / 24? W przypadku dużych oddziałów wręcz przeciwnie, przydzielają / 24, a urządzeń jest 500 - możesz po prostu dodać sieć, ale chcesz od razu wszystko przemyśleć.
  2. Zasady filtrowania. Jeśli projekt zakłada, że ​​nastąpi separacja sieci i maksymalna segmentacja. Najlepsze praktyki zmieniają się z czasem. Wcześniej współdzielili sieć komputerów i sieć drukarek, teraz całkiem normalne jest nieudostępnianie tych sieci. Warto kierować się zdrowym rozsądkiem i nie tworzyć wielu podsieci tam, gdzie nie są one potrzebne oraz nie łączyć wszystkich urządzeń w jedną sieć.
  3. „Złote” ustawienia na wszystkich routerach. Te. jeśli masz plan. Warto wszystko od razu przewidzieć i postarać się, aby wszystkie ustawienia były identyczne - różnią się tylko listą adresów i adresami ip. W przypadku problemów czas na debugowanie będzie krótszy.
  4. Aspekty organizacyjne są nie mniej ważne niż techniczne. Często leniwi pracownicy stosują się do tych zaleceń „ręcznie”, bez korzystania z gotowych konfiguracji i skryptów, co ostatecznie prowadzi do problemów od zera.

Poprzez routing dynamiczny. Zastosowano protokół OSPF z podziałem na strefy. Ale to jest stanowisko testowe, w warunkach bojowych takie rzeczy są ciekawsze do ustawienia.

Mam nadzieję, że nikt się nie obraził, że nie wrzuciłem konfiguracji routerów. Myślę, że linki wystarczą, a potem wszystko zależy od wymagań. I oczywiście testy, potrzeba więcej testów.

Życzę wszystkim realizacji swoich projektów w nowym roku. Niech udzielony dostęp będzie z Wami!!!

Źródło: www.habr.com

Dodaj komentarz