Firewally

Pavel Piskač, 173297 (zavináč) fi (tečka) muni (tečka) cz

Obsah

Co je to firewall

Firewall je síťové zařízení sloužící k řízení a zabezpečení síťového provozu mezi sítěmi s různou úrovní důvěryhodnosti a zabezpečení. Slouží jako kontrolní bod, který určuje pravidla pro komunikaci mezi sítěmi. Tato pravidla dříve zahrnovala pouze zdrojovou a cílovou IP adresu, zdrojový a cílový port, což je v některých případech nedostatečné, proto již většina firewallů umožňuje zjištění informací o stavu spojení, znalost kontrolovaných protokolů, případně prvky IDS (Intrusion Detection System).

IDS (Intrusion Detection System)

Systémy IDS obecně slouží jako detektory rozpoznávající napadení či pokusy o napadení koncových stanic. Rozlišují se na:

Typy firewallů

Paketové filtry

Nejjednodušší a nejstarší typ firewallu, kde jsou pakety řízeny pravidly, která uvádějí, z jaké adresy a portu na jakou adresu a port může být doručen procházející paket. Tyto informace jsou získány z hlaviček paketů. Paketový filtr pracuje na síťové vrstvě ISO/OSI modelu.

Toto řešení se vyznačuje jednoduchostí a transparentností, což se projevuje vysokou rychlostí. Z toho důvodu je toto řešení hojně využíváno v místech, kde není potřeba důkladnější analýza procházejících dat.

Nevýhodou je nízká úroveň kontroly procházejících spojení. To je způsobeno schopností sledovat pouze jednotlivé pakety bez možnosti hledání závislostí mezi nimi. Další nevýhodou je absence autentizace vůči firewallu.

Typickým představitelem paketových filtrů je ipchains, který byl součástí jádra. Od jádra verze 2.4 byl nahrazen frameworkem netfilter.

Aplikační brány

Aplikační brána (proxy firewall, proxy server, aplikační proxy) je ochrana na aplikační vrstvě. Dochází k úplnému oddělení sítí. Spojení probíhá tak, že klient pošle proxy severu požadavek na otevření spojení s nějakou službou v jiné síti a aplikační brána toto spojení otevře. Všechna data jdou vždy přes proxy server, který rozhodne o jejich osudu. Jinými slovy, proxy server slouží jako prostředník mezi klientem v jedné síti a službou v síti druhé. Vedlejším efektem tohoto způsobu komunikace je skrytí zdrojové adresy klienta, protože jako klient vždy slouží aplikační brána.

Výhodou tohoto řešení je možnost kontroly obsahu přenášených paketů (např. antivirová kontrola. filtrování nevhodného obsahu...), autentizace uživatelů, možnost cachování dat a skrytí zdrojové adresy klienta.

Proti tomuto řešení hovoří především vyšší hardwarové nároky a netransparentnost, kdy musí každá aplikace podporovat připojení pomocí proxy a tyto aplikace musí být správně nastaveny. Pro každou aplikaci musí být zvláštní proxy.

Pro Linux existuje mnoho proxy serverů, jedněmi z nich jsou např. Squid, The TIS Firewall Toolkit (FWKT) nebo SOCKS.

Stavové paketové filtry

Stavové paketové filtry umožňují to samé jako paketové filtry a navíc umožňují ukládání informací o povolených spojeních, které lze používat při rozhodování o budoucnosti paketů. Tato funkce urychluje funkci firewallu, protože u vytvořených spojení již není nutné ověřovat pakety. Dále dochází ke zvýšení bezpečnosti, protože lze nastavit, která strana může otevřít spojení a firewall bude povolovat i pakety jdoucí z druhé strany jako odpovědi na požadavky.

Mezi výhody patří stejně jako u paketových filtrů vysoká rychlost zpracování požadavků a současně lepší možnost zabezpečení než u paketových filtrů. Další výhodou je jednoduchá konfigurace minimalizující škody způsobené například překrýváním některých pravidel.

Nevýhodou je nižší úroveň zabezpečení, než poskytují aplikační brány.

Typickým představitelem je iptables v linuxovém jádře a ipfw ve FreeBSD.

Network Address Translation (NAT)

Překlad adres slouží ke změně hlaviček paketů, kde jsou přepsány zdrojové - DNAT (Destination NAT), nebo cílové adresy - SNAT (Source NAT). Toto řešení lze použít, pokud nemáme dost IP adres, aby všechny počítače v síti mohly mít svou vlastní veřejnou IP adresu nebo ke zvýšení zabezpečení. Za výhodu i nevýhodu lze považovat "neviditelnost" počítačů z vnější sítě, což vede k již zmíněnému zvýšení zabezpečení a také k omezení, protože nelze používat některé služby vyžadující inicializaci spojení serverem. Na překladu adres je založena aplikační brána.

Paketové filtry pro Linux

Linuxové jádro obsahuje paketový filtr od verze 1.1. První generace byla založena na ipfw z BSD. S kernelem verze 2.0 přišlo vylepšení v podobě nástroje ipfwadm, který umožňoval přímo nastavení, správu a kontrolu tabulek obsahující pravidla v jádře. Od verze 2.2 byl používán nástroj ipchains, který byl od verze 2.4 nahrazen frameworkem netfilter.

V BSD systémech je situace ohledně firewallu jednodušší, OpenBSD používá pf (Packet Filter) a FreeBSD používá ipfw (ipfirewall).

Netfilter/iptables

Jedná se o sadu nástrojů a modulů v kernelu umožňující filtrování paketů, překlad adres a portů. Netfilter je značně vylepšený následník ipchains a ipfwadm. Iptables je mocný nástroj, který umožňuje linuxovému nebo unixovému systému plně pracovat se síťovou komunikací. Pomocí něj si můžeme snadno postavit různé druhy firewallů (stavový, transparentní...) nebo sdílení internetu, zkrátka snadno řídit velkou síťovou dopravní křižovatku na serveru.

Konfigurace jádra

Netfilter lze přímo zakompilovat do jádra nebo nastavit jako moduly. To lze provést v následujícím podmenu:

Zde jsou dvě hlavní části Core Netfilter Configuration a IP: Netfilter Configuration, kde si každý může zvolit moduly dle vlastní potřeby.

Princip fungování

Princip fungování je založen na procházení paketů různými řetězci (chain) pravidel v různých tabulkách, kde se určí, co s nimi. Každá tabulka obsahuje předdefinované řetězce (PREROUTING, OUTPUT...), je také možné vytvořit si vlastní řetězce. Pravidla v řetězcích se prochází postupně od prvního po poslední, pokud nějaký paket vyhovuje pravidlu, dojde k jeho zpracování. Pokud paket nevyhoví ani jednomu pravidlu, je použita implicitní operace.

Konfigurace

Iptables má jednoduchou základní syntaxi
iptables [tabulka] [akce] [chain] [ip_část] [match] [target] [target_info]

Pokud nezvolíme žádnou tabulku, automaticky se použije filter.

Typy tabulek

Běžný uživatel si vystačí jen s tabulkami nat a filter. Princip fungování a uspořádání lze lépe pochopit z následujícího obrázku.
Posloupnost procházení paketů jednotlivými tabulkami.

Akce

Akcí, které můžeme dělat, je poměrně dost. Toto je počeštěný výtažek z manuálu některých nejpoužívanějších.

Práce s řetězci je ovládána následujícími přepínači:

Způsoby manipulace s pravidly uvnitř řetězce:

Výchozí politika řetězce je v iptables nastavena na "povolit všechno", aby od začátku fungoval přístup k síti. Toto řešení samozřejmě není z bezpečnostního hlediska nejlepší, ale vše od začátku funguje a není problém politiky přizpůsobit k obrazu svému. Při konfiguraci bychom se měli řídit pravidlem "co není povoleno, to je zakázáno".

Příklad nastavení implicitního pravidla "zahoď vše" pro řetězec INPUT v tabulce filter:
iptables -P INPUT DROP

IP část

Pro protokoly můžeme použít standardní názvy (ICMP, UDP, TCP, ALL) nebo lze použít i ty, které jsou v /etc/protocols. Protokol určíme přepínačem -p nebo --protocol. Při výběru protokolu lze použít vykřičník sloužící jako negace. Například -p ! tcp znamená, že pravidlo se provede, pokud protokol není TCP.

Pro určení zdrojové a cílové IP adresy slouží přepínače -s, --src nebo --source pro zdrojovou a -d, --dst nebo --destanation pro cílovou. IP adresy lze také psát ve tvaru 192.168.0.1/24 nebo 192.168.1.1/255.255.255.0 pro určení celého bloku.

Pro zjištění, ze kterého zařízení paket přišel, či které se právě snaží opustit, použijeme přepínače -i, --in-interface pro vstupní zařízení, případně -o, --out-interface pro výstupní zařízení.

Předposlední volba -j, --jump určuje akci, která se má provést, jestliže je splněna podmínka daná pravidlem. Základní akce jsou ACCEPT, DROP, REJECT a LOG, avšak je možné definovat i své vlastní.

Poslední, je GOTO -g, --goto, které má stejný význam jako v programování. Tato volba se používá místo skoku, pokud chceme pravidlo testovat v jiných řetězcích, které si nadefinujeme (tedy ne hned vykonat akci).

Ukázka jednoduchého pravidla:
iptables -A INPUT -i eth0 -s ! 192.168.0.1 -p tcp --dport 199 -j DROP

Všechny pakety přicházející ze zařízení eth0, které nejdou z adresy 192.168.0.1, používají protokol TCP a mají cílový port 199, budou zahozeny.

Pár rad na závěr

Toto je jen krátký a stručný úvod do problematiky, proto doporučuji prostudování i jiných zdrojů (např. odkazů uvedených v literatuře).

Po prvním spuštění jsou všechny tabulky prázdné a výchozí akce je ACCEPT, forwardování paketů a jiné funkce jsou vypnuté.

Zavedení pravidel se většinou provádí ve skriptu spuštěném po startu systému, kde jsou vyjmenována všechna pravidla.

Ještě jednou zdůrazním používání pravidla "co není povoleno, to je zakázáno" místo implicitního "vše, co není zakázáno, je povoleno".

Následující rada je vhodná pro ty, kteří konfigurují počítač vzdáleně. Než aplikujete pravidla, zkontrolujte, že vám tato pravidla neutnou komunikaci se ssh.

Není dobré zahazovat pakety jdoucí na port tcp/113 (služba ident). Některé servery si mohou vyžádat informaci o klientovi. Pokud tato informace není dostupná, čeká se na timeout, což způsobuje výrazné zpomalení. Jako vhodné řešení lze pro tento port nastavit akci REJECT.

Forwardování paketů se zapíná následujícím příkazem:
echo "1" > /proc/sys/net/ipv4/ip_forward

Příklad přesměrování portu 8080 na port 80:
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8080 -j DNAT --to-destination 192.168.1.1:80

Literatura