Firewally

Jiří Moninec, xmoninec@fi.muni.cz


Obsah


Motivace - proč firewall?

Firewall
zařízení proti šíření ohně, protipožární zeď
V počítačové síti firewall ovšem neznamená zařízení na ochranu hardware před skutečným požárem, ale zde si pod pojmem požáru můžeme představit množství různých paketů a požadavků(šířících se plamenů), které se snaží proniknout do/z naší sítě. Oheň hořící přiměřeným plamenem je naším přítelem, ovšem nekontrolovaný požár nás může definitivně zničit. Proto je třeba regulovat plameny tohoto ohně dle našich potřeb a povolit jen ty, které nám prospějí, pomůžou nebo neuškodí. Ovšem ale ani naše protipožární zeď není samospasitelná a neodolá všemu. Ale síťový firewall by nám měl zajistit následující:

Typy Firewallů

  1. paketový filtr (Packet Filter)
  2. stavový firewall (Stateful inspection firewall)
  3. aplikační proxy (Application proxy firewall gateway)
  4. analyzátor paketů
  5. někdy také NAT (Network Address Translation)

Paketový filtr (Packet Filter)

Je nejjednodušším typem firewallu. Pracuje na principu kontroly hlaviček procházejících paketů a rozhoduje o jejich dalším bytí či nebytí. Může jej zahodit, přeposlat dále, nebo i jinak zpracovat.

Paketový filter má řadu výhod:

rychlost,nenáročnost
využívá velmi málo výkonu CPU,většina operací v jádře systému
přizpůsobivost
na libovolný typ protokolu
transparentnost
není třeba upravovoat aplikace
bezstavovost
nevytváří permanentní spojení

Ale také řadu nevýhod:

sledují pouze hlavičky paketů
neumí ošetřit data od transportní vrstvy výše
omezené logovací možnosti
logování velmi zatěžuje procesor
nepodporují autentizační mechanismy
maximálně lze autentizovat pomocí IP adres
konfigurace filtrů
na nepovolenou potřebnou službu obvykle přijdete, ale na povolenou nepotřebnou službu nemusíte přijít nikdy
zneužití nedokonalosti TCP/IP protokolů

Stavový firewall (Stateful inspection firewall)

Většinou nadstavba paketového filtru. Hlídá všechny platné tcp spojení a jejich porty, které ukládá do tabulky. V případě, že dorazí paket, který neodpovídá žádnému platnému spojení uplatní se na něj činnost definovaná politikou(zahození, předání ...).
Nevýhoda: funguje pouze na TCP/IP

Aplikační proxy (Application proxy firewall gateway)

Je brána, která provádí kontrolu na aplikační vrstvě. Všechny pakety procházející ze sítě musí projít touto branou.

Výhody

možnosti autentizace
je možné používat autentizační mechanismy pro každého uživatele zvlášť
logovací možnosti
všechny požadavky procházejí přes proxy a dají se snadno kontrolovat a podrobně logovat

Nevýhody

úprava aplikací
tak aby se připojovali pře proxy
náročnost na výkon
nutnost mít pro každou službu/aplikaci vlastní proxy stojí něco z výkonu stroje na kterém běží, obvykle se jednotlivé aplikační proxy umisťují na samostatné stroje v demilitarizované zóně

Analyzátor paketů

Výstupem jsou většinou logovací, varovné nebo chybové zprávy. Může rovněž blokovat přístup k portům(prevence proti port scany). Mezi analyzátory paketŮ patří například snort nebo portsentry.

NAT (Network Address Translation)

Využívá se ke dvěma hlavním účelům:

  1. skrytí vnitřní struktury sítě
  2. převod neveřejných adres na 1 veřejnou adresu, abychom mohli i ze strojů z vnitřní sítě přistupovat ven

Výhody

skrytí sítě
struktura sítě není viditelná zvenčí
cena
je potřeba pouze jedna veřejná IP adresa
není třeba zvláštní konfigurace klientů
stačí jako bránu nastavit server provádějící NAT
není potřeba úprava aplikací

Nevýhody

skrytí sítě
příchozí dotazy z vnější sítě nemůžou přistupovat dovnitř naší sítě, dokud není komunikace iniciována zevnitř nebo pokud nemáme speciální software pro přeposílání specifických portů
problémy při použití DHCP
spravování překladu při dynamickém přidělování adres ve vnitřní síti
NAT provádí také aplikační proxy. Pokud nechceme využívat k překladu proxy, lze efektivně používat například squid pro kešování a implementaci NAT.

Netfilter a iptables - konfigurace v linuxu

Paketový filtr v jádře Linuxu se jmenuje Netfilter, je standartní součástí jádra řady 2.4(první oficiální stavový firewall v Linuxu), v jádrech 2.2 se používaly starší ipchains, s jádry řady 2.0 se používala utilita ipwfadmin.

Stavový firewall je mnohem silnějším nástrojem než nestavový. Má v sobě jsitou inteligenci, která dovoluje posuzovat pakety v souvislostech. Například povolit průchod jen paketům, které patří do již otevřeného TCP spojení. Podroběnjší popis se můžete dozvědět v článku [2].

Překlad jádra

Potřebujeme mít zapnuto minimálně: Pro plné využití všech možností iptables je vhodné zapnout i další volby v sekci Networking Options - > IP: Netfilter Configuration. Originální jádra z distribucí většinou mají tuto podporu zapnutou.

Princip práce

Základem Netfiltru jsou takzvané chains (řetězce,čejny). Standartní chains jsou INPUT,OUTPUT a FORWARD, které rozhodují o příchozích,přeposílaných a odchozích paketech. Ostatní chainy si může definovat správce systému sám.

Chain je posloupností pravidel, každý chain navíc vždy obsahuje policy, což je pravidlo které se aplikuje na paket, pokud projde všemi předchozími pravidly v chainu. Chain může být i prázdý až na policy. Každé pravidlo provádí s paketem nějakou akci, například ACCEPT,DROP,REJECT, kde už je o jejich osudu rozhodnuto a další pravidla se již neaplikují, nebo je akce například LOG a paket dále pokračuje chainem. Paket také může být pravidlem předán do jiného chainu(správcem vytvořeného), pokud tento nerozhodne o jeho osudu je vrácen do rodičovkého chainu.

Paket propadnuvší všemi pravidly je posuzován prvidlem policy. Policy je standartně nastaveno na ACCEPT, správně vytvořený chain počítá se všemi možnostmi žádoucích dat a policy se nastaví na DROP.

Pro vysvětlení cesty paketu viz schéma :

	     síť --> input routing-->forward-->postrouting-->síť
                              |                       ^
                              |                       |
                              |                 output routing
                              v                       |
                            input-->local process-->output

POZOR!

Zde můžeme narazit na základní rozdíl mezi ipchains a iptables. V iptables se pakety určené pro náš stroj předávají chainu INPUT, pakety určené k přeposílání přímo chainu FORWARD a neprochází přes INPUT ani OUTPUT. Pakety vzniklé na našem stroji se pak předávají přímo chainu OUTPUT.

Konfigurace iptables

Základním příkazem je iptables. Dobře popsán v manuálové stránce.
Obecný formát příkazu vypadá takto:
iptables -[ADC] chain rule-specification [options]
iptables -I chain [rulenum] rule-specification [options]
iptables -R chain rulenum rule-specification [options]
iptables -D chain rulenum [options]
iptables -[LFZ] [chain] [options]
iptables -N chain
iptables -X [chain]
iptables -P chain target [options]
iptables -E old-chain-name new-chain-name
Základní manipulace s chainy:
  1. vytvořit nový chain -N
  2. smazat przdný chain -X
  3. změnit policy pro vestavný chain -P
  4. zobrazit pravidla v chainu -L
  5. vymazat pravidla z chainu -F
  6. vynulovat počítadla paketů a bajtů ve všech pravidlech v chainu -Z
Dále můžeme manipulovat s pravidly v chainu: Základní parametry pravidel(určují pdomínky pro paket): Některé parametry mohou použít i znak !, což znamená negaci pravidla, což je dobře využitelné s pravidly -d a -s.
A konečně rozhodneme o osudu paketu parametrem -j jump_target
ACCEPT
přijetí paketu
DROP
zahození paketu, bez upozornění
REJECT
zahození paketu,s upozorněním uživatele zprávou ICMP port unreacheable
LOG
zapsání záhlaví do logu a propuštění paketu
Další podrobnosti lze nalézt ve zmíněné manuálové stránce a v packet-filtering-HOWTO a netfilter-hacking-HOWTO na adrese [1].

Příklady:

# iptables -A INPUT -s 127.0.0.1 -p ICMP -j DROP
Znamená, že všechny pakety příchazející z adresy 127.0.0.1 protokolu ICMP budou zahozeny. Tedy například nebude fungovat příkaz:
# ping 127.0.0.1
Pravidlo odstraníme použitím:
# iptables -D INPUT 1

NAT v Linuxu

Ve verzi 2.4 byl zahrnut do Netfiltru místo předchozí IP Masquerading. Ale umí toho mnohem více. Lze jej rozdělit do dvou částí SNAT (source network address translation), nahrazuje Masquerading, mění zdrojovou adresu prvního paketu a DNAT (destination network address translation), mění cílovou adresu prvního paketu.
Ke konfiguraci překladu adres použijeme iptables s přepínačem -t. Dále s přepínačem -j SNAT pro překlad zdrojových adres a -j DNAT pro překlad cílových adres. Ostatní práce je stejná jako je uvedeno výše. SNAT se nastavuje v řetězu POSTROUTING, DNAT v PREROUTING. Tedy výhoda je, že vždy pracujeme se skutečnou adresou. Řeší tedy i onu situaci s mapováním cílových portů.
v jádře zapneme podproru pro Full-NAT:

Tedy například:

SNAT:
Změna zdrojové adresy na 1.2.3.4
# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 1.2.3.4
Změna zdrojové adresy na 1.2.3.4, 1.2.3.5 nebo 1.2.3.6
# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 1.2.3.4-1.2.3.6
Změna zdrojové adresy na 1.2.3.4, porty 1-1023
# iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to 1.2.3.4:1-1023
Masquerading je speciálním případem SNAT a mělo by se používat jen pro dynamicky přidělované adresy, jinak se používá SNAT.
Prováděj masquerading na všem, co odchází z ppp0
# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
DNAT:
Změna cílovélov adresy na 5.6.7.8
# iptables -t nat -A PREROUTING -i eth0 -j DNAT --to 5.6.7.8
Změna cílové adresy na 5.6.7.8, 5.6.7.9 nebo 5.6.7.10.
# iptables -t nat -A PREROUTING -i eth0 -j DNAT --to 5.6.7.8-5.6.7.10
Změna cílové adresy WWW na 5.6.7.8, port 8080.
# iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth0 \
               -j DNAT --to 5.6.7.8:8080
Přesměrování je specílní případ DNAT.
Posílej příchozí pakety s portem 80 (WWW) na naši transparentní proxy (squid)
# iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 \
               -j REDIRECT --to-port 3128
Více najdete v NAT-HOWTO dostupném na adrese [1].

Reference

[1] www.netfilter.org
[2] Martin Mačok: netfilter - stavový firewall linuxu 2.4 (iptables)
[3] Martin Mačok: iptables - jak na to
[4] Pavel Vymazal, Martin Pavlíček: Linuxové DMZ