Unix a Internet 5. Firewall Obsah: © Milan Keršláger http://www.pslib.cz/ke/slajdy 6.12.2010 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
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
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 # implicitní pravidlo (vše zakážeme) iptables -P INPUT DROP # povolíme ping iptables -A INPUT -p icmp --icmp-type 8 # povolíme SSH (port 22) iptables -A INPUT -p tcp –-dport ssh
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 # 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 -s 1.2.3.0/24 --sport číslo -d 10.0.0.1 --dport číslo -p tcp -p udp
NAT