Last Updated on 22/01/2023 by administrator
Mikrotik – Ochrana před DDoS útoky (Mikrotik – DDoS protection)
Mikrotik – Ochrana před DDoS útoky (Mikrotik – DDoS protection)
Motivace:
Článek popisuje, jak vytvořit na RouterBOARDu od společnosti Mikrotik firewall pravidla proti DDoS útokům (DDoS protection) a ochránit tak před těmito útoky vše, co je „schované“ za RouterBOARDem, ale i běžící služby na RouterBOARDu.
Na úvod:
Obecně DoS či DDoS útok, zahlcuje CPU, RAM a internetovou linku. Už jen pokud útok, vedený na server jde přes Mikrotik, zahlcuje to nejen server ale i samotný Mikrotik. To zatěžuje Mikrotik CPU, kde afektovaný je třeba firewall (filter, NAT, mangle), logování, fronty, .., a také RAM, neboť se alokují nové connections ve stateful flow tabulce. Tímto vznikají větší latence až může dojít k timeoutu paketů a Mikrotik se může stát nedostupný.
Obecně neexistuje dokonalé řešení ochrany před DDoS útoky, nicméně dá se minimalizovat dopad útoku a to pomocí:
- výkonnějšího routeru
- rychlejším uplinkem
- menším počtem firewall pravidel, front či dalších akcí pro manipulaci s pakety
Vždy je nejlepší zablokovat útok co nejblíže ke zdroji, aby nevytežoval síťová zařízení „po cestě“.
OS:
Postup byl prováděn na verzi RouterOS 6.x. konkrétně RouterOS 6.49.6
1. Implementace IDS/IPS chránící síťová zařízení nacházející se za RouterBOARDem
Firewall pravidla níže poskytují DDoS ochranu pro všechny protokoly (TCP, UDP, ICMP, ..).
Jednotlivé části firewall pravidel jsou označeny čísly pomocí komentáře (#1, #2, ..). Každá tato jednotlivá číselná část firewall pravidla je popsána níže.
/ip firewall filter #1 add action=jump chain=forward connection-state=new jump-target=detect-ddos in-interface ether1 #2 add action=return chain=detect-ddos dst-limit=30,10,src-and-dst-addresses/10s #3 add action=add-dst-to-address-list address-list=ddos-dst address-list-timeout=10d chain=detect-ddos #4 add action=add-src-to-address-list address-list=ddos-src address-list-timeout=10d chain=detect-ddos #5 add action=drop chain=forward connection-state=new dst-address-list=ddos-dst src-address-list=ddos-src
Popis firewall pravidel výše:
1# pravidlo – každé nové spojení (což definované TCP SYN) [connection-state=new], přicházející ze vstupního rozhraní ether1 [in-interface=ether1], se předá na target „detect-ddos“ [jump-target=detect-ddos]
2# pravidlo – na vstup přichází chain (řetězec) „detect-ddos“ [chain=detect-ddos], (který definuje z 1# pravidla všechna nově vytvořená spojení) a toto pravidlo nastavuje per zdrojovou a cílovou IP adresu limit 30 paketů za sekundu (pps) s burstem 10 paketů [dst-limit=20,5,] a díky řetězce action „return“ [action=return] se předá informace zpátky do chain (řetězce) „detect-ddos“
3# pravidlo – na vstup přichází již upravený chain (řetězec) „detect-ddos“ [chain=detect-ddos], kde byl nastaven limit paketů a burst 2# pravidlem. Při překročení se cílová IP adresa [action=add-dst-to-address-list] dostává do Address Listu se jménem „ddos-dst“ na 10 dní [address-list=ddos-dst address-list-timeout=10d].
4# pravidlem (podobně jako 3#) na vstup přichází již upravený chain (řetězec) „detect-ddos„[chain=detect-ddos], kde byl nastaven limit paketů 2# pravidlem. Při překročení se zdrojová IP adresa [action=add-src-to-address-list] dostává do Address Listu se jménem „ddos-src“ na 10 dní [address-list=ddos-dst address-list-timeout=10d].
5# pravidlo zahazuje všechny pakety [action=drop] nového vytvořeného spojení [connection-state=new], které prošly Address Listem „ddos-dst“ a „ddos-src“ [dst-address-list=ddos-dst src-address-list=ddos-src].
Poznámka: Jak moc citlivě se bude pravidlo chovat při DDoS útoku je nutné individuálně otestovat a korektně zvolit dst-limit.
Ukázka blokace zdrojových IP adres (ddos-src):
2. Implementace IDS/IPS chránící služby na RouterBOARDu
Příkladem může být ochrana pro WinBox GUI, PPTP server či L2TP server, které běží přímo na zařízení Mikrotik. Níže je uveden příklad pro ochranu WinBox GUI.
Pár let tuto IDS/IPS ochranu používám na svém RouterBoardu.
Princip funkce:
Uživatel má 3 pokusy pro zadání správných přihlašovacích údajů. Po 4 nesprávném pokusu dojde v rámci 1 minuty k zablokovaní jeho IP adresy na WinBox GUI portu TCP/8291 a to na 10 dnů.
Každé nesprávné zadaní přihlašovacích údajů vytváří na Mikrotik novou konexi TCP SYN a na tom jsou založena firewall pravidla níže. Čili 4 zprávy TCP SYN obdržené na portu TCP/8291 v rámci 1 minuty blokují IP adresu na 10 dnů.
Opět jednotlivé části firewall pravidel jsou označeny čísly pomocí komentáře (#1, #2, ..). Každá tato jednotlivá číselná část firewall pravidla je popsána níže.
/ip firewall filter 1# add chain=input action=drop protocol=tcp src-address-list=winbox_blacklist in-interface=ether1 dst-port=8291 2# add chain=input action=add-src-to-address-list connection-state=new protocol=tcp src-address-list=winbox_blacklist_stage3 address-list=winbox_blacklist address-list-timeout=1w3d in-interface=ether1 dst-port=8291 3# add chain=input action=add-src-to-address-list connection-state=new protocol=tcp src-address-list=winbox_blacklist_stage2 address-list=winbox_blacklist_stage3 address-list-timeout=1m in-interface=ether1 dst-port=8291 4# add chain=input action=add-src-to-address-list connection-state=new protocol=tcp src-address-list=winbox_blacklist_stage1 address-list=winbox_blacklist_stage2 address-list-timeout=1m in-interface=ether1 dst-port=8291 5# add chain=input action=add-src-to-address-list connection-state=new protocol=tcp address-list=winbox_blacklist_stage1 address-list-timeout=1m in-interface=ether1 dst-port=8291 6# add chain=input action=accept protocol=tcp in-interface=ether1 dst-port=8291
Popis firewall pravidel výše:
Pro vysvětlení jednotlivých pravidel je nutné je popsat od posledního 6 pravidla až k 1 pravidlu:
6# pravidlo – povoluje věškerou komunikaci [action=accept] přicházející z rozhraní ether1 [in-interface=ether1] na cílovém portu TCP/8291 [protocol=tcp dst-port=8291]
5# pravidlo – pro každé nové spojení (což definované TCP SYN) [connection-state=new], na portu TCP/8291 ze vstupního rozhraní ether1 [protocol=tcp in-interface=ether1], se dostává zdrojová IP adresa do Address Listu se jménem winbox_blacklist_stage1 na 1 minutu [action=add-src-to-address-list address-list=winbox_blacklist_stage1 address-list-timeout=1m]
4# pravidlo – Pokud zdrojová IP adresa, která byla přidána v Address Listu winbox_blacklist_stage1 [src-address-list=winbox_blacklist_stage1] naváže druhé nové spojení (což definované novým TCP SYN) [connection-state=new] přidá se tato zdrojová IP adresa do dalšího Address Listu winbox_blacklist_stage2 na 1 minutu [action=add-src-to-address-list address-list=winbox_blacklist_stage2 address-list-timeout=1m]
3# pravidlo – Pokud zdrojová IP adresa, která byla přidána v Address Listu winbox_blacklist_stage2 [src-address-list=winbox_blacklist_stage2] naváže třetí nové spojení (což definované opět novým TCP SYN) [connection-state=new] přidá se tato zdrojová IP adresa do dalšího Address Listu winbox_blacklist_stage3 na 1 minutu [action=add-src-to-address-list address-list=winbox_blacklist_stage3 address-list-timeout=1m]
2# pravidlo – Pokud zdrojová IP adresa, která byla přidána v Address Listu winbox_blacklist_stage3 [src-address-list=winbox_blacklist_stage3] naváže čtvrté nové spojení (což definované opět novým TCP SYN) [connection-state=new] přidá se tato zdrojová IP adresa do finálního Address Listu winbox_blacklist a to na 10 dní [action=add-src-to-address-list address-list=winbox_blacklist address-list-timeout=1w3d]
1# pravidlo – Všechny zdrojové IP adresy co byly přidány do Address Listu winbox_blacklist [src-address-list=winbox_blacklist] jsou zahozeny [action=drop].
3. Implementace ochrany před TCP SYN útoky
Využívá se zapnutí volby TCP SynCookies. Výhoda je ze SYN-cookies jsou kompatibilní se všemi specifikacemi TCP
Zjednodušený princip funkce:
Pro navázání TCP komunikace se používá 3-way handshake. Klient nejdříve vyšle SYN paket. Mikrotik příjme tento SYN a odpoví zprávou SYN-ACK. Nicméně pokud je zapnutá funkce TCP SynCookies Mikrotik vloží navíc do zprávy SYN-ACK kryptograficky hash. Jak odpověď na SYN-ACK Mikrotik příjme zprávu ACK od klienta. Pokud Mikrotik v této ACK zprávě nevidí kryptograficky hash, připojení je falešné a zahodí ho. Pokud je stejný hash přítomný v ACK, až teprve potom Mikrotik alokuje TCP buffer a komunikace klasicky proběhne. Tím pádem nedojde k přetečení TCP bufferu při TCP SYN útoku Viz. více popisuje tento obrázek zde
/ip settings set tcp-syncookies=yes
Zdroj:
[1] http://srijit.com/how-to-protect-your-mikrotik-router-from-ddos-attacks/
Pravidlo DROP v kapitole 2 je vhodné dát i do RAW tabulky (nebo jenom tam). Tam lze blokovat vyšší pps než kdekoliv jinde (alespoň tedy na routerboardu). Sice to stejně proti DoS většinou nepomůže (překročit kapacitu linky není na místech většiny RB žádný větší problém), ale když už nic, zabrání to plnění conntrack tabulky.
Také je lepší si to odhodit do extra chainu, z pravidel vyhodit porty a posílat tam z inputu i jiné služby, typicky SSH. A tím dropem také blokovat komplet IP.
Zdravim, dekuji, urcite vyzkousim