Firewally

Matej Buday, xbuday@fi.muni.cz

Obsah

Firewall

Čo je firewall

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.

História

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.

Druhy firewallov

Packet filter

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.

Application layer firewall

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.

Stateful firewall

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šie...

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


NAT

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

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

tabulky a postup rozhodovania

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.

práca s iptables

S tabulkami manipulujeme pomocou príkazu iptables. Niektoré z jeho základných parametrov sú:

Pre ďalšie viď. manuálové stránky iptables.
Pravidlá máme najčastejšie uložené v štartovacích skriptoch, respektíve iných súboroch, ktoré sa pri sputení systému nahrajú (iptables restore).

rozhodovacie pravidlá

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ý interface
Môž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)

Ak sa splnia zadané podmienky, tak sa vykoná akcia uvedená za parametrom -j(--jump), ktorá môže byť napríklad:
  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)

príklady

Nastavenie defaultnej "policy" pre prichádzajúce packety na DROP (odporúčané)

	iptables -P INPUT DROP
Presmeruje 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:80
Povolí 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

Literatura