Firewally, bezpecnost

Pavel Cibulka, xcibulka@fi.muni.cz


Obsah


Typy firewallu

Paketovy filtr
NAT - Network Address Translation
Proxy, Aplikacni brany

Paketovy filtr

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 - Network Address Translation

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.

Proxy, Aplikacni brany

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 v Linuxu

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 |
                 +-------+         \-------/        +--------+


iptables

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.

filter

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

stavovi filtr

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

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.

mangle

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


Firewall na BSD

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.


Odkazy

Packet Filtering HOWTO
NAT HOWTO
Stavíme firewall (1) na Rootu
Stavíme firewall (2) na Rootu
Stavíme firewall (3) na Rootu