Vysoce dostupný firewall na Linuxu

Michal Filka 1. 11. 2007

Každá slušná počítačová síť má vlastní firewall. Ten brání neoprávněnému vstupu do sítě, ale také obvykle určuje pravidla komunikace uživatelům uvnitř. Takový firewall je však kritickým místem celé sítě a pokud by došlo k jeho výpadku, přeruší se komunikace s ostatními sítěmi. Jak tomu zabránit?

Motivace

Představme si, že stojíme před problémem zabezpečit spojení jednoho či více počítačů připojených do nějaké vnější sítě. Pojmem zabezpečit rozumíme mít kontrolu nad spojeními, která jsou s těmito počítači navazována a naopak. Typické je řešení pomocí firewallu.

Firewall je bod v síti, který je zodpovědný za komunikaci s vnějším světem. Podle definovaných pravidel rozlišuje provoz na povolený a zakázaný. Může se jednat o specializované kusy hardware, často se ale jedná o běžná pc s operačním systémem (OS) Linux. Pokud situace v síti vypadá tak, jak bylo právě popsáno, pak jsme si do sítě zanesli bod, jehož chyba je kritická pro veškerou komunikaci s vnějším světem.

V této souvislosti se hovoří o „single point of failure“ – díky selhání jednoho zařízení dojde ke kolapsu komunikace s vnějším světem. Tématem tohoto článku je, jak zlepšit spolehlivost komunikace s vnějším světem pomocí fyzické redundance firewallu. Popsané řešení bylo a je provozováno na architektuře i386 s OS Linux – Debian Etch.

Kde je problém?

Nyní je potřeba představit ty části a vlastnosti OS Linux, které jsou pro nastavení vysoce dostupného firewallu důležité. Místy bude popis značně zjednodušený – pro účely tohoto článku postačí hrubá představa, půjde spíše o popis konceptu než konkrétních detailů.

V linuxu se o funkce firewallu – jmenovitě o nastavování logiky firewallu – stará aplikace známá jako iptables. Tato aplikace pracuje s prostředky jádra poskytovanými projektem netfilter, který je zodpovědný za část průchodu paketu jádrem. Zjednodušeně řečeno je paket během své cesty skrz jádro konfrontován typicky s několika „kontrolními“ body (detailní informace lze nalézt na NetFilter.org), ve kterých se rozhoduje o jeho dalším osudu. Jednou z aplikací, která těchto „kontrolních“ bodů využívá, jsou právě iptables.

Pokud si definujete pomocí iptables nějaké pravidlo, je součástí definice, ve kterém bodě se toto pravidlo provádí – v iptables se tyto body označují jako chain(s). Doposud z hlediska redundantního firewallu není žádný problém – stačí na záložním stroji nějakým způsobem zadat stejnou skupinu pravidel a vše je v pořádku.

První problém vychází z toho, že iptables jsou stavový firewall, tudíž nepracují s pakety odděleně, ale zkoumají je v širších souvislostech. Například si pamatují aktuální stav nějakého TCP sezení (session), jsou schopny rozhodnout, zda právě zpracovávaný paket do tohoto spojení patří, a na základě toho nějak reagovat.

Iptables tedy pracují s konkrétními spojeními. Aby nebylo nutné každý paket spojení nechat zpracovat sadou definovaných pravidel, ukládají si iptables své rozhodnutí pro dané spojení do své části nazývané conntrack. Pokud chceme, aby v případě přepnutí z primáru na záložní firewall zůstaly všechny spoje funkční, je nutné zálohovat tuto tabulku. Velmi jednoduše řečeno při vytváření spojení se k pravidlům iptables dostane pouze úvod tohoto spojení. Jakmile se podaří spojení úspěšně sestavit, je o něm udělán záznam v conntrack tabulce, další pakety spojení se k pravidlům již nedostanou a postupují touto známou cestou.

Pokud po vytvoření spojení dojde k přepnutí na záložní firewall, který o existenci tohoto spojení neví, komunikace prováděná přenášená tímto spojem spadne. Jednoduchý příklad k tomuto tématu: Řekněme, že všechny počítače jsou k vnějšímu světu připojeny prostřednictvím NAT (například připojení privátní sítě k internetu s jednou veřejnou ip adresou). Vytvořme jednoduché pravidlo pro tcp spojení – SNAT (S), který původní zdrojovou adresu přeloží na adresu F2, kde F2 je vnější adresa firewallu (F).

Vytvořme nyní z počítače A TCP spojení přes F na počítač C. Pokud se spojení podaří sestavit, můžou spolu A a C nerušeně komunikovat. Pokud během komunikace smažeme na F pravidlo S, bude komunikace dále fungovat. A to proto, že během začátku TCP spojení si F zapamatoval zpracování této TCP session v conntrack table a S není pro další zpracování provozu potřeba. Pokud bychom ale chtěli vytvořit nové spojení, jako například přístup na jiný web server přes F, už by se to nepodařilo.

To je podobné případu přepnutí na záložní firewall, kdy by nebyly synchronizované conntrack tabulky. V takový okamžik začne záložní firewall dostávat pakety z prostředku TCP session, očekává tedy, že má v conntrack tabulce uloženo zpracování pro odpovídající spojení. V tomto případě ale pakety žádnému jemu známému spojení neodpovídají a nebude je tedy umět zpracovat.

Druhý problém je, jak zajistit dostupnost záložního stroje v případě výpadku primárního. Z principu ip sítě musí mít primární a záložní stroj jinou ip adresu. Jak tedy postupovat v případě výpadku primárního – jak se vlastně vnitřní síť dozví o nové ip adrese pro odchozí provoz? Předefinovat ve vnitřní síti u všech počítačů adresy pro odchozí provoz? Nebo naopak v okamžiku, kdy víme, že primární stroj je nedostupný, předefinovat ip adresy používané u sekundárního? Jak vůbec výpadek primáru detekovat?

Závěr

Tento článek měl posloužit pouze pro získání představy o tom, co je potřeba uvažovat při budování vysoce dostupného firewallu. Konkrétní řešení budou představena příště. Motivací pro zájemce budiž to, že řešení existuje, a to dokonce pomocí volně dostupného software.

Anketa

Máte na sítí firewall?

Ohodnoťte jako ve škole:

Průměrná známka 2,78

Našli jste v článku chybu?
Zasílat nově přidané názory e-mailem
120na80.cz: Tady se vaří padělané léky

Tady se vaří padělané léky

Vitalia.cz: Odchytili 43 000 sardinek s kadmiem

Odchytili 43 000 sardinek s kadmiem

120na80.cz: Akupunktura: jak hluboko, jak často, jak dlouho?

Akupunktura: jak hluboko, jak často, jak dlouho?

Vitalia.cz: Kdy je čas na kouče a kdy na psychologa

Kdy je čas na kouče a kdy na psychologa

DigiZone.cz: O2TV zve na souboj Ledecké s Myslivcovou

O2TV zve na souboj Ledecké s Myslivcovou

Podnikatel.cz: Šizený guláš na pultě. Jako Lidl to nedělejte

Šizený guláš na pultě. Jako Lidl to nedělejte

DigiZone.cz: Šlágr TV dostala pokutu 100 000 Kč

Šlágr TV dostala pokutu 100 000 Kč

Vitalia.cz: 10 rad šéfkuchařů pro perfektní grilování

10 rad šéfkuchařů pro perfektní grilování

DigiZone.cz: V RS7 ukončila vysílání Retro Music Television

V RS7 ukončila vysílání Retro Music Television

120na80.cz: Poznáte, který z léků je pravý?

Poznáte, který z léků je pravý?

DigiZone.cz: Konec geoblokace? Ani náhodou…

Konec geoblokace? Ani náhodou…

Podnikatel.cz: Využijte v byznysu nulové tarify

Využijte v byznysu nulové tarify

120na80.cz: 10 dezinfekcí: Vede „starý dobrý“ peroxid

10 dezinfekcí: Vede „starý dobrý“ peroxid

DigiZone.cz: Šlágr TV: pokuta 100 tisíc za on-line

Šlágr TV: pokuta 100 tisíc za on-line

Podnikatel.cz: Různé podoby lahve Coca–Coly. Úchvatné

Různé podoby lahve Coca–Coly. Úchvatné

Vitalia.cz: Taky ji kupujete? Je šizená

Taky ji kupujete? Je šizená

Vitalia.cz: Vydával se za český, prozradila ho DNA

Vydával se za český, prozradila ho DNA

Měšec.cz: Udali ho na nelegální software a přišla Policie

Udali ho na nelegální software a přišla Policie

DigiZone.cz: Kolik lidí sleduje hokej na webu ČT?

Kolik lidí sleduje hokej na webu ČT?

Vitalia.cz: Proč máme prasklý chléb nejraději?

Proč máme prasklý chléb nejraději?