iptables

iptables je utilita pro nastavování firewallu integrovaného v jádře Linuxu. iptables slouží k manipulaci s tabulkami Xtables (využívané Netfiltrem - frameworkem pro síťové operace v jádře Linux) a v nich umístěných řetězců (chains) složených z pravidel. Díky tomu lze ovlivňovat průchod paketů jádrem, respektivě TCP/IP stackem. iptables nahradil starší nástroje ipchains a ipfwadm.

Tabulky

S jakou tabulkou pracujeme, definujeme přepínačem -t, pokud žádnou tabulku nespecifikujeme, použije se výchozí tabulka.

Název Využití
filter Tabulka s pravidly pro filtrování, výchozí tabulka
nat Tabulka s pravidly pro překlad adres
mangle Tabulka s pravidly pro manipulaci s hlavičkou

Řetězce

filter

Název Využití
INPUT Příchozí pakety
OUTPUT Odchozí pakety
FORWARD Procházející pakety (pokud zařízení funguje jako router)

nat

Název Využití
PREROUTING Pakety před zpracováním routovací tabulkou
POSTROUTING Pakety po zpracování routovací tabulkou
OUTPUT Pakety před odesláním

mangle

Název Využití
INPUT
OUTPUT
FORWARD Kombinace tabulek filter a nat
PREROUTING
POSTROUTING

Cíle (Targets)

ACCEPT - Propustí paket.

DROP - Zahodí paket.

QUEUE - Propustí paket do userspace.

RETURN - Vrátí paket následujícímu pravidlu předchozího řetězce

LOG - Zapíše informace o paketu do logu jádra, používá se v kombinaci s ostatními cíli, např. když potřebujeme zalogovat zahozený paket, vytvoříme jak pravidlo LOG tak DROP.

Syntaxe

iptables [tabulka] [akce] [řetězec] [shoda] [cíl]

Příkazy

-A, --append - Přidá jedno nebo více pravidel na konec zvoleného řetězce.

-D, --delete - Odstraní jedno nebo více pravidel ze zvoleného řetězce. Pravidla se volí pomocí čísla v tabulce nebo zadaním pravidla v přesném znění .

-R, --replace - Nahradí pravidlo ve zvoleném řetězci.

-I, --insert - Vloží nové pravidlo do zvoleného řetězce na zvolenou pozici. Pokud pozice není specifikována, použije se pozice 1.

-L, --list - Vypíše pravidla ve zvoleném řetězci, pokud není řetězec specifikován, vypíší se všechny řetězce.

-F, --flush - Smaže veškerá pravidla ve zvoleném řetězci, pokud žádný řetězec není specifikován, vymažou se pravidla ze všech řetězců.

-N, --new-chain - Vytvoří nový uživatelský řetězec.

-X, --delete-chain - Smaže zvolený uživatelský řetězec (výchozí řetězce smazat nelze).

-P, --policy - Volí politiku řetězce, neboli jaká akce se má vykonat s pakety, která nemají shodu se žádným pravidlem.

-E, --rename-chain - Přejmenuje zvolený uživatelský řetězec.

Parametry

-p, --protocol - Definuje protokol, seznam validních protokolů se nachází v souboru /etc/protocols, ten si můžeme vypsat například příkazem cat /etc/protocols

-s, --src, --source - Definuje zdrojovou IP adresu.

-d, --dst, --destination - Definuje cílovou IP adresu.

-i, --in-interface - Definuje vstupní interface.

-o, --out-interface - Definuje výstupní interface.

Extensions

-m - Načte modul. Pro některé příkazy je nutné načíst modul, ve kterých jsou obsaženy.

--sport, --source-port - Definuje zdrojový port, použitelné pouze v kombinaci s protokolem, co používá porty.

--dport, --destination-port - Definuje cílový port, použitelné pouze v kombinaci s protokolem, co používá porty.

--tcp-flags - Definuje TCP flag, neboli v jaké fázi se nachází TCP připojení (např. SYN, ACK, RST). Příkaz je použitelný pouze v kombinaci s protokolem TCP.

--icmp-type - Deifnuje typ zprávy protokolu ICMP (Internet Control Message Protocol), buď pomocí kódu nebo názvem, seznam validních názvu lze vygenerovat příkazem iptables -p icmp -h

--ctstate - Definuje stav, ve kterém se nachází probíhající komunikace, obsažen v modulu conntrack

--src-range - Definuje rozsah zdrojových IP adres, obsažen v modulu iprange

--dst-range - Definuje rozsah cílových IP adres, obsažen v modulu iprange

--mac-source - Definuje zdrojovou MAC adresu, obsažen v modulu mac

--comment - Umožňuje přidat komentář, obsažen v modulu comment

Tvorba prvních pravidel

Nyní už známe všechny potřebné příkazy a parametry pro tvorbu našich prvních pravidel. Než ale budeme moci začít, musíme si zkontrolovat, zda máme iptables nainstalované a máme oprávnění root, které jsou pro manipulaci s konfigurací potřebná.

Zda máme iptables nainstalované, můžeme zkontrolovat jednoduše zadáním příkazu iptables do okna terminálu. Pokud jsou iptables nainstalované správně, výstup programu by měl vypadat přibližně takto:

iptables v1.8.4 (legacy): no command specified
Try `iptables -h' or 'iptables --help' for more information.

Pokud ale terminál vrátí chybu Command 'iptables' not found, musíme si iptables nainstalovat pomocí balíčkovacího systému naší distribuce.

Teď už jsme opravdu připraveni na tvorbu našich prvních pravidel, na začátek si můžeme vytvořit například jednoduché pravidlo, které veškeré příchozí pakety z IP adresy 192.168.1.100 zahodí.

Jelikož potřebujeme komunikaci vyfiltrovat, využijeme k tomu tabulku filter, filtrujeme příchozí komunikaci, takže zvolíme řetězec INPUT. Tudíž by náš příkaz měl zatím vypadat takto:

iptables -t filter -A INPUT

Nyní musíme doplnit samotnou shodu, při které se má akce provést. Potřebujeme filtrovat dle IP adresy, takže volíme parametr -s, následně již potřebujeme doplnit samotnou akci, takže v našem případě volíme DROP pro zahození paketu. A příkaz máme sestavený:

iptables -t filter -A INPUT -s 192.168.1.100 -j DROP

Nyní si i můžeme ověřit, zda se naše pravidlo do tabulky přidalo, a to příkazem iptables -t filter -L. Pokud jsme vše udělali správně, v naší tabulce by se mělo pravidlo zobrazit přibližně takhle:

Chain INPUT (policy ACCEPT)
target         prot     opt     source                 destination
DROP         all     --         192.168.1.100         anywhere

Pokud si nebudeme nějakým příkazem jistí, můžeme využít příkaz -h a zobrazit si nápovědu a nebo pomocí man iptables a si zobrazit stránku linuxového manuálu pro iptables.

Práce s politikou

V prvním řádku výpisu řetězce si můžeme všimnout policy ACCEPT, ve výchozím nastavení iptables je nastavena politika veškeré pakety propustit. To ale nemusí být vždy žádoucí a například můžeme v naší konfiguraci potřebovat striktně povolit pouze určitou komunikaci.

Změnit politiku řetězce můžeme jednoduše pomocí příkazu -P, například nastavíme řetězec OUTPUT v tabulce filter na politiku DROP neboli pokud nějaké pravidlo neřekne jinak, odchozí pakety se zahodí. To učiníme následujícím příkazem:

iptables -t filter -P OUTPUT DROP

Aplikace NAT

NAT (Network address translation, česky: Překlad síťových adres) se používá pro překlad adres mezi sítěmi. Umožňuje nám přepsat při průchodu firewallem zdrojovou nebo cílovou IP adresu. NAT můžeme rozdělit na dva hlavní typy, a to na stavový a nestavový.

Stavový

Pracuje s tzv. connection tracking neboli v paměti udržuje stav daného připojení. Pomocí těchto informací rozhoduje o úpravě paketů náležících danému spojení. V praxi se s ním setkáme mnohem více než s nestavovým. Můžeme ho rozdělit na dva typy, a to na SNAT a DNAT.

SNAT

SNAT (Source NAT) překládá zdrojovou adresu odchozích paketů. Nejčastěji na hranici sítě převádí soukromé adresy na jednu veřejnou.

Konfigurace SNAT

Pro konfiguraci SNAT využijeme tabulku nat a řetězec POSTROUTING. V tomto řetězci vytvoříme samotné pravidlo, které zachytí správné pakety a přepíše jejich zdrojovou IP adresu.

Konfigurace může vypadat například takto:

iptables -t nat -A POSTROUTING -s 192.168.1.10 -j SNAT --to-destination 146.6.177.31
Maškaráda

Speciální druh SNAT, který automaticky přepisuje adresu odchozích paketů adresou odchozího rozhraní.

Na rozhraní eth0 jí nastavíme takto:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

DNAT

DNAT (Destination NAT) překládá na hranici sítě cílovou adresu procházejících paketů. Obvykle ho používáme pro přesměrování portů vnějšího rozhraní routeru na jeden určitý počítač/server v síti.

Konfigurace DNAT

Pro konfiguraci DNAT využijeme tabulku nat a řetězec PREROUTING. V tomto řetězci vytvoříme samotné pravidlo, které zachytí správné pakety a přepíše jejich cílovou IP adresu.

Konfigurace může vypadat například takto:

iptables -t nat -A PREROUTING -d 146.6.177.31 -j DNAT --to-destination 192.168.1.10
Přesměrování

Speciální druh DNAT, kde je přepisován pouze cílový port nikoliv IP adresa. Dá se využít například na lokální přesměrování portů.

Například takto:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

Nestavový

Upravuje každý procházející paket podle statických pravidel nehledě na stav připojení, ke kterému se vztahuje. Jeho výhodou je vysoký výkon, ale má omezenou použitelnost vzhledem k jeho statickým pravidlům.

Diagnostika pravidel

Užitečným nástrojem pro diagnostiku pravidel je v iptables cíl LOG, který nám vytvoří záznam v logu jádra. Pokud chceme pravidlo logovat, jednoduše vytvoříme identické právidlo akorát s cílem LOG. Může nám také pomoci přepínač --log-prefix který pokud umístíme za cíl nám umožní přidat k záznamu hlavičku.

Ukládání pravidel

Uložení pravidel

iptables-save -f /etc/iptables/iptables.rules

Obnova pravidel

iptables-restore /etc/iptables/iptables.rules

results matching ""

    No results matching ""