Úloha firewallu je chránit vnitřní síť pře útoky z okolních sítí. A to tak, že zamezuje přístupu k službám vnitřní sítě cizím strojům. K tomu potřebuje, aby byl umístěn právě mezi chráněnou sítí a okolním světem. Mimo toho dokáže většina firewallů zaznamenávat komunikaci nebo upravovat procházející pakety. V současnosti přestává být firewall jen specializovaný hardware, ale i samostatné počítače obsahují vlastní softwarový firewall.
Základním druhem firewallu je paketový filtr, který pracuje jen v ip vrstvě. To znamená, že se může rozhodovat jen na základě zdrojové a cílové ip adresy. Pokročilejší filtry zvládají pracovat i s okolními vrstvami (linkovou a transportní). To znamená větší možnosti nastavení, hlavně lze kontrolovat jednotlivé poskytované služby. A však za cenu větší náročnosti.
Stavový firewall si na rozdíl od paketového filtru navíc udržuje tabulku všech navázaných spojení, která mu slouží pro zjištění, zda pakety náleží do některého otevřeného spojení nebo nebo ne. Kvůli paketovému filtru ani stavovému firewallu není nutné měnit stávající aplikace.
Aplikační proxy funguje v aplikační vrstvě a rozumí daleko lépe obsahu paketů. Umožňuje také identifikaci uživatele. Pro každou službu musí být ale samostatné proxy a je potřeba upravit klientské programy.
Překlad adres je častou přidruženou funkcí firewallu. Provádí se totiž ve stejných síťových vrstvách jako filtrování paketů. Umožňuje měnit zdrojové a cílové ip adresy procházejících paketů a u tcp nebu udp spojení měnit i porty. Nejčastěji se používá ke skrytí několika soukromých ip adres za jednou veřejnou nebo přesměrování komunikace na jiné porty nebo stroje.
První firewall se v Linuxu objevil ve verzi 1.1. Jednalo se ipfw, jenž byl převzatý z BSD. Ve verzi jádra 2.0 přibyl ipfwadmin, nástroj pro nastavování pravidel. Od verze 2.2 sloužil ke konfiguraci nástroj ipchains. Pro řadu 2.4 byl paketový filtr celý přepsán a jmenuje se Netfilter.
Pakety putují Netfiltrem pevně danou cestou a lze je kontrolovat v pěti různých fázích.
Pro nastavení netfiltru se používá program iptables. Konfigurace se provádí pomocí pravidel, podle kterých se Netfilter rozhoduje, co se kterým paketem dělat. Každé pravidlo patří do jedné z tabulek a vztahuje se na jeden řetězec. Každá z tabulek obsahuje předdefinované řetězce odpovídající některé z fází zpracování paketu. Pokud není nalezeno vyhovující pravidlo, použije se výchozí akce pro řetězec. Iptables pracuje se třemi základnimi tabulkami:
Pomocí několika podmínek v pravidlu se blíže určí, se kterými pakety se má daná akce vykonat. Na výběr jsou třeba ip adresy odesílatele a příjemce a příslušné porty nebo zda paket patří již k nějakému otevřenému spojení.
Příkazy pro manipulaci s pravidly
iptables -t [table] # výběr tabulky, bez udání se vybere tabulka filter iptables -L [chain] # zobrazí všechny pravidla pro vybranou tabulku iptables -P chain target # nastaví výchozí akci pro řetězec iptables -A chain rule-specification # přidá pravidlo na konec řetězce iptables -D chain rule-specification | rulenum # smaže pravidlo, určené přímo nebo číslem (čísluje se od jedničky). iptables -I chain [rulenum] rule-specification # přidá pravidlo na určenou pozici. iptables -R chain rulenum rule-specification # nahradí pravidlo jiným iptables -F [chain] # smaže všechny pravidla v řetězci, případně celou tabulku
Příkazy pro tvorbu podmínky pravidla. U některých lze použít ! k negaci.
iptables -p # specifikuje protokol (tcp/udp/icmp) iptables -s # specifikuje zdrojovou adresu iptables -d # specifikuje cílovou adresu iptables -j # akce, která se má s paketem vykonat iptables -i # rozhraní, které přijalo paket iptables -o # rozhraní, kterým paket chce odejít iptables --sport # zdrojový port paket, musí být uveden protokol tcp/udp iptables --dport # cílový port paket, musí být uveden protokol tcp/udp iptables -m module # přidá module pro další možnosti k psaní pravidel
Základní nastavení, který nedovoluje žádné příchozí spojené ani přeposílání
iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # povolí příjem paketů patřících do jíž otevřeného spojení.
Je užitečné nechat přístupné zpětnovazebné rozhraní
iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -o lo -j ACCEPT
Jednoduchý překlad adres
iptables -t nat -A POSTROUTING -j SNAT --to-source 10.0.0.50
Překlad adres použitím maškarády
iptables -t nat -A POSTROUTING -j MASQUERADE -o eth0