Iptables - stavový firewall (1)

Napsal O webu (») 15. 9. 2006 v kategorii Operační systémy, přečteno: 5396×

Představme si jednoduchý případ. Máme síť počítačů a chceme je připojit k internetu. Prvním krokem bude pořízení počítače - serveru, na který nainstalujeme Linux. Tento server připojíme z jedné strany do vnitřní sítě - LAN (jedna síťová karta) a z druhé strany do vnější sítě - internetu (druhá síťová karta). Tímto ale cesta k úspěchu teprve začíná, musíme totiž ještě umožnit přístup počítačům ve vnitřní síti do internetu. Dalšími kroky bude tedy zprovoznění a nakonfugurování firewallu. S posledním zmíněným krokem se vám bude snažit pomoci tento seriál. Budeme mluvit konkrétně o firewallu iptables a o jeho konfiguraci.

Průběh komunikace

Nejprve si vysvětlíme, jak probíhá komunikace prostřednictvím sítě. Vysvětlení bude pouze základní, ve skutečnosti je tato problematika mnohem složitější, ale pro naše účely to bude stačit. Komunikace mezi počítači v naší síti (resp. mezi serverem a internetem) probíhá prostřednictvím protokolu TCP/IP. Komunikace je rozdělená do malých jednotek, tzv. packetů. Ty mohou být trojího typu. TCP packety jsou doručovány zabezpečeně, tzn. že se nemohou někde na lince "ztratit" - o to se nám stará samotný protokol. UDP packety naopak nemají žádné potvrzovací mechanizmy, takže (zejména na bezdrátových linkách) dochází k jejich ztrátě a záleží na aplikacích, jak se s tím vyrovnají. Posledním typem jsou packety ICMP, které mají v rámci protokolu servisní charakter. Informují na lince druhou stranu o všech možných situacích, které mohou nastat. Každý packet má hlavičku, která mimo jiné obsahuje zdrojovou a cílovou adresu, tedy unikátní IP adresu počítače, odkud packet pochází a kam směřuje. TCP/UDP packety dále v hlavičce obsahují číslo portu. K čemu je takové číslo třeba? Cílová adresa nám určí počítač, kam packet směřuje. Port nám pak určí konkrétní program na cílovém počítači. Analogicky to funguje i se zdrojovým portem -> ten nám určí program, ze kterého byl packet odeslán. Tolik ke zjednodušenému úvodu do počítačových sítí.

Činnost firewallu

Jak nám do toho zapadá firewall? Ten provádí velmi důležitou práci. Vezme každý packet, který přes něj prochází, a rozhoduje, co s ním udělá. Navíc má schopnost změnit v hlavičce packetu informace. Dále existují stavové firewally (vč. iptables). To znamená, že si firewall dokáže navíc pamatovat, k čemu který packet byl. Později pak dokáže rozhodnout, co s příchozím packetem udělá v závislosti na předešlé komunikaci.

Pravidla, řetězce, tabulky a cíle v iptables

Firewall rozhoduje o osudu packetů na základě pravidel. Ty jsou sekvenčně uspořádaná v řetězcích. Iptables má připraveny prázdné řetězce pro každý směr. Řetězec INPUT slouží pro pravidla, které mají být použity v případě, kdy packet směřuje na server. Z řetězce OUTPUT pak vybírá pravidla, které mají být použity pro packety, které ze serveru odcházejí. Konečně pak řetězec FORWARD je určen pro ty packety, které jsou předávany mezi síťovými kartami serveru (tzn. packety směřující z vnitřní sítě do internetu a naopak).


Obr.1: Základní řetězce pro pravidla.
Analogicky mohou být Síť1 a Síť2 přehozeny, pokud jde packet opačným směrem.



Iptables obsahuje ještě další speciální řetězce. Pravidla v řetězci PREROUTING umožňují zasahovat do hlavičky packetů ještě předtím, než projdou firewallem. Konkrétně lze v tomto řetězci měnit cílovou adresu a cílový port packetů (DNAT - destination network address translation). V důsledku prochází firewallem pozměněný packet. Řetězec POSTROUTING analogicky umožňuje změnit zdrojovou adresu a zdrojový port packetů (SNAT - source network address translation), které opouštějí firewall. Speciální řetězec OUTPUT má stejnou funkci, jako postrouting, ale prochází jím jenom packety, které vznikají na serveru a odcházejí z něj. Uživatel si může sám vytvářet další řetězce dle libosti a může je volat z hlavních řetězců.

Pozorný čtenář si jistě všimnul, že jsem vypsal 2 stejné jména řetězců. Není to chyba? Iptables ukládá řetězce v tabulkách. Ty jsou trojího typu: filter, nat a mangle. Pokud není v pravidle určena tabulka, pak se implicitně použije tabulka filter. V ní jsou umístěny základní řetězce input, forward a output. Přídavné řetězce prerouting, postrouting a output jsou v tabulce nat. Proto existují dva řetězce se stejným názvem, přičemž každý je v jiné tabulce.

Jak tedy probíhá průchod packetu firewallem? Iptables obdrží packet a zvolí řetězec pravidel, kterým musí packet projít. Posléze vybírá z tohoto řetězce pravidla jedno po druhém a kontroluje, zdali packet vyhovuje uvedené podmínce. Pokud ano, zjistí z pravidla, co má s packetem udělat a nepokračuje dál. Pokud ne, vybere v pořadí další pravidlo. Existují i pravidla (například logování), které nejsou terminální. To znamená, že se pokračuje dalšími pravidly i v případě, kdy packet vyhovuje podmínce. Pozorný čtenář se už jistě ptá, co se stane, když packet projde všemi pravidly a žádné z nich mu nevyhovuje. Firewall pak neví, co s takovým packetem provést. Použije tedy tzv. implicitní potitiku. Implicitní politika je jedno pravidlo pro každý hlavní řetězec, které určuje, co se má dělat s packetem, který neodpovídá žádné podmínce v řetězci.

Jak firewall pozná z pravidla, co má s packetem udělat? K tomu slouží takzvané cíle (targets). Základní cíle jsou ACCEPT (povolit průchod), DROP (zahodit) a RETURN (vrátit s chybovou hláškou). Další cíle (SNAT, DNAT, LOG atd.) lze snadno pochopit už z názvu. Pokud v pravidle vyhovuje podmínka, packet je poslán na zadaný cíl.

Syntaxe pravidel

Pravidlo pro iptables má následující obecnou syntaxi:

iptables "oč se jedná" "umístění pravidla" "podmínka" "co provést"

Nyní bych vás rád odkázal do manuálových stránek iptables. Je tam vše jednoduše a přehledně uspořádáno. Použití bych demonstroval na jednom příkazu:

iptables -A INPUT -i eth1 -p TCP --dport 80 -j ACCEPT

iptables: budeme zavádět pravidlo do iptables -A: "oč se jedná" přidáváme nové pravidlo INPUT: "umístění pravidla" pravidlo bude přidáno do tohoto řetězce -i eth1: "podmínka" packet vstoupil na server síťovou kartou 1 -p TCP: "podmínka" packet je typu TCP --dport: "podmínka" cílový port packetu je 80 -j ACCEPT: "co provést" povolit průchod packetu



Závěr

Tímto bych ukončil dnešní díl o firewallu iptables. Vysvětlili jsme si, co to firewall je a jak pracuje v rámci síťové komunikace. Dále jsme si ukázali, co jsou to pravidla, řetězce a jak je lze zapsat. V příštím díle se naučíme, jak vytvářet pravidla a jak je poskládat do funkčního celku.
Autor: Radim Poloch

Štítky: iptables
Facebook Twitter Topčlánky.cz Linkuj.cz

Komentáře

Zobrazit: standardní | od aktivních | poslední příspěvky | všechno
Článek ještě nebyl okomentován.


Nový komentář

Téma:
Jméno:
Notif. e-mail *:
Komentář:
  [b] [obr]
Odpovězte prosím číslicemi: Součet čísel jedenáct a osm