/ip firewall filter
add action=accept chain=input connection-state=established,related
add action=accept chain=input protocol=icmp
#misto tohoto jednoho pravidla lze definovat presneji, co je povolene. Pro jednoduchost z LAN naprosto vsechno povoluji.
add action=accept chain=input in-interface=LAN
#na toto misto by se definovala pravidla povolujici pristup na sluzby tohoto routeru z WAN.
#zakazat naprosto vsechno ostatni, vyse nepovolene
add action=drop chain=input
add action=accept chain=forward connection-state=established,related
add action=drop chain=forward connection-state=invalid
#kontrola spravnych IP na LAN je VZDY dobry napad!
add action=drop chain=forward in-interface=LAN src-address=!TVOJE_SIT_NA_LAN
#pokud povolujeme primo stanice a nechceme resit i sluzby neni potreba pro ne definovat nic jineho, nez dle MAC
add action=accept chain=forward comment=moj_pc in-interface=LAN src-mac-address=AA:1D:7D:A9:A1:CC
add action=accept chain=forward comment=server_linux in-interface=LAN src-mac-address=BB:50:99:36:9A:DD
add action=drop chain=forward comment=pravidlo_na_blokovanie_ip_adresy src-address=213.81.214.130
add action=accept chain=forward connection-nat-state=dstnat connection-state=new
#zakazat naprosto vsechno ostatni, vyse nepovolene
add action=drop chain=forward
Lepší je si definovat LAN stranu. Ta bývá "stabilnější", než WAN které může být dynamické. A hlavně je WAN považováno za "nebezpečné", čili na to musíme koukat ne jako na WAN rozhraní, ale jako na "vše mimo LAN", omezíme si možnost chyby v konfiguraci.
Je nutné prostě pochopit, jak funguje stavový firewall. V tomto mém příkladu zákaz pravidla s MAC zakáže tomu počítači přístup na internet (přesněji forward přes tento router). Jenže díky prvnímu pravidlu "established, related" mu to nějaký čas pojede i potom - dokud probíhající konexe neskončí. To může vadit, nemusí.
Ale co je asi horší - ty počítače se na internet nedostanou, ale internet na ně ano. Opět díky tomu established - předposlední pravidlo povolí připojení pocházející z DSTNAT a ty následné pakety už padají do established, related.
Řešení tohoto problému nemusí být snadné.
Asi nejjednodušší by bylo používat DHCP server v kompletně statické konfiguraci. Tedy na rozhraní LAN mít "Arp reply-only" a v DHCP serveru "add arp for leases" a "address-pool static-only". Ono už je totiž potom vcelku jedno, jestli musíš ty MAC udržovat ve firewallu, nebo v DHCP serveru. Jenom zákaz může trvat déle - podle lease-time. Ve firewallu to pak v podstatě řešit nemusíš, povolíš si celý IP segment.
A ještě ti to v budoucnu může ušetřit práci, protože půjde používat dhcp-snooping a všelijaké guardy na switchi.
Pokud nechceš DHCP server, musíš kontrolu MAC dostat ještě před established,related. Input teď vynechávám:
add action=jump chain=forward in-interface=LAN jump-target=MAC
#timto mistem projdou z LAN jen povolene pocitace (resp. pakety nezakazane v chainu MAC)
add action=accept chain=forward connection-state=established,related
add action=drop chain=forward connection-state=invalid
#na toto misto muzeme definovat zakazy, co se tykaji vsech (napr. zakaz portu 17,19, 135-139)
#kontrola spravnych IP na LAN je VZDY dobry napad!
add action=accept chain=forward in-interface=LAN src-address=TVOJE_SIT_NA_LAN
add action=accept chain=forward connection-nat-state=dstnat connection-state=new
#a zakazat zbytek
add action=drop chain=forward
#v extra chainu zablokujeme co nechceme
add action=return chain=MAC comment=moj_pc src-mac-address=AA:1D:7D:A9:A1:CC
add action=return chain=MAC comment=server_linux src-mac-address=BB:50:99:36:9A:DD
add action=drop chain=MAC
Pořád je problém v tom, že první paket z internetu (je-li to DSTNAT) projde. Ale to už nemusí být úplně na závadu.
Třeba já to řeším raději tak, že počítače co mají DST-NAT povoluji explicitně pomocí IP (a address-list).
Pokud je potřeba pracovat se seznamem IP adres, je velice vhodné používat address-list. Pak stačí jen jedno pravidlo a i úpravy jsou jednodušší (a rychlejší, ale to v tomto případě už roli moc hrát nebude).