Mikrotik a SYN flood útoky

Mikrotik a SYN flood útoky
« kdy: 05. 07. 2021, 18:32:30 »
Dobrý den,
na oficiální wiki Mikrotiku jsou tři jednoduchá pravidla jako prevence SYN flood útoků:
Kód: [Vybrat]
/ip firewall filter add chain=forward protocol=tcp tcp-flags=syn connection-state=new \
action=jump jump-target=SYN-Protect comment="SYN Flood protect" disabled=yes
/ip firewall filter add chain=SYN-Protect protocol=tcp tcp-flags=syn limit=400,5 connection-state=new \
action=accept comment="" disabled=no
/ip firewall filter add chain=SYN-Protect protocol=tcp tcp-flags=syn connection-state=new \
action=drop comment="" disabled=no
První pravidlo nové forward syn pakety přehodí na druhé pravidlo, kde je limit / s, pokud vyhoví, tak accept, pokud nevyhoví, tak třetí pravidlo dropuje.
Vtipné je, že se to všude na internetu v návodech kopíruje i ze zakázaným prvním pravidlem a už bez původní poznámky, že se má místo 400 nastavit požadovaný limit potom první pravidlo povolit... jinak to nefunguje:-)
Zkusil jsem to použít a dát dopředu firewallu.

Hlavou mi ale vrtá to druhé pravidlo, které pakety pustí a už nejdou dalším zbytkem firewallu pod těmito třemi řádky. Narazil jsem na článek nějakého Rusa, kde právě toto také řeší. Místo forward dává input u prvního pravidla a místo accept dává return. Že prý se to tak vrátí k dalším pravidlům a puštěné pakety jdou ve firewallu dál. Podle něho je to prý důležité. Já si právě nejsem moc jistý, jestli to ten Rus dělá správně. Mám strach, že return to zacykluje v nějaké smyčce a input se mi moc nechce dávat, protože Mikrotik má už v defaultu pravidlo, že to dropuje všechno co přichází mimo LAN (tedy z WAN).... tudíž to dropuje třeba i požadavky na DNS zvenku a už není potřeba dávat port 53 drop atd...
Pokud to chápu správně, tak tato původní pravidla z wiki s forward fungují jenom na provoz z LAN do WAN (což ani nepotřebuji) a v případě z WAN do LAN to funguje jenom u přesměrovaných portů v NAT. Myslím si, že pokud příjdou "neznámé a špatné" pakety zvenku jako input, tak tato 3 pravidla na ně nefungují (není kam je přesměrovat) a jsou stejně dále ve firewallu zahozeny (viz drop všeho co není z LAN).

Uvažuji tak správně? Nemůže to druhé pravidlo s accept být nějakým ohrožením, když zmíněné pakety pustí a už neprocházejí dalším firewallem? Chápu, že při input by to byl velký problém... ale při forward? Dá se to ještě nějak jinak a lépe ochránit? Budu rád za všechny názory. A má to vůbec nějaký smysl? Beru to hlavně jako ochranu přesměrovaných portů. Mikrotik je na veřejné adrese. Používám jen IPV4. Balík IPV6 není ani nainstalován.
Děkuji


Re:Mikrotik a SYN flood útoky
« Odpověď #1 kdy: 06. 07. 2021, 08:14:31 »
Forward jsou pravidla pro provoz, ktery "prochazi" firewallem ie. paket prochazi z jednoho rozhrani na druhe. Nepredpoklada se totiz, ze by neco z venku koncilo primo na firewallu.

Return target by daval smysl v pripade, ze by jsi se SYN paketem potreboval dal pracovat ie. DNAT.

Re:Mikrotik a SYN flood útoky
« Odpověď #2 kdy: 06. 07. 2021, 10:05:47 »
Ako bolo pisane v predoslom poste.

Chain forward je pravidlo vzdy medzi dvoma interfacmi a plati oboma smermi. Je jedno ci ides s ether1 (WAN) na bridge (LAN) alebo opacne. Pravidlo sa uplatnuje v oboch smeroch.

Chain Input je vzdy na vstupe na mikrotik a opat plati, ze je jedno z akeho portu pristupujes.

Ja  osobne som si skombinoval tcp syn flood s DDOS protekciou a pravidla su nejak takto:

Kód: [Vybrat]
add action=jump chain=forward comment="--- DDOS check rules ---" connection-state=new jump-target=detect-ddos
add action=return chain=detect-ddos comment="-- ignore trafic from our DNS --" protocol=udp src-address-list=DNS
add action=return chain=detect-ddos comment="-- ignore trafic to our DNS --" dst-address-list=DNS protocol=udp
add action=accept chain=detect-ddos limit=15k,15:packet protocol=tcp tcp-flags=syn
add action=drop chain=detect-ddos protocol=tcp tcp-flags=syn
add action=return chain=detect-ddos dst-limit=1500,1500,src-and-dst-addresses/10s
add action=add-dst-to-address-list address-list=ddosed address-list-timeout=15m chain=detect-ddos
add action=add-src-to-address-list address-list=ddoser address-list-timeout=15m chain=detect-ddos
add action=drop chain=forward comment="--- DDOS check rules ---" dst-address-list=ddosed src-address-list=ddoser

Dolezite je spravit si vynimku na DNS servere, ktore pouzivas. Aby ti odpovede na ne a  z nich
zbytocne nezahadzovalo. Kazdy spravny dns ma ochranu voci floodu ci ddosu zapnutu.

Ak chces toto riesit na inpute staci si pridat jump pravidlo z inputu...

Kód: [Vybrat]
add action=jump chain=input connection-state=new jump-target=detect-ddos
Ako priklad uvazdam firewal z return pravidlami. Return pravidlo funguje nasledovne:

Kód: [Vybrat]
/ip firewall filter
add action=accept chain=input comment="--- Allow related, established connections ---" connection-state=established,related,untracked
add action=drop chain=input comment="--- Drop invalid connections ---" connection-state=invalid
add action=jump chain=input comment="--- Ping flood checker ---" icmp-options=8:0-255 jump-target=ICMP protocol=icmp
add action=accept chain=input comment="--- Allow DNS from LAN only ---" dst-port=53 protocol=udp src-address-list=DNS
add action=accept chain=input comment="--- Allow winbox from address list Monit ---" dst-port=22,8728 protocol=tcp src-address-list=Monit
add action=jump chain=input comment="--- Allow VPN protocols ---" jump-target=Input-VPN
add action=accept chain=input comment="--- UDP BTest with addresslist Btest ---" dst-port=2000-3000 protocol=udp src-address-list=BTest
add action=accept chain=input comment="--- TCP BTest with addresslist Btest ---" dst-port=2000 protocol=tcp src-address-list=BTest
add action=add-src-to-address-list address-list=portscan address-list-timeout=2d chain=input comment="--- Portscan Rules ---" protocol=tcp psd=21,3s,3,1
add action=add-src-to-address-list address-list=portscan address-list-timeout=2w chain=input protocol=tcp tcp-flags=fin,!syn,!rst,!psh,!ack,!urg
add action=add-src-to-address-list address-list=portscan address-list-timeout=2w chain=input protocol=tcp tcp-flags=fin,psh,urg,!syn,!rst,!ack
add action=add-src-to-address-list address-list=portscan address-list-timeout=2w chain=input comment="--- Portscan Rules ---" protocol=tcp tcp-flags=!fin,!syn,!rst,!psh,!ack,!urg
add action=drop chain=input comment="--- Drop all unallowed input traffic ---" src-address-list=!Monit

add action=accept chain=Input-VPN comment="--- VPN protocols ---" dst-port=500,1194,1701,4500 protocol=udp
add action=accept chain=Input-VPN dst-port=1194,1723 protocol=tcp
add action=accept chain=Input-VPN protocol=ipsec-esp
add action=accept chain=Input-VPN protocol=ipsec-ah
add action=accept chain=Input-VPN protocol=gre
add action=return chain=Input-VPN comment="--- VPN protocols ---"

add action=accept chain=ICMP comment="--- ICMP flood check ---" limit=15k,150:packet protocol=icmp
add action=drop chain=ICMP protocol=icmp
add action=return chain=ICMP comment="--- ICMP flood check ---"

Paket prechadza pravidlami az pride po jump, tam odskoci do noveho chainu, kde sa robia dalsie overenia.
Ak paket prejde celym chainom, tak sa vrati spat za jump pravidlo a pokracuje dalej cez firewall..

Re:Mikrotik a SYN flood útoky
« Odpověď #3 kdy: 06. 07. 2021, 11:46:12 »
Ahoj,
děkuji vám za odpovědi. Něco podobného s těmi black listy, kde se hlídá počet připojení na input a forward s akcí tarpit tam také mám, to bylo také někde na té Wiki. Pak ještě něco podobného proti port scanu. V podstatě používám default firewall od Mikrotiku doplněný pár podobnými pravidly. Služby jsem všechny zakázal kromě webu a winboxu a povolil si zvenku připojení do administrace routeru jen z jedné IP (to do budoucna půjde pryč a bude jenom připojení z LAN). Porty jsou samozřejmě změněné. V NATu mám přesměrovaných několik portů do vnitřní sítě, některé jen z whitelistu a pouze tři z celého internetu. Dále mám v NATU několik odchozích maškarád pro požadované vnitřní IP a požadované dst porty. Logy z Mikrotiku se odesílají na externí syslog server + tam mám nějaké grafíky na web rozhraní. To jsem zvládl nastavit sám, ale jako skoro vůbec tomu nerozumím....
Šlo mi hlavně o to, jak se to původní pravidlo chová ve spojení s tím defaultním pravidlem od Mikrotiku pod ním, kde se dropuje input mimo LAN... asi víte, které mám na mysli, je tam u něj input !LAN a drop. Právě na tomto pravidle končí skoro všechny pokusy o připojení od všech těch různých šmejdů, dotazy na DNS zvenku atd. Čistě teoreticky by na něm měly končit právě i ty útoky zvenku, nebo ne?
Zajímavé by bylo i rozebrat, jak by se to chovalo s tím input. Ten Rus ve svém článku píše, že během chvíle mu náporem zvenku kvůli accept v druhém řádku zamrzl router. Popravdě ale, přemýšlím, co by se mohlo stát? Router sice SYN paket příjme, ale co dál? Další případná komunikace stejně skončí na tom drop !LAN.
Možná se ptám blbě, možná do toho moc vrtám... ale popravdě chci mít firewall co nejkratší, co nejúčinnější a hlavně bych rád dokonale všem pravidlům rozuměl.

Re:Mikrotik a SYN flood útoky
« Odpověď #4 kdy: 06. 07. 2021, 15:47:42 »
Kdysi davno se na "spatny" provoz odpovidalo ICMP 'unreachable', 'admin prohibited' a podobne ptakoviny. Dnes se to proste zahazuje a neni zadny duvod se s protistranou nejak vybavovat. Takze pokud tam ten SYN nema co delat = zahodit. Plati, ze pravidla se vyhodnocuji od zhora dolu => cim drive to zahodis tim mensi starost s tim bude a zaroven cim mene pravidel tim rychleji se uplatni. Na zaver bych  doplnil, ze input + forward  + output muzou mit specifikovane vstupni i vystupni rozhrani. Tim lze rozlisit vsechny smery.


5nik

  • ***
  • 133
    • Zobrazit profil
    • E-mail
Re:Mikrotik a SYN flood útoky
« Odpověď #5 kdy: 06. 07. 2021, 20:14:59 »
Nejsem si 100% jist, ale pokud to řešíte v chainu forward a tabulce filter, pak již jsou ke každému spojení (byť nenavázanému) alokovány prostředky a na to může router dojet (vyčerpání dostupných prostředků - paměti). Mikrotik z tohoto důvodu zpřístupnil i tabulku Raw, která má právě sloužit pro tyto účely. Viz oficiální dokumentace: https://help.mikrotik.com/docs/pages/viewpage.action?pageId=28606504

Re:Mikrotik a SYN flood útoky
« Odpověď #6 kdy: 07. 07. 2021, 01:13:13 »
Tedy bych měl dát drop pravidla na adresy z blacklistů i do RAW?

SB

  • ****
  • 347
    • Zobrazit profil
    • E-mail
Re:Mikrotik a SYN flood útoky
« Odpověď #7 kdy: 07. 07. 2021, 16:20:45 »
Dle původního dotazu není moc co řešit:
Filtrování na SYN flood s nejvyšší pravděpodobností nebude jediným požadavkem na příchozí spojení, proto má být v druhém pravidlu return místo accept, aby bylo možno příchozí packet dále zpracovávat. Třetí pravidlo je jen zaříznutím zjištěného útoku.
Vzhledem k tomu, že pravilo firewallu limit umí i negaci, mělo by jít tato 3 pravidla nahradit jediným pravidlem s drop.

Re:Mikrotik a SYN flood útoky
« Odpověď #8 kdy: 07. 07. 2021, 17:05:08 »
Tie tri pravidla pre syn flood mozbu byt zapisane bud formou:

jump -> rate accept -> drop alebo jump -> rate accept -> drop -> return

Jediny rozdiel v tychto zapisoch je ten, ze paket, ktory presiel cez rate accept uz nepokracuje dalej vo firewalle. Pretoze bol akceptovany. Avsak v druhom pripade, ho donutime vratit sa spat za jump pravidlo a pokracovat cez dalsie pravidla firewallu. Kde ho mozeme dodatocne blokovat. Ak paket neprejde cez rate pravidlo, tak je rovno zahodeny a dalej sa nic neriesi. Ako niekto spomenul, na znizenie zataze na cpu, je vhodne dropovat paket v raw tabulke, kto sa spracuje ako prva.. V mojom priklade pre ddos pravidla som zabudol toto pravidlo v priklade vlozit ale jedna sa  o nasledovne pravidlo. Prerouting je pouzity zamerne, kedze dany paket odstrihne este pred tym, ako vobec pride do firewall filter pravidiel.

Kód: [Vybrat]
/ip firewall raw
add action=drop chain=prerouting dst-address-list=ddosed src-address-list=ddoser

Re:Mikrotik a SYN flood útoky
« Odpověď #9 kdy: 07. 07. 2021, 21:56:22 »
Hezký večer,
uvažuji správně, že bych tedy mohl vytvořit vlastní pravidlo, forward (input), new connection state, TCP flags syn, limit Rate (!) 400 (nebo nějaký jiný limit), Burst 5, add src to address list. A do raw tabulky bych dal prerouting a drop z toho daného address listu? Tím by se to docela zjednodušilo.
Fungovalo by to tak správně?
Další pravidlo by bylo s tím connection limit, to by se opět dropovalo v raw tabulce. V raw  se mohou dopovat i adresy z port-scan address listu anebo i z blacklistu (na něm mám pár adres hlavně z Ruska, co mi na router pořád dorážely).
Bylo by to tak OK?

A druhá otázka - spíše teoretická, co by se reálně stalo pokud by byly původní tři pravidla, kde by nebyl forward ale input a pod tím to původní pravidlo accept. Teď by do routeru přišel syn paket od nějakého útočníka jako input. Pravidlo accept by paket přijalo a co by se nyní stalo dál? Já předpokládám, že nějaká další komunikace by stejně asi skončila na nějakém dalším drop pravidlu ve firewallu. A kdyby ne, co v routeru útočník může udělat? Když se stejně nikam dál nedostane, do routeru se nepřihlásí atd.. je to jenom o tom, že mu užírá výkon zbytečnou komunikací?

Re:Mikrotik a SYN flood útoky
« Odpověď #10 kdy: 08. 07. 2021, 08:38:05 »
Hezký večer,
uvažuji správně, že bych tedy mohl vytvořit vlastní pravidlo, forward (input), new connection state, TCP flags syn, limit Rate (!) 400 (nebo nějaký jiný limit), Burst 5, add src to address list. A do raw tabulky bych dal prerouting a drop z toho daného address listu? Tím by se to docela zjednodušilo.
Fungovalo by to tak správně?
Další pravidlo by bylo s tím connection limit, to by se opět dropovalo v raw tabulce. V raw  se mohou dopovat i adresy z port-scan address listu anebo i z blacklistu (na něm mám pár adres hlavně z Ruska, co mi na router pořád dorážely).
Bylo by to tak OK?

Samozrejme raw tabulka je taka ista tabulka ako je aj filters. A daju sa robit prvidla zo src-address ci dst-address a dropovat to tam. Tak ako to som to spravil ja pre ddos.

A druhá otázka - spíše teoretická, co by se reálně stalo pokud by byly původní tři pravidla, kde by nebyl forward ale input a pod tím to původní pravidlo accept. Teď by do routeru přišel syn paket od nějakého útočníka jako input. Pravidlo accept by paket přijalo a co by se nyní stalo dál? Já předpokládám, že nějaká další komunikace by stejně asi skončila na nějakém dalším drop pravidlu ve firewallu. A kdyby ne, co v routeru útočník může udělat? Když se stejně nikam dál nedostane, do routeru se nepřihlásí atd.. je to jenom o tom, že mu užírá výkon zbytečnou komunikací?

Ak sa bavime o inpute, tak pokial paket prejde cez firewall, ale na danom zariadeni nie je spustena ziadna sluzba, ktory by dany paket dalej spracovala, tak spojenie sa do x sekund/minut ukonci tzv. timeout-ne. Podla toho ako je nastaveny router. Takze jedie, co sa stane je, ze su nejake prostriedky z routra alokovane na dane spojenie. Ak je takych spojeni prilis vela, tak to moze narusit chod routra. A presne toto robi tcp syn flood, ze podstrci v pakete roznu zdrojovu ip a tym padom tvoj router sa snazi odpovedat zdroju, ale ten o nicom nevie. S tcp syn flood limitom sa treba pohrat a nastavit ho na zaklade realnej prevadzky v sieti. Aby si si zbytocne neodrezaval aj regularne spojenia.

Cital som aj o tom, ze tcp syn flood ochrany, mozu casto krat aj uskodit viacej ako pomoct pri ochrane. Takze je to na uvazeni, ci to riesit alebo nie.

SB

  • ****
  • 347
    • Zobrazit profil
    • E-mail
Re:Mikrotik a SYN flood útoky
« Odpověď #11 kdy: 08. 07. 2021, 14:19:36 »
...bych tedy mohl vytvořit vlastní pravidlo, forward (input), new connection state, TCP flags syn, limit Rate (!) 400 (nebo nějaký jiný limit), Burst 5, add src to address list. A do raw tabulky bych dal prerouting a drop z toho daného address listu? Tím by se to docela zjednodušilo.
Fungovalo by to tak správně?
Další pravidlo by bylo s tím connection limit, to by se opět dropovalo v raw tabulce. V raw  se mohou dopovat i adresy z port-scan address listu anebo i z blacklistu (na něm mám pár adres hlavně z Ruska, co mi na router pořád dorážely).
Bylo by to tak OK?

Firewall raw (= před routing decision) je skoro stejný jako ten standardní, jen nebude fungovat rozhodování dle existujícího spojení. Protože je to před routing decision, je možné udělat univerzální pravidlo pro jakýkoliv příchozí packet bez ohledu na jeho cíl, aniž by bylo třeba to strkat na 2 místa (input a forward ve standardním firewallu).
Na druhou stranu je třeba si být vědom toho, že velká většina packetů stromečkem standardního firewallu neprochází, protože je odbavena pravidlem established. To ale neplatí pro pravidla raw, která dle uspořádání vytěžují router při každém packetu. Otázkou je jak moc.


...co by se reálně stalo pokud by byly původní tři pravidla, kde by nebyl forward ale input a pod tím to původní pravidlo accept. Teď by do routeru přišel syn paket od nějakého útočníka jako input. Pravidlo accept by paket přijalo a co by se nyní stalo dál? Já předpokládám, že nějaká další komunikace by stejně asi skončila na nějakém dalším drop pravidlu ve firewallu. A kdyby ne, co v routeru útočník může udělat? Když se stejně nikam dál nedostane, do routeru se nepřihlásí atd.. je to jenom o tom, že mu užírá výkon zbytečnou komunikací?

Na rozhraní routeru nepřichází žádný packet jako input, nic takového není. Prostě přijde jakýkoliv packet (třeba plný kravin) a router se dle cíle rozhodne, zda jej strčí do řetězce input, nebo forward (nebo úplně zahodí).

Re:Mikrotik a SYN flood útoky
« Odpověď #12 kdy: 08. 07. 2021, 18:27:20 »
Díky za vyčerpávající odpovědi. Chápu....  P.S. s tím paketem jsem se neobratně vyjádřil...ale chápu to, že input, forward atd. je záležitostí až firewallu v routeru a pakety žádný takový příznak hned od začátku nemají. Díky moc za všechny rady.