Paketovy filtr
NAT - Network Address Translation
Proxy, Aplikacni brany
Filtruje pakety na zaklade IP hlavicky, tedy ip adresy odesilatele a prijemce
protokolu, portu a taky sitovych karet, kterymi paket vstoupil nebo hodla opustit
pocitac. Podle danych pravidel pak filtr paket pusti dale nebo zahodi. Jsou velmi rychle,
protoze pouzivaji jen ip hlavicky a tabulky s pravidly. Neni potreba nastavovat
aplikace jako u proxy. Nepodpuruje praci s uzivateli.
Dnes soucasti paketoveho filtru bavy taky stavovy filtr, ktery dokaze urcit zda paket nalezi
jiz existujicimu spojeni nebo navazuje nove spojeni. Zvysuji narocnost na vykon, protoze
pristupuji k celemu paketu a potrebuji si uchovavat stavove informace.
NAT slouzi ke zmene ip adres a portu v IP hlavickach. NAT muzeme rozdelit na SNAT a DNAT. Source NAT meni zdrojovou ip adresu paketu, provadi se az tesne pred odeslanim paketu do site. Destination NAT meni cilovou ip adresu , provadi se hned po prijeti paketu. Z vnejsku neni mozno primo pristupovat do site, komunikace musi byt vytvorena zevnitr.
Veskera komunikace mezi klientem a servrem probiha prosdtrednictvim proxy servru. Proxy servr kominakaci zpracovava a muze do ni i zasahovat. Pristupuje ke spojeni na zaklade uzivatele. Kazda sluzba potrebuje vlastni servr napr HTTP proxy. Proxy umoznuje cachovat odpovedi servru pro dalsi pouziti.
Firewall je zabudovan od verze jadra 1.1 v samotnem jadre linuxu. Nejpreve se pouzival ipfw z BSD.
Od verze jadra 2.0 se zacina pouzivat ipfwadm. Od verze jadra 2.2 se pouziva taky ipchains
(zavadi pravidla podobne jako nasledujici iptables). Od verze 2.4 se pouziva Netfilter.
Netfilter byl napsan cely od nuly, pouziva modul iptables. Je zpetne kompaktibilni s
ipfwadm a ipchains. Sklada se z paketoveho filtru vcetne stavoveho a z NAT.
Schema:
/-----\ /-----\ < vstup > < vstup > \-----/ \-----/ | ^ | | V DNAT | SNAT +------------+ +-------------+ | PREROUTING | | POSTROUTING | +------------+ +-------------+ | ^ | | V | /---------\ +---------+ | < routovani > ----> | FORWARD | -------->| \---------/ +---------+ | | | | | V | +-------+ /-------\ +--------+ | INPUT |------> < program > ----->| OUTPUT | +-------+ \-------/ +--------+
K praci s pravidly slouzi nastroj iptables. Tyto pravidla jsou uchovavana ve trech tabulkach.
filter - pravidla pouzivana pro filtrovani paketu, tabulka je nastavena jako implicitni
nat - pravidla tykajici se SNAT a DNAT
mangle - pravidla pro zmenu priznaku paketu
Tabulky jsou po nabootovani prazdne a policy je nastavene na ACCEPT. Proto se musi plnit
ve startovacich skriptech.
Tabulka filter obsahuje tri skupiny pravidel INPUT, OUTPUT a FROWARD.Jadro urci zda je
paket urcen pro tento pocitac. Pokud ano, provede filtrvani podle pravidel INPUT. Pokud
je paket pro nekoho jineho a pocitac ma povoleny forwarding, pak je paket filtrovan podle
pravidel FORWARD a pripadne zahozen nebo preposlan. Pokud neni povoleny forwarding je
automaticky zahozen. Pokud paket pochazi z tohoto pocitace, pak je filtrovan podle pravidel
OUTPUT.
Kazde pravidlo se sklada z podminky a akce. Pokud paket splnuje podminku provede se akce
a retezec se jiz s dalsimi pravidly neporovnava. Pokud paket projde vsemi pravidly, aplikuje
se na nej policy. Policy je posledni pravidlo a muze byt nastaveno jako ACCEPT(paket prosel)
nebo DROP(paket byl zahozen) coz je doporucovano.
K nastaveni policy nam slouzi parametr -P. Prikazi mohou vypadat nasledovne:
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
Parametry pro praci s pravidly:
-N -vytvori novou skupinu pravidel
-I -vlozi nove pravidlo na zadane misto
-R -nahradi pravidlo na danem miste
-D -odstrani pravidlo na danem miste
-A -prida nove pravidlo
Parametry specifikujici podminky:
-s -zdrojova adresa napr: -s 192.168.0.1
-d -cilova adresa
-i -vstupni zarizeni napr: -i eth1
-o -vystupni zarizeni
-p -protokol napr: -p TCP
-sport -port zdrojove adresy
-dport -port cilove adresy napr: --dport 80
V podminkach muzeme pouzivat i negaci - ! napr: -p !TCP
Parametr specifikujici akci je -j napr:
-j ACCEPT paket prosel
-j DROP paket bude zahozen
-j REJECT paket bude zahozen a odesiletel bude o tom informovan
-j LOG zahlavi paketu je zapsano do logu
Cely prikaz pak muze vypadat treba takto:
iptables -A INPUT -p TCP -i eth0 -s 192.168.0.1 -j DROP
Jadro pak zahodi vsechny pakety, ktere prisli z IP adresy 192.168.0.1
prez interface eth0 a jsou protokolu TCP.
Povoleni ICMP zprav Echo reply, Echo request, Destination unreachable, Time exceeded:
iptables -A INPUT -p ICMP --icmp-type 0 -j ACCEPT
iptables -A INPUT -p ICMP --icmp-type 3 -j ACCEPT
iptables -A INPUT -p ICMP --icmp-type 8 -j ACCEPT
iptables -A INPUT -p ICMP --icmp-type 11 -j ACCEPT
Povoleni paketu prichazejici pres systemove rozhrani:
iptables -A INPUT -p ALL -i lo -j ACCEPT
Nastaveni filtrovani odchozich zprav:
iptables -A OUTPUT -p ALL -s 127.0.0.1 -j ACCEPT
iptables -A OUTPUT -p ALL -s 192.168.0.1 -j ACCEPT
iptables -A OUTPUT -j LOG
Kazdy paket je zarazen do jedne z kategorii:
NEW - paket otevira nove spojeni
ESTABLISHED - paket je soucasti jiz otevreneho spojeni
RELATED - paket souvisi s jiz existujicim spojenim
INVALID - paket nepatri k zadnemu spojeni
Muzeme napriklad prijmat jen pakety, ktere patri k jiz existujicimu spojeni a nikoliv ty,
co navazuji nove.
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
Pro rozpoznani ftp komunikace a nasledne zarazeni paketu do ESTABLISHED je nutne do jadra
pridat modul ip_conntrack_ftp. Tento modul dokaze z navazovaneho spojeni odposlechnot
dohodnutou kombinaci portu.
Nat slouzi k prepisu IP hlavicek paketu prochazejici pres firewall. Tabulka nat
je aktivni jen pro prvni paket noveho spojeni. Pravidla v tabulce
nat jsou v podobnem formatu jako v tabulce filtr. Pokud paket vyhovi podmince bude
zmenen podle daneho vzoru. Tabulka nat obsahuje tri skupiny pravidel PREROUTING,
POSTROUTING a OUTPUT. V praxi se ovsem OUTPUT temer nepouziva.
Zmena IP adresy odchozich paketu:
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 192.168.0.1
Pokud IP adresu predem nezname muzeme pouzit prikaz:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Presmerovani prichozich paketu:
iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth0 -j DNAT --to 192.168.0.1:80
Presmeruje vsechny pozadavky na WWW servr.
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3128
Presmerovani portu.
Pomoci tabulky mangle muzeme oznacit paket, ale znacka neni soucasti paketu, po opusteni
pocitace zanika.
iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 2
Dale muzeme zmenit TOS paketu nebo TTL.
iptables -t mangle -A PREROUTING -p TCP --dport 22 -j TOS --set-tos 0x10
iptables -t mangle -A PREROUTING -i eth0 -j TTL --ttl-dec 1
BSD pouziva firewall IPFW. Pravidla se spravuji pomoci prikazu ipfw. Pravidlo pridame
pomoci add, mazeme pomoci delete a vypisujeme pomoci show.
Muzeme provadet akce:
allow - propusti paket
deny - zahodi paket
fwd - presmeruje paket
Muzeme specifikovat podminky:
from - urceni puvodu (protokol, zdrojova adresa, port)
to - urceni cile (protokol, zdrojova adresa, port)
Priklady:
ipfw add deny tcp from erigona.lab.fi.muni.cz to thoe-beta.lab.fi.muni.cz 1000
Zahodi tcp pakety pochazejici z erigona a smerujici na thoe-beta port 1000
ipfw add fwd 192.168.0.1,80 log tcp from any to any 80
Presmeruje vsechny pozadavky na www servr.