Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book
Wstęp do firewalla w MikroTik RouterOS
Zakres działania firewalla
Najbardziej ogólnie można powiedzieć, że firewall w systemie MikroTik RouterOS, to świadome stanu połączeń narzędzie do filtrowania i modyfikacji pakietów.
Główne domeny pracy firewalla to 3 i 4 warstwa sieciowa modelu ISO/OSI. Na warstwie 2 mamy możliwość analizy jedynie źródłowego adresu MAC i priorytetu w nagłówku VLAN, natomiast zaawansowane funkcje poniżej warstwy 3 dostępne są poprzez inne mechanizmy: reguły filtrowania dla mostka (/interface bridge filter) oraz funkcje przełącznika w modelach CRS (/interface ethernet switch).
Firewall pozwala także na filtrację pakietów w warstwie aplikacji poprzez wyszukiwanie wzorców w strumieniach protokołów ICMP/TCP/UDP (funkcja layer7‑protocol). Wzorce do filtrowania stosowane przez RouterOS są kompatybilne z projektem l7‑filter. Szczegółowe informacje o filtrowaniu L7 czytelnik znajdzie w MikroTikowym Wiki, my zaś w dalszej części tekstu skupimy się na warstwach 3 i 4.
System RouterOS obsługuje dwa protokoły warstwy 3: IPv4 oraz IPv6. Firewall IPv6 jest dostępny po włączeniu paczki ipv6 (w /system package). Możliwości firewalla dla IPv6 są (stan dla wersji v6.27) znacznie uboższe niż dla IPv4. Reguły dla IPv4 i IPv6 ustawiamy w osobnych gałęziach konfiguracji (/ip firewall oraz /ipv6 firewall), o czym warto pamiętać. Przykładowo, ograniczenia dostępu do naszego routera (np. blokada dostępu do usług SSH, WinBox, WWW z interfejsu WAN) ustawione w /ip firewall filter w żaden sposób nie ograniczają dostępu do tych samych usług poprzez protokół IPv6. Dobrą praktyką jest pozostawienie paczki ipv6 wyłączonej, jeśli nie używamy IPv6 w naszej sieci.
W dalszej części tekstu, skupiamy się na firewallu IPv4.
Podział funkcjonalny
Firewall jest podzielony na trzy moduły (Filter, Mangle, NAT), które charakteryzują się możliwymi do podjęcia akcjami, co wyznacza różne ich zastosowania:
- Filter – reguły Firewall Filter pełnią zwykle funkcje bezpieczeństwa, blokując lub zezwalając na określony ruch. Moduł ten pełni funkcję analogiczną do reguł ACL (Access Control List) spotykanych u wielu innych producentów.
- NAT (Network Address Translation) – mechanizm translacji adresów polega na podmianie w nagłówku IP adresu źródłowego (SRC-NAT) lub docelowego (DST-NAT) oraz, opcjonalnie, podmianie numerów portów w nagłówku TCP lub UDP. Typowe zastosowanie SRC-NAT to udostępnienie Internetu dla urządzeń w sieci lokalnej z prywatną adresacją poprzez jeden wspólny, publiczny adres IP. DST-NAT używamy do przekierowań połączeń przychodzących z Internetu do określonego hosta w sieci lokalnej.
- Mangle – narzędzie do bardziej zaawansowanych operacji nad pakietami (np. modyfikacja pól TTL, DF, DSCP, TCP MSS) oraz umożliwiające ustawianie wewnętrznych (widocznych jedynie w obrębie routera) znaczników dla pakietów. Do dyspozycji są trzy rodzaje znaczników: packet mark, connection mark, routing mark. Operacja dodawania znacznika nazywana jest potocznie markowaniem.
Przetwarzanie pakietów w RouterOS, oprócz wyżej wspomnianego podziału na moduły, dalej dzieli się na łańcuchy (chains). Określają one, jakiego rodzaju ruchu i na którym etapie przetwarzania może dotyczyć reguła. Mamy możliwość definiowania własnych łańcuchów i kierowania do nich pakietów. Każdy z modułów operuje własnymi łańcuchami, więc nasz własny łańcuch może być użyty jedynie w obrębie danego modułu. Przepływ pakietów pomiędzy łańcuchami predefiniowanymi (jak Filter Input, Mangle Input itp.) następuje w ustalony sposób, przedstawiony na diagramach Packet Flow.
Przykładowo, reguła filtrująca pakiety z określonym źródłowym adresem IP będzie skuteczna bądź nie w zależności od tego, czy została zaaplikowana przed czy po SRC-NAT.
Connection tracking
Zastanówmy się przez chwilę, co to właściwie oznacza, że firewall w systemie RouterOS jest świadomy stanu połączeń.
Zacznijmy od drugiej strony: do znacznej części funkcji firewalla, ta świadomość nie jest potrzebna. Decyzja wtedy jest podejmowana na podstawie analizy zawartości pojedynczego pakietu lub, ewentualnie, na podstawie zagregowanych danych strumienia pakietów (np. ilość pakietów na sekundę). Przykładowo, aby zablokować pakiety przychodzące z danego adresu IP (lub danego protokołu, portu itp.) firewall nie potrzebuje innych informacji niż te zawarte w nagłówku konkretnego pakietu, co do którego ma podjąć decyzję o odrzuceniu. W szczególności, nie potrzebuje informacji o pakietach wcześniej przesyłanych przez danego hosta (daną usługą).
Mamy jednak także funkcje, do których realizacji taka wiedza jest już niezbędna.
Wyraźne przykłady to przeciążony NAT, SPI (Stateful Packet Inspection) czy wspomniany wcześniej layer7-protocol.
Przeciążony NAT jest typowym przypadkiem użycia SRC-NAT, kiedy różne adresy komputerów w sieci lokalnej przy wyjściu do Internetu są zastępowane jednym adresem publicznym. Świadomość istniejących połączeń (i informacje o dokonanej translacji) są tutaj konieczne, aby router mógł dostarczyć pakiety przychodzące z Internetu (w ramach nawiązanych połączeń) do właściwych hostów w sieci lokalnej. SPI pozawala na podejmowanie decyzji o pakiecie na podstawie tego, czy dany pakiet należy do ustanowionego wcześniej połączenia.
Przykładowo, pozwala to w łatwy sposób zabezpieczyć router, blokując wszelkie próby uzyskania dostępu do niego (nowe połączenia), pozwalając jednocześnie routerowi na dostęp do usług jak NTP, DNS itp. (ruch powracający jest klasyfikowany jako zestawione połączenia).
Funkcja layer7‑protocol wymaga śledzenia połączeń, ponieważ pojedyncza wiadomość warstwy aplikacji, w przypadku ogólnym, zapisana jest w wielu pakietach IP. Aby złożyć wiadomość z wielu pakietów, niezbędna jest wiedza, które pakiety należą do jednego połączenia.
Jeżeli nie używamy żadnej z funkcji, która wymaga śledzenia połączeń, zalecane jest wyłączenie tej funkcji, co istotnie obniży obciążenie procesora.
Konfigurację czasów timeout dla śledzenia połączeń w RouterOS konfigurujemy w gałęzi /ip firewall connection tracking. Podgląd aktywnych połączeń dostępny jest poleceniem:
[admin@MikroTik] > ip firewall connection print
Ponieważ zwykle lista połączeń jest dość długa, przydatne może być odfiltrowanie tylko interesujących nas połączeń, np.:
[admin@MikroTik] > ip firewall connection print where dst-address="213.180.141.140:80"
Address Lists
Na koniec omówimy listy adresów. Ta funkcja pozwala grupować adresy IP w listy. Czyni to konfigurację bardziej czytelną, optymalizuje wykorzystanie procesora, a także pozwala na realizację zaawansowanych konfiguracji dzięki możliwości dynamicznego dodawania adresów do list.
Tak zdefiniowane listy mogą być używane w wielu miejscach systemu RouterOS, w szczególności w każdym z trzech modułów firewalla. Zamiast dodawać wiele analogicznych reguł dla grupy adresów IP, możemy dodać pojedynczą regułę dla określonej listy.
Listy adresów ustawiamy w drzewie konfiguracji /ip firewall address-list. Dodając wpis, należy podać nazwę listy oraz adres (akceptowane są także sieci np. 192.168.0.0/24 oraz przedziały np. 10.0.0.3-10.0.0.7). Opcjonalnie możemy dodać timeout, czyli czas, po którym wpis wygaśnie i automatycznie zostanie skasowany z listy. Poniżej przykład tworzący listę „test” obejmującą kilka grup adresów.
[admin@MikroTik] > ip firewall address-list add list=test address=10.0.0.0/24 comment="przykladowa siec" [admin@MikroTik] > ip firewall address-list add list=test address=10.0.1.5 comment="przykladowy ip" [admin@MikroTik] > ip firewall address-list add list=test address=10.0.1.200-10.0.1.230 comment="przykladowy zakres ip"
Listy wyświetlamy standardowo, poleceniem print:
[admin@MikroTik] > ip firewall address-list print
Flags: X - disabled, D - dynamic # LIST ADDRESS TIMEOUT 0 ;;; przykladowa siec test 10.0.0.0/24 1 ;;; przykladowy ip test 10.0.1.5 2 ;;; przykladowy zakres ip test 10.0.1.200-10.0.1.230
—Bartłomiej Dabiński
Bardzo dobry początek, czekamy na ciąg dalszy
Kolejne dwie części gotowe, tylko potrzeba czasu żebyśmy to ogarnęli pod względem formatowania w WP :) Niebawem więc będą.
o super, to ja również czekam na następne części :)
Damn, go0d work. Mikrotik był zawsze szpilką w pupie jeżeli chodzi o „łatwą” konfigurację.
Na poziomie L2 jest zupełnie osobny filtr i NAT – „/interface bridge filter” oraz „/interface bridge nat”. Takiego zestawu klasyfikatorów jak tam jest, zwłaszcza dotyczącego Spanning Tree, próżno szukać w firewallu IP :)
Ciekawi mnie czy markowanie pakietów i pasmowanie łącza działa tak samo sprawnie jak z użyciem HTB i L7 na linuksowym routerze. Wieki temu walczyłem z tym na MikroTik’u.