Firewally

Rostislav Beneš, xbenes5@fi.muni.cz


Obsah


Co je firewall?

Ú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.


Druhy firewallů

Paketový filtr

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

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

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.


Network Address Translation (NAT)

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.


Linux

Historie

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.

Princip netfiltru

Pakety putují Netfiltrem pevně danou cestou a lze je kontrolovat v pěti různých fázích.

PREROUTING
Nově příchozí pakety, které ještě neprošly směrováním. Je u nich možné změnit cílovou ip adresu a port. Po směrování pokračují buď do INPUT nebo do FORWARD.
INPUT
Příchozí pakety, které prošly směrováním a jsou určeny nějaké lokální službě. Lze určit rozhraní, z kterého přišly. Pokud pravidla dovolí, budou předány konkrétní aplikaci.
OUTPUT
Lokálně vytvořené odchozí pakety, jenž ještě neprošly směrováním. Lze zjistit, kterým rozhraním budou zřejmě odeslány. Po směrování pokračují do POSTROUTING.
FORWARD
Pakety, které prošly směrováním a jsou určený jinému počítači. Měly by se přeposlat dál. Je známo vstupní i výstupní rozhrání. Pokud je přeposlání schváleno, pokračují do POSTROUTING. Přeposílání se musí povolit přímo v jádře.
POSTROUTING
Pakety, které prošly směrováním a opustí počítač. Místo pro změnu odchozí ip adresy.

Iptables

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:

filter
Výchozí tabulka, určená k filtrování procházejících paketů. Jsou v ní přístupné řetězce INPUT, OUTPUT a FORWARD.
nat
Tabulka používaná pro překlad adres v řetězcích PREROUTING, POSTROUTING a méně často i v OUTPUT.
mangle
V této tabulce lze měnit některé další hodnoty v ip hlavičce (TOS, TTL) a označit pakety. Značka není součástí paketu a zaniká s odchodem paketu. Pracuje se všemi pěti definovanými řetězci.
Dále je nutné v pravidlo uvést, co se má s paktem udělat. Mezi základní akce patří:
ACCEPT
Paket je schválen a pokračuje dál v cestě.
DROP
Paket je zahozen.
REJECT
Paket je zahozen a generuje se většinou icmp zpráva.
jiný řetězec
Zpracování paketu se předá jinému řetězci
RETURN
Vrátí se do předchozí řetězce a pokračuje následujícím pravidlem nebo pokud není kam se vrátit, postupuje se podle výchozího pravidla pro řetězec.
QUEUE
Předá paket uživatelskému programu.
DNAT
Mění cílovou adresu nebo port paketu.
SNAT
Mění zdrojovou adresu nebo port paketu.
MASQUERADE
Podobný SNAT, ale adresa ze zjišťuje ze zadaného rozhraní.
REDIRECT
Změní cílovou adresu na svoji, případně změní i cílový port
TARPIT
Otevře tcp spojení a okamžitě nastaví velikost okna na nula. Ignoruje pokusy vzdálené strany o uzavření spojení. Po 12-24 minutách je spojení druhou stranou násilně ukončeno.

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říklady

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

Odkazy