Firewall je tá casť sieťového zariadenia,ktorého hlavným poslaním má byť blokovanie filtrovanie nežiadúcej komunikácie od žiadúcej ktorá cezeň prechádza. Ak má zariadenie operačný systém, býva firewall často jeho súčasťou.Firewall väčšinou robí toto filtrovanie pomocou sledovania jednotlivých packetov sieťovej vrstvy. Tento druh firewall-u sa nazýva paket-filter.
Linux obsahuje firewall už od verzie 1.1, vo verzii 2.4 však prešiel kompletným prepisom. Odvtedy sa jeho architektúra v podstate nemení. Ide o statefull packet filter, pričom net-filter je framework call-backov v jadre naviazaných na sieťové interfacy ktoré môžu využívať ostatné kernel moduly. Netfilter potom ako svoj backend používa kernel modul ip_tables. Iptables je tiež názov administrátorského programu, ktorý slúži na nastavovanie packet-filterovacích pravidiel.
Ip_tables fungujú na princípe niekoľkých tabuliek ktoré obsahujú takzvané tzv. chain-rules. Každé pravidlo, ktoré je súčasťou reťaze musí obsahovať skok -j TARGET. TARGET môže byť buď ďalšia reťaz v tabuľke, alebo jedna zo špeciálnych hodnôt:
Na wikipedii je pekný graf popisujúci náväznozť jednotlivých tabuliek (v ip_tables je v network layer)
Na samotné editovanie tabuliek a reťazí slúži príkaz iptables
, ktorý sa píše vo formáte iptables -t [tabulka] [prikaz] ...
.
Možné príkazy sú:
Dôležité pravidlá:
-t tabuľka # tabuľka, ktorá sa má použiť
-A reťaz pravidlo # pridá pravidlo na koniec reťaze
-I reťaz [poradie] pravidlo #vloží pravidlo
-D reťaz poradie #vymaže pravidlo
-L [reťaz] #vypíše pravidlá
-F [reťaz] #vymaže všetky pravidlá
-N reťaz #definuje reťaz
-X [reťaz] #zruší reťaz
-P reťaz cieľ #nastaví default cieľ
Pravidiel je samozrejme oveľa viac, Na ďalšie pravidlá odporúčam pozrieť manuálovú stránku.
Pre samotné filtrovanie je samozrejme najdôležitejšia tabuľka FILTER, táto je aj v iptable nastavená ako predvolená.
Príklad použitia, kde zakážeme všetku komunikáciu a potom povolíme len ssh prístup z rovnakej siete a http od hocikiaľ:
-p [!] protokol #protokol sieťovej vrsty:tcp,udp ...
-s [!] adresa/maska #zdrojová IP adresa
--sport port #len tcp,zdrojový port
-d [!] adresa/maska #cieľová IP adresa
--dport port #len tcp,cieľový port
-i [!] interface #vstupný interface
-o [!] interface #výstupný interface
-j TARGET #cieľ pravidla
iptables -F
iptables -P INPUT DROP
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -s 192.168.0.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
Pre potrebu prekladu adries sa používa NAT. Sú dva hlavné prípady, pre použitie NAT-u, jedným je klient vo vnútornej sieti (napríklad v domácnosti pri zdielanom internetovom pripojení).Druhým je server vo vnútornej sieti, ktorého službu ale chceme publikovať aj do vonkajšej siete. V iptable tabuľka nat sa nezaoberá kontrolou packetov, preto je pri nastavovaní preposielania dobré premýšlať aj nad forward pravidlami v tabuľke filter. Pomocou nat tabuľky sa dá nastaviť aj port-forwarding.
Príklad source nat, kde sa mení zdrojová ip-addresa:
Príklad destination nat,kde sa mení cieľová adresa:
## Zmeň zdrojové adresy paketov prichádzajúcich z ethO na 1.2.3.4
# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 1.2.3.4
## Zmeň cielové adresy paketov prichádzajúcich na port 80 na 5.6.7.8, port 8080. Tu ide o portforwarding.
# iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth0 -j DNAT --to 5.6.7.8:8080