Paketové filtry
Václav Fiala, xfiala1@fi.muni.cz
Obsah
Typy firewallů
- Aplikační brány (proxy) - pracují na aplikační vrstvě. Používany většinou pro sledování a filtrování provozu směrem ven ze síťe. 2 spojení: klient-proxy, proxy-cíl požadavku. Většinou vyžadují spolupráci aplikace/změny v nastavení. Specializovaný démon pro jednotlivé služby. Často umožňují autentizaci uživatelů. Nejobviklejším příkladem jsou http proxy (cache), které jsou někdy požívány transparentně i na straně serveru pro snížení záťeže systému.
- Paketové filtry - pracují na síťové vrstvě. Posuzují pakety nezávisle. Z toho plynou jejich výhody i omezení - rychlejší, méně náročné, ale bez autentizace uživatelů a informací o spojení specifických pro konkrétní službu.
- Stavová inspekce (state-full inspection) - kombinuje výhody obou přístupů
Paketové filtry v linuxu
Jsou implementovány v jádře. Postupně se vyvíjely.
Nástroje pro konfiguraci paketového fitru:
- ipfwadm - jádra řady 2.0
- ipchains - jádra řady 2.2
- iptables - jádra řady 2.4
iptables a netfilter
Download / dokumentace: www.netfilter.org
Základní moduly součástí distribuce jádra řady 2.4. Dostupná další rozšíření
(moduly/patche).
Konfiguraci iptables (netfilteru) tvoří tři základní tabulky: nat, mangle a
filter. Každá z nich obsahuje řetězce pravidel (chainy). Paket procházející
chainem se postupne testuje proti levým stranám jednotlivých pravidel a v
případě shody je uplatněn cíl pravidla. Pro daný typ cíle můžeme specifikovat
další upřesňující parametry. Každá z tabulek obsahuje předdefinované
chainy, k nimž může uživatel přidávat další vlastní. Pro každý předdefinovaný
(built-in) chain lze definovat policy - cíl, který není user-defined chainem
a je uplatněn v případě, že není splněno žádné z pravidel nebo je splněno
pravidlo s cílem RETURN. Pro user-defined chainy je implicitní 'policy' vždy
RETURN.
Schéma průchodu paketu systémem:
--------
|Vstupní | ________
|rozhraní| / \
-------- / \/
\/ | --------
---------- | / INPUT \
/PREROUTING\ | \ filter /
\ mangle / | --------
---------- | \/
|| | ---------
\/ | | Local |
---------- | | process |
/PREROUTING\ | ---------
\ nat / / \/
---------- / --------
|| / / OUTPUT \
\/ / \ mangle /
--------- / --------
| Input |/ \/
| routing | --------
--------- / OUTPUT \
|| \ nat /
\/ --------
--------- \/
/ FORWARD \ --------
\ filter / / OUTPUT \
--------- \ filter /
|| --------
|| \/
|| --------
|| | Output |
\/ | routing|
----------- --------
/POSTROUTING\ \/
\ nat /---------------
-----------
\/
----------
| Výstupní |
| rozhraní |
----------
Tabulky:
- mangle - slouží ke změně paketu.
Přípustné cíle pravidel jsou:
- TOS (Type Of Service) - změna TOS paketu
- TTL (Time To Live) - změna TTL paketu
- MARK - označení paketu - použití při routování
- nat - používaná pro překlad adres (Network Address Translation).
Rozhodnutí se provede pouze pro první paket streamu, pro další pakety se
automaticky provádí stejná akce. Vyžaduje zapnutou podporu connection trackingu
Přípustné cíle:
- DNAT (Destination Network Address Translation) - změna cílové adresy
(přesměrování) paketu. Např. různé služby (servery) fyzicky běžící na různých
strojích navenek vystupující pod jednou IP adresou nebo server uvnitř LAN, který nemá vlastní
IP adresu v internetu.
- SNAT (Source Network Address Translation) - změna zdrojové adresy paketu.
Např. LAN v internetu/nadřazené síti vystupující pod jednou IP adresou.
- MASQUERADE - pracuje podobně jako SNAT, ale sám si zjišťuje současnou IP adresu stroje a
tedy funguje i pro dynamickou IP.
- REDIRECT - přepošle paket zpět odesílateli.
- filter - požívána především pro filtrování paketů.
Použitelné jsou zde téměř všechny cíle pravidel. Především:
- [jméno uživatelem definovaného chainu] - začnou se zpracovávat jeho
pravidla
- ACCEPT - paket je propuštěn
- DROP - paket je zahozen
- QUEUE - další zpracování v userspace
- RETURN - návrat do volajícího chainu
- LOG - logovaní paketů do systémového logu
- REJECT - odmítá spojení (defaultně icmp-port-unreachable0
Paramentry paketu použitelné na levé straně pravidla lze rozdělit do dvou
skupin:
- základní - protokol (tcp, udp, icmp), zdrojová/cílová IP adresa,
vstupní/výstupní interface, první/další fragmenty paketu
- rozšiřující - dostupné v modulech (packet matching mudules), nemusí mýt
smysl pro lib. IP paket.
Př.:
- tcp - zdrojový/cílový port, tcp-flags (SYN, ACK, ...)
- udp - zdrojový/cílový port
- icmp - typ icmp paketu
- mac - mac adresa zdroje
- owner - uid vlastníka procesu který paket vytvoril, jméno/pid procesu
- state - stavová inspekce paketu
Stavová inspekce paketu (connection tracking)
- vyžaduje defragmentaci paketů a tedy potenciálně zvýšuje latenci.
Každý paket se nachází v právě jednom ze čtyř následujících "stavů":
- NEW - paket ustavující nové spojení
- ESTABLISHED - paket asociovaný s již existujícím spojením
- RELATED - paket začíná nové spojení, to je ale asocijováno s některým už
existujícím (např. datový přenos ftp)
- INVALID - není asociován s žádným známým spojením
příklad nastavení firewallu:
Vytvoření uživatelského chainu:
# 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 jeho navázání na chainy INPUT a FORWARD:
# iptables -A INPUT -j block
# iptables -A FORWARD -j block
iptables v Rehat linuxu
Konfigurace uložena v /etc/sysconfig/iptables. Startovací skript
/etc/rc.d/init.d/iptables
Nastavení lze provést pomocí iptables a poté uložit:
# iptables-save > /etc/sysconfig/iptables
ipchains
Dva nejzásadnějŠí rozdíly oproti iptables:
- nebyla podporována stavová inspekce paketů
- forwardované pakety procházely také chainy INPUT a OUTPUT
Odkazy
Netfilter
Firewall-HOWTO
IPCHAINS-HOWTO
packet-filtering-HOWTO
NAT-HOWTO
IP-Masquerade-HOWTO