Firewall je hardware alebo software, ktorého úlohou je kontrolovať tok dát v sieti medzi zónami s rozdielnou dôveryhodnosťou (napr. vnútorná sieť podniku vs. Internet). Musí zamedziť takej komunikácii, ktorá je v rozpore s bezpečnostnou politikou.
Dôvod prečo chceme obmedziť prístup k rôznym službám môže byť buď zamedzenie využitia týchto služieb neoprávnenými užívateľmi alebo zamedzenie zneužitia potencionálnych chýb v programoch, ktoré tieto služby poskytujú. Spravidla by sme sa teda mali snažiť ponechať prístupné len tie služby, ktoré skutočne potrebujeme a všetko ostatné zakázať.
NAT = network address translation, čiže preklad sieťových adries. Ide o funkciu, ktorá je často pridružená k firewallu. Vykonáva sa totiž v rovnakých sieťových vrstvách ako filtrovanie paketov. Umožňuje meniť zdrojové a cieľové IP adresy prípadne aj porty paketov prechádzajúcich firewallom. Najčastejšie sa táto technika používa na skrytie niekoľkých neverejných IP adries za jednu verejnú IP adresu. Dá sa takisto presmerovať komunikácia na iné porty alebo stroje. Táto technika čiastočne rieši nedostatok IPv4 adries a čiastočne zvyšuje bezpečnosť, pretože zvonku sú stroje s neverejnou IP adresou priamo neprístupné, čo ale na druhej strane znemožňuje použitie aplikácií na týchto strojoch.
Linuxové jadro obsahuje paketový filter od verzie 1.1. Bol v ňom použitý najprv ipfw zo systému BSD a na linux platformu ho portoval Alan Cox.
Vo verzii 2.0 pribudol užívateľský nástroj ipfwadm pre nastavovanie filtrovacích pravidiel. ipfwadm umožnoval iba nastaviť zoznam pravidiel, ktoré popisovali, ktorých paketov sa pravidlo týká a čo s takým paketom sa má urobiť.
Vo verzii 2.2 pribudli naviac ipchains (prepísané ipfw), ktoré umožňovali naviac prácu s inými protokolmi než TCP, UDP a ICMP, umožňovali reťaziť pravidlá.
S jadrom 2.4 prišla opät zmena v podobe netfilter/iptables, ktoré sa používajú až dodnes (2.6). Kód iptables bol napísaný od nuly. Pridáva vlastnosť stavového filtra, má prepracovanejší NAT, vylepšenie reťazenia pravidiel.
Netfilter je názov projektu a zároveň názov celej sady kernel modulov a user-space programov umožňujúcich manipuláciu s paketmi. Iptables je názov user-space programu, ktorým sa celý firewall konfiguruje.
Schéma ako prechádza paket Netfiltrom:
Pakety putujú Netfilterom pevne danou cestou a dajú sa kontrolovať v piatich rôznych fázach:
PREROUTING
Nové, prichádzajúce pakety, ktoré ešte neprešli smerovaním. Je u nich možné zmeniť cieľovú IP adresu a port. Po smerovaní pokračujú buď do INPUT alebo do FORWARD.
INPUT
Prijaté pakety, ktoré prešli smerovaním a sú určené nejakej lokálnej službe. Dá sa určiť rozhranie, z ktorého prišli. Pokiaľ pravidlá dovoľujú, budú predané žiadanej aplikácii.
OUTPUT
Lokálne vytvorené odchádzajúce pakety, ktoré ešte neprešli smerovaním. Dá sa zistiť, ktorým rozhraním budu zrejme odoslané. Po smerovaní pokračujú do POSTROUTING.
FORWARD
Pakety, ktoré prešli smerovaním a sú určené inému počítaču. Mali by sa poslať ďalej. Je známe vstupné a výstupné rozhranie. Pokiaľ je preposlanie schválené, pokračujú do POSTROUTING. Preposielanie sa musí povoliť priamo v jadre.
POSTROUTING
Pakety, ktoré prešli smerovaním a opustia počítač. Miesto pre zmenu zdrojovej IP adresy.
Iptables sú nástroj ako nastaviť Netfilter. Určujú pravidlá, na základe ktorých Netfiler pracuje s paketmi. Iptables operujú s tromi tabuľkami. Každé pravidlo je v niektorej tabuľke a je k nemu zároveň priradená akcia, ktorá sa vykoná s paketom, ak splňuje pravidlo. Ak sa nenájde žiadne pravidlo, tak sa vykoná implicitná akcia s paketom.
# Zahodí všetky pakety, ktoré prišli z IP adresy 192.168.0.1 cez interface eth0 a sú z protokolu TCP.
$ iptables -A INPUT -p TCP -i eth0 -s 192.168.0.1 -j DROP
# Vymaže druhé pravidlo z tabuľky filter z reťazca FORWARD
$ iptables -t filter -D FORWARD 2
# Presmeruje všetky spojenia na port 8080 na 10.0.40.2:80
$ iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8080 -j DNAT --to-destination 10.0.40.2:80
# Ak sa v reťazci OUTPUT objaví TCP segment, ktorý bude mať v úmysle opustiť počítač cez rozhranie eth1 a jeho odosielateľom bude 192.168.0.1 port 3000
# a príjemcom port 25 adresy 192.168.0.2, tak ho zahodí.
$ iptables -A OUTPUT -i eth1 -p TCP -s 192.168.0.1 --sport 3000 --d 192.168.0.2 --dport 25 -j DROP
NAT
$ iptables -t nat -A POSTROUTING -s 192.168.1.0/255.255.255.0 -o eth1 -j SNAT --to-source 213.81.158.226
ICMP
$ iptables -A INPUT -p ICMP -i eth0 --icmp-type 0 -j ACCEPT
$ iptables -A INPUT -p ICMP -i eth0 --icmp-type 3 -j ACCEPT
$ iptables -A INPUT -p ICMP -i eth0 --icmp-type 8 -j ACCEPT
$ iptables -A INPUT -p ICMP -i eth0 --icmp-type 11 -j ACCEPT
Príklad na stavový filter:
iptables -P FORWARD DROP
iptables -A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth1 -j ACCEPT
Spoofing:
iptables -N spoofing
iptables -A spoofing -s 192.168.0.0/16 -j DROP
iptables -A spoofing -s 172.16.0.0/12 -j DROP
iptables -A spoofing -s 10.0.0.0/8 -j DROP
iptables -A INPUT -i eth0 -j spoofing
iptables -A FORWARD -i eth0 -j spoofing