Vyhodou paketovych filtru je jejich nenarocnost na system i hardware (obligatni jednodisketove firewally bezici v RAM na 386ce), dale neni treba specialni podpory v aplikacich na nadrazenych vrstvach. Nevyhodou je nedosazitelnost vyssich protokolu (napr. autentizace uzivatele).
Aplikacni brany naopak pracuji az nekde kolem prezentacni a aplikacni vrstvy. Vetsinou funguji v kontextu client-server pozadavku jako prostrednici (analogie man-in-the-middle), tj. ze vuci klientovi vystupuji jako server a vuci serveru jako klient.
Vyhodou je moznost definovat pravidla na zaklade parametru pozadavku (zakazani porna, omezeni velikosti stahovanych souboru, autentizace uzivatele, ... ). Neni potreba specialni podpora jadra, zato vetsinou si s aplikacni branou musi rozumet aplikace.
V praxi je casto zamenovan pojem firevall za paketovy filter, nejinak tomu bude v nasledujici stati.
Projekt netfilter/iptables je firewallovy subsystem pro linuxy rady 2.4.x a 2.5.x. Prinasi moznost filtrovani paketu (packet-filteringu), jak stavoveho tak bezstavoveho (stateful/stateless), preklad sitovych adres(NAT, network address translation) a alteraci paketu (packet mangling).
Vetsina samotne funcionality je implementovana primo v linuxovem jadre (pripadne modulech), ke konfiguraci subsystemu se pak pouzivaji obsluzne binarky.
Paket pri ceste jadrem prochazi po pomyslne kostre, kterou lze naznacit zhruba takto:
network || \/ +-------------+ | PREROUTING | +-------------+ || ------------- +-------+ < input routing > ==== | INPUT | ====++ ------------- +-------+ || || local || apps +-------------+ || | FORWARD | +--------+ +-------------+ | OUTPUT | || +--------+ || -------------- || ++ ===== < output routing > ==++ || -------------- || +-------------+ | POSTROUTING | +-------------+ || \/ networkOkynka oznacena PREROUTING, POSTROUTING, INPUT, OUTPUT a FORWARD jsou tzv. chainy (retezce), coz jsou pomyslne body, kterymi paket prochazi a kde je mozne ho zpracovavavat.
PREROUTING, resp. POSTROUTING jsou retezce, do kterych prichazi paket tesne po prijeti na rozhrani resp. tesne pred odeslanim. INPUTem prochazi pakety urcene pro lokalni procesy, obdobne OUTPUTem prochazi pakety generovane lokalnimi procesy. A konecne retezcem FORWARD prochazi pakety, ktere nejsou urcene pro lokalni procesy a preposilaji se dale.
Krome techto implicitne definovanych chainu (iplicitnich, built-in) je mozne tvorit vlastni, ktere se retezi za jednotlive implicitni. Vyznam maji pro zprehledneni a zjednoduseni konfigurace paketoveho filtru. Nebo taky k zesloziteni, pokud jsou pouzivany zbytecne moc.
Pro prehlednost jsou zavadene tzv. tabulky (tables), ktere sdruzuji tyto body podle aplikovatelne funkcionality v v jednotlivych bodech (tj. kazda tabulka je jakoy podmnozina techto bodu, ktere maji tu spolecnou vlastnost, ze se v nich da aplikovat urcita funkce). Tabulky jsou implicitne zadany tyto:
filter - tabulka tykajici se filtrovani paketu, jejich zahazovani a logovani. Filtrovate pakety je mozne v INPUT, OUTPUT a FORWARD, i kdyz vyznam nekterych je dost pofiderni.
nat - tabulka starajici se o NAT, tzn. prepisovani zdrojovych a cilovych adres paketu. Rozlisujeme SNAT (prepis zdrojovych adres), DNAT (prepis cilovych adres), masquerading (nahrazenim zdrojovych adres vsech paketu jdoucich pres rozhrani adresou tohoto roahrani) a presmerovani (redirect), cimz se zde mini presmerovani paket na lokalni pocitac (de-facto specialni pripad DNATU). Nat se aplikuje v chainech PREROUTING (lze aplikovat DNAT, REDIRECT), OUTPUT (taktez DNAT,REDIRECT) a POSTROUTING (SNAT a masquerading).
mangle - tabulka umoznujici modifikaci paketu - nastavovani TTL, oznacovani (marking) paketu, nastavovani TOS pole v IP zahlavi, ap. , v chainech PREROUTING a OUTPUT.
Tak mame chainy, tabulky a pekny zmatek, co s tim dal ? Kazdy retezec obsahuje sadu pravidel, a implicitni chovani (politika, policy). Kazde pravidlo obsahuje pominku (podminky) a cil.
Podminkou muze byt libovolny parametr paketu. Hlavne tedy parametry IP (zdrojova/cilova adresa, typ protokolu vyssi urovne, vstupni/vystupni rozhrani, ...), dale pro jednotlive protokoly nizsich (arp - filtrace podle MAC adres) i vyssich urovni - TCP/UDP (zdrojovy/cilovy port, ... ), ICPM (typ zpravy), dale podle oznaceni paketu, stavu spojeni (NEW - nove spojeni, INVALID - paket nepatrici k zadnemu zpojeni, RELATED/ESTABLISHED - paket prinalezi k jiz existujicimu spojeni), UID procesu generujiciho procesu u lokalne generovanych paketu etc.
Cilem muze byt:
Strucne o poslednim bode: cil LOG a ULOG zpusobi zapis o paketu do logu, prosterdnictvim syslogu prip. predanim do userspace, ma vyznam prevazne v tabulce filter. MARK,TOS a TTL urcuji alteraci paketu, pouzitelne pouze v tabulce mangle. SNAT, DNAT, MASQUERADE a REDIRECT jsou aplikovatelne v tabulce nat, SNAT a REDIRECT v chainu PREROUTING, DNAT a MASQUERADE v POSTROUTING a OUTPUT. Konecne REJECT je obdoba DROP, jenom je odesilateli poslana ICMP zprava.
Minuly odstavec je sice znacne neprehledny, ale jakekoliv delsi rozepisovaniu by bylo pouhym prekladanim manove stranky, coz asi neni ucelem ...
K vetsine cilu se vazi nejake povine ci volitelne parametry, detaily si najdete v nejakem z nescetnych tutorialu. Nakonec zjistite, ze nad man iptables
neni.
Implicitni politikou muze byt jeden z vyse uvedenych cilu, krome chainu (implicitnich i uzivatelskych). Politika muze by definovana pouze u implicitnich chainu.
Filter
# defaultne nenechame nic projit ani odejit iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP # povolime Echo Request, Echo reply, Dest Unreachable a Time Exceeded 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 # zakazem nesmyslne pakety zvenci # v nat je to proto, aby se previdlo nemuselo opakovat zvlast pro INPUT a FORWARD iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP iptables -t nat -A PREROUTING -i eth0 -s 10.0.0.0/8 -j DROP # zkusime si udelat vlastni chain, ktery bude zvenci # poustet pouze pakety prislusici nejakemu spoojeni, nove jenom zevnitr iptables -N block iptables -A block -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A block -m state --state NEW -i ! ppp0 -j ACCEPT iptables -A block -j DROP # ... a navazeme ho na INPUT a FORWARD. iptables -A INPUT -j block iptables -A FORWARD -j block
NAT
# jednoducha maskarada - zamaskujem vse, co jse pres eth0 iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE # a nebo zamaskujeme pouse adresy 10.0.0.0/24 iptables --table nat --append POSTROUTING --source 10.0.0.0/24 -j SNAT --to-source 147.251.315.408 # chceme presmerovat pozadavky z firewallu na zanimstojici WWW iptables -t nat -A PREROUTING -p tcp -d 11.22.33.44 --dport 80 -i eth0 -j DNAT --to 192.168.0.2:80 # a nebo na port 8080, kde ceka proxy. # v principu to nemusi byt uplne dobry napad, nefunguje napr HTTP autentizace iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
Mangle
# nastavime znacku paketu jdoucich na port ssh iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 2 # pohrajeme si s TTL paketu iptables -t mangle -A PREROUTING -i eth0 -j TTL --ttl-set 64 iptables -t mangle -A PREROUTING -i eth1 -j TTL --ttl-dec 1 iptables -t mangle -A PREROUTING -i eth2 -j TTL --ttl-inc 1
ipfwadm
. Existovaly chainy INPUT, OUTPUT a FORWARD s podobnou semantikou jako stejnojmene chainy u netfilteru, a chain ACCOUNT, ktery se staral o uctovani a (vicemene) maskarady ci presmerovani. Akce aplikovatelne na paket byly accept, reject a deny (= DROP u netfilteru). Pakety bylo lze filtrovat podle zdrojove/cilove adresy, protokolu (ne obecne, pouze pevne definovana podmozina), zdrojoveho/ciloveho portu (TCP,UDP), rozhrani a TCP ACK flagu.
V jadrech 2.2.x se objevil balicek PCXFirewall - pomerne sofitikovany generator pravidel pro iptables, napsany v perlu. Je treba se v iptables trosku orientovat, ale poskytuje temer vsechny moznosti co standardni distribuce Netfilteru.
FireHOL - velice jednoduse konfigurovatelny paket filter (se stavovou inpekci). Ovladany pomoci jednoduchouckeho metajazyka, pravidla se definuji spise z aplikacniho pohledu. Neumi NAT a packet mangling.
Dalsim z rady je skriptik iptables-control, ktery na zaklade bash-like konfiguraku vytvori (zcela nacekane) pravidla pro netfilter. Jako tresnicku podporuje port forwarding.
Zajimava hracka je i IPTables log analyzer, ktery logy z netfilteru zpracovava do HTML podoby a umoznuje tak snazzsi orientaci ve vystupech filtru.
Existuje spousta dalsich, mensich ci vetsich podobnych projektu, pocinaje malymi skriptiky konce pomerne rozsahlymi projekty. Jsou k videni i graficke nadstavby. Stoji za to se porozhlednout i po doplnujicich utilitkach, ktere cini dobre nastaveny firewall alespon castecne pouzitelnym.
ipchains
, jako vylepsena verze ipfwadm. Oproti ipfwadm umi jiz vytvaret vlastni retezce, pouzit hvezdickovou notaci u nazvu rozhrani, nove lze pracovat s fragmentovanymi pakety, filtrovat ICMP podle typu aj. Vytratil se uctovaci retezec, funkcionalita se rozdelila do ostatnich built-in chainu. Pribyly dalsi akce: Fakt to musim psat rucne ?
Udrzovat firewall ktery zpracovava vic nez cca 30 pravidel muze bytr vyseuvedenym zpusobem minimalne casove narocne, ne-li zbytecne slozite. Proto existuje spoustu apliaci, ktere se honosi nazvem firewall, a ktere pravidla pro IPtables tvori za vas.
Paketove filtry na BSD
Na FreeBSD zajistuje nastaveni firewallu utilitka ipfw
. V soucasne dobe je k dispozici rozsirena verze ipfw2, ktera oproti sve starsi verzi prinasi radu rozsireni. Oproti netfilteru zde neni zadna kostra, ale funkcionalita je v zasade stejna. Narozdil od netfilteru je implicitne po instalaci velice restriktivne nastaven, s cimz je potreba pocitat treba u instalaci na dalku. Pekny navod jak na to je na http://www.freebsd.cz/~michal/doc/ipfw.html.
Jiny uhel pohledu
Par obecnych proverenych principu:
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -P INPUT DROP; iptables -P OUTPUT DROP; iptables -P FORWARD DROP
iptables -C
. Sice jsem to jeste nevidel fungovat, ale manualy se tim chlubi.
Zdroje a odkazy
serial "stavime firewall" na R00tu (1. dil, 2. dil a 3. dil)
jeden ,
druhy web o bezpecnosti
firewally - kapitola z FreeBSD handbook
http://www.freebsd.cz/~michal/doc/ipfw.html - ipfw cesky a srozumitelne
man iptables
- doporucuji precist
perlipq - PERLovy modul, implmentace API pro zpracovani paketu v userspace (iptables)