Unix a Internet 5. Firewall Obsah: stavový, nestavový iptables v Linuxu NAT, maškaráda QoS © Milan Keršláger http://www.pslib.cz/ke/slajdy 31.10.2012 http://creativecommons.org/licenses/by-nc-nd/3.0/
Firewall „ohnivá stěna“ cílem filtrovat nežádoucí provoz na linkové vrstvě (MAC adresy) nepraktické, ale používá se třeba na ARP spoofing na síťové vrstvě klasické nasazení, zvlášť pro IPv4 a IPv6 filtruji provoz: směrem dovnitř, směrem ven, forwardovaný provoz (router)
Implementace firewallu podle sledování stavu spojení: nestavový firewall stavový firewall podle realizace součást TCP/IP stacku v Linuxu, ale i ve Windows NT aplikační (speciální program) typicky doplňující komerční aplikace FireWall-1 od Checkpointu (Windows, Linux, Solaris) Kaspersky, Lavasoft, Norton, ZoneAlarm, WinGate, ...
Nestavový firewall nemá vnitřní stavy nic si nepamatuje každý datagram posuzován zvlášť jednoduchá implementace nevhodné pro spojovou službu (TCP) nedokáže odfiltrovat datagramy, které do proudu nepatří
Stavový firewall pracuje s vnitřními stavy pamatuje si svoji předchozí činnost datagramy posuzovány v kontextu složitější implementace vhodné pro TCP u spojení rozpoznáme otevření, přenost dat a uzavření používá se i pro UDP u DNS je stavem otázka → odpověď obtížně se dělá analýza přenášených dat na to je potřeba proxy (aplikační brána) antivirová kontrola, detekce malware, únik dat
Firewall v Linuxu ipfwadm do jádra 2.0 ipchains do jádra 2.2 netfilter, nástroj iptables 1998 (Rusty Russell) oficiálně do jádra 2.3 v roce 2000 sada hooků (záchytných bodů) kontrola klíčových uzlů pro cesty datagramů v jádře nftables – ve vývoji
Komponenty
Jak to funguje iptable(s) speciální tabulka(-y) v jádře obsahují řetězec pravidel uživatel může pravidla přidat, mazat výsledkem pravidla může být: ACCEPT – datagram je přijat REJECT – datagram je odmítnut DROP – datagram je zahozen datagram je předán do jiné tabulky LOG – záznam o průchodu datagramu předání (existujícímu) procesu
Základní tabulky INPUT datagram vstupuje do počítače a končí v něm tj. příchozí data (např. do Firefoxu apod.) OUTPUT datagram vznikne v počítači a opouští ho např. navázání spojení (SYN), tj. první datagram vždy se týká jen odchozích datagramů FORWARD datagram je přijat a bude předán k odeslání dále tj. bude uplatněna směrovací tabulka
Cesta datagramu proces INPUT OUTPUT FORWARD Rozhodnutí o směrování vstup Rozhodnutí o směrování FORWARD výstup INPUT proces OUTPUT
Zdroj: http://www.billauer.co.il/ipmasq-html.html
http://www. linuxhomenetworking. com/wiki/index http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch14_:_Linux_Firewalls_Using_iptables
Implicitní pravidlo platí jen pro základní tabulky ve výchozím stavu je tabulka prázdná ve výchozím stavu je implicitní pravidlo „ACCEPT“ ostatní tabulky implicitní pravidlo NEMAJÍ dosáhne-li se konce tabulky, je datagram přijat můžeme využít akce RETURN návrat do předcházející tabulky zde se pokračuje následujícím pravidlem v podstatě si tak vytvoříme tabulku jako „proceduru“
Konstrukce firewallu nejdříve všechno zakázat tj. nastavit implicitní pravidlo na DROP pak selektivně povolujeme máme (?) jistotu, že nepovolíme víc, než je nutné a průběžně kontrolujeme, zda je vše funkční Tipy: obvykle se dělá jen INPUT FORWARD má smysl jen na routerech OUTPUT je bonus :-)
iptables – 1 -L [TABULKA] výpis pravidel (jméno tabulky volitelně) -n --line-numbers numericky, s čísly pravidel -P TABULKA akce nastavení implicitního pravidla -A TABULKA … přidání pravidla do tabulky
iptables – 2 -D TABULKA číslo smazání pravidla číslo -F TABULKA odstranění všech pravidel v tabulce -I TABULKA číslo ... vložení pravidla před pravidlo číslo
Příklad (nestavový firewall) # implicitní pravidlo (vše zakážeme) iptables -P INPUT DROP # povolíme ping iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT # povolíme SSH (port 22) iptables -A INPUT -p tcp –-dport ssh -j ACCEPT
Stavový firewall je nevhodné povolit všechny datagramy na port mohly byt to být i vadné datagramy potřebujeme zachytit otevírání spojení tj. datagram s příznakem SYN využijeme modul state tj. conntrack (connection tracking)
Příklad # implicitní pravidlo (vše zakážeme) iptables -P INPUT DROP # povolíme ping iptables -A INPUT -p icmp --icmp-type 8 # povolíme první datagram pro SSH (port 22) iptables -A INPUT -m state –state NEW -p tcp –-dport ssh -j ACCEPT # povolíme všechny datagramy již schválených spojení iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
SMB sdílení v sítích Microsoft mnoho portů :-( vše pomocí „-m state --state NEW“: -p udp --dport netbios-ns -j ACCEPT # UDP/137 -p udp --dport netbios-dgm -j ACCEPT # UDP/138 -p tcp --dport netbios-ssn -j ACCEPT # TCP/139 -p tcp --dport microsoft-ds -j ACCEPT # TCP/445 -p udp --dport microsoft-ds -j ACCEPT # UDP/445
Upřesnění pravidel -p tcp -p udp -s 1.2.3.0/24 --sport číslo --dport číslo
NAT Network Address Translation překlad adres, tj. NAT mění: cílovou IP adresu, cílový port zdrojovou IP adresu, zdrojový port používá se v případě: server má privátní IP, router ji mění na veřejnou příchozí datagram je předán počítači s privátní IP
Maškaráda dynamicky vytvářená SNAT pravidla pro přístup počítačů s privátní IP do Internetu počítače v LAN se vydávají za router router má jako jediný veřejnou IP adresu router pak vypadá jako hyperaktivní zdroj IP provozu z vnitřku se lze spojit s libovolnou veřejnou IP první datagram zavádí nové pravidlo do maškarády z vnějšku nelze zahájit provoz k vnitřnímu počítači pozor na „hole punching“ – potřebuje prostředníka Skype umí navázat spojení na počítač ukrytý za NAT maškarádu lze opakovat
QoS