Firewall je sieťové zariadenie, ktoré má za úlohu kontrolovať a riadiť(obmedzovať) sieťový prenos. Používa sa na rozhraniach sietí, prípadne na koncových staniciach. Keď oddeluje dve siete, tak má zväčša za úlohu obmedziť tok dát z jednej siete do druhej tak, aby bola jedna sieť "chránená" pred druhou - zvačša privátna pred verejnou. Ďalej sa môže používať na obmedzovanie služieb v sieti(stanici). Môže to byť špecializovaný hardware, alebo software.
Koncom 80-tych rokov sa objavujú prvé firewally v podobe packetových filtrov. Vznikajú ako odpoveď na útoky, ktoré sa začali objavovať v stále viac sa rozširujúcej počítačovej sieti. Z týchto sa neskôr stávajú stavové firewally, ktoré dokážu sledovať sieťovú komunikáciu v širších súvislostiach ako sú jednotlivé packety. Začiatkom 90-tych rokov vznikajú firewally operujúce na vyšších vrstvách OSI - konkrétne aplikačné brány.
Ako packetový filter sa označuje firewall, ktorý svoje rozhodnutia zakladá na tom, čo obsahujú hlavičky packetov. Firewall si môže pozrieť hlavičku každého prechádzajúceho packetu a na základe jej obsahu(ip adresy, porty, mac, ...) sa rozhodnúť čo s daným packetom spraví. V základe ma na výber zamietnuť alebo prijať(preposlať) ho. Medzi výhody packetových filtrov patrí jeho jednoduchosť(rýchlosť, bezstavovosť, transparentnosť), naopak medzi nevýhody jeho obmedzenosť iba na hlavičky packetov - ktoré nemusia byť vždy spolahlivé. Tento typ firewallu nájdeme skoro všade a v podstate zaň môžme označiť aj súbor hosts.
Aplikačné brány sú firewally pracújúce na vyššej úrovni zaujímajúce sa priamo o obsah sieťovej komunikácie. Medzi komunikáciu klient-server sa stavajú ako proxy server, kde obe strany komunikujú výlučne s bránou. Medzi hlavné výhody patrí to, že sa pred ním nedá skryť žiadny sieťový tok a v prípade "drsných policy" je naozaj bezpečný. Nevýhody začínajú tým, že je pomalý, viazaný na aplikácie a musia sa mu prispôsobiť aj klientské aplikácie.
Stavový packetový filter je typ firewallu, ktorý taktiež pracuje s hlavičkami jednotlivých packetov, ale narozdiel od klasického packetového filtru dokáže zaraďovať jednotlívé packety do určitých spojení a aj na základe toho sa rozhodovať. Medzi výhody patrí určitý nárast výkonu v tom smere, že nieje potrebné pre každý packet vyhodnocovať množstvo pravidiel, ale stačí nám to, že samotné spojenie bolo povolené a daný packet patrí doň. Nevýhoda sa môže objaviť pri širších systémoch, kde operuje viac firewallov - tieto si medzi sebou musia vymienať tabulku otvorených spojení. Ak touto tabulkou náhradný firewall nedisponuje, všetky packety v jemu neznámom spojení zahodí(samozrejme iba ak je tak nastavený).
Ďalším rozširením firewallov sú rozšírenia packetových filtrov, ktoré okrem hlavičky zaujíma aj obsah packetov. Takto sa dajú odhaliť tunelované spojenia, pokusy o útoky a podobne.
Network address translation - slúži na preklad zdrojových a cieľových adries. To sa využíva, keď sa lokálna sieť pripája na internet pomocou zdielanej verejnej IP adresy. Táto istá metóda sa používa aj na presmerovávanie pomocou zmien ip/portov.
Iptables sú len užívateľská aplikácia, ktorá umožňuje jednoducho nastavovať a obsluhovať samotný firewall, ktorý sa nachádza v jadre - netfilter. Iptables, ako názov napovedá, sa v podstate skladá z viacerých tabuliek, ktoré obsahujú rozhodovacie pravidlá. Každá tabulka ďalej obsahuje zopár séríí pravidiel - chains. Tieto existujú určité defaultné, ale môžu byť vytvorené aj nové.
Defaultne iptables obsahuje tri hlavné tabulky a ich základné reťazce pravidiel:
- nat: PREROUTING, POSTROUTING, OUTPUT
- filter: INPUT, OUTPUT, FORWARD
- mangle: všetky hore uvedené
Každý packet sa postupne vyhodnocuje jednotlivými pravidlami v jednotlivých tabulkách. Prichádzajúci packet sa skontroluje pomocou tabulky mangle, kde
sa mu môžu pridávať rôzne príznaky, ktoré sa dajú využiť neskôr - napríklad pre qos. Ďalej sa skontroluje reťazcom PREROUTING v tabulke NAT. Jednotlivé
pravidlá v reťazci sa prechádzajú po riadkoch a ich poradie je teda dôležité. Nasleduje routovacie rozhodnutie a na základe neho sa buď kontroluje INPUT(pre lokálne procesy)
alebo FORWARD(ak sa packet forwarduje) v tabulke filter(pozn.: aj tu sa predtým prechádza mangle tabulka - ak existuje). Novovzniknutý lokálny packet najprv prechádza
tabulkami mangle, nat a potom filter(vzdy retazce OUTPUT). Ten sa rovnako ako forwardovaný packet sa podrobí dalšiemu routovaciemu rozhodnutiu(kam má ísť) a nakoniec sa "prebehne"
pravidlami v reťazci POSTROUTING v tabulke nat.
S tabulkami manipulujeme pomocou príkazu iptables. Niektoré z jeho základných parametrov sú:
Jednotlivé riadky v reťazcoch sa porovnávajú pomocou určitých pravidiel. Niektoré sú:
--protocol -p číslo, alebo meno protokolu --source -s zdrojová adresa --destination -d cieľová adresa --in-interface -i vstupný interface --out-interface -o výstupný interfaceMôžme na ne používať negáciu(!). Ďalšie podmienky sa dajú kontrolovať pomocou rôznych "modulov", ktoré zvolíme parametrom -m a následne môžme využiť pravidlá, ktoré poskytujú. Napríklad:
limit (--limit,--limit-burst) state (--state) /NEW,ESTABLISHED,RELATED,INVALID/ time (--timestart, --timestop, --datestart, --datestop, --days)
ACCEPT - prijme packet a nepozerá ďalšie riadky DROP - zahodí packet REJECT - zahodí packet s tým, že o tom informuje odosielateľa DNAT/SNAT - mení zdrojové/cieľové adresy packetu LOG - zapíše informáciu do logov RETURN - vráti sa k predchádzajucemu reťazcu**pre lepšie spravovanie tabuliek si môžme vytvárať vlastné reťazce pravidiel, do ktorých sa dostaneme pomocou GOTO (-g, --goto, alebo -j GOTO)
Nastavenie defaultnej "policy" pre prichádzajúce packety na DROP (odporúčané)
iptables -P INPUT DROPPresmeruje všetky spojenia na port 8080 na http server umiestnený v lokálnej sieti
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8080 -j DNAT --to-destination 10.0.0.1:80Povolí ICMP správy typu 8 a 0 (ping)
iptables -A INPUT -p ICMP -i eth0 --icmp-type 0 -j ACCEPT iptables -A INPUT -p ICMP -i eth0 --icmp-type 8 -j ACCEPT