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?

Našli jste v článku chybu?
Lupa.cz: Sdílíte veřejně běhání a jízdu na kole?

Sdílíte veřejně běhání a jízdu na kole?

Vitalia.cz: Za její cukrovkou stojí rodiče

Za její cukrovkou stojí rodiče

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

Vitalia.cz: „Sjíždět“ porno není bez rizika

„Sjíždět“ porno není bez rizika

DigiZone.cz: Sky Deutschland: dvakrát fotbal ve 4K

Sky Deutschland: dvakrát fotbal ve 4K

Měšec.cz: Ceny PHM v Evropě. Finty na úspory

Ceny PHM v Evropě. Finty na úspory

DigiZone.cz: E! a zákulisí turné Mariah Carey

E! a zákulisí turné Mariah Carey

Měšec.cz: TEST: Vyzkoušeli jsme pražské taxikáře

TEST: Vyzkoušeli jsme pražské taxikáře

Podnikatel.cz: Youtuber? Za 15 tisíc dělat nebude

Youtuber? Za 15 tisíc dělat nebude

Měšec.cz: Co s reklamací, když e-shop krachuje?

Co s reklamací, když e-shop krachuje?

DigiZone.cz: Jetelín končí. Prima ho vyřadila

Jetelín končí. Prima ho vyřadila

Lupa.cz: Kdo vykrádá LinkedIn? Zjistit to má soud

Kdo vykrádá LinkedIn? Zjistit to má soud

Vitalia.cz: Pravda o českých spermiích

Pravda o českých spermiích

Podnikatel.cz: Týká se vás EET? Chtějte od berňáku posudek

Týká se vás EET? Chtějte od berňáku posudek

Lupa.cz: Letní tip: stavebnice pro IoT za pár korun

Letní tip: stavebnice pro IoT za pár korun

DigiZone.cz: ČTÚ červenec: rušení trochu vzrostlo

ČTÚ červenec: rušení trochu vzrostlo

Podnikatel.cz: Kauza z Vinohrad pokračuje. Policie se omlouvá

Kauza z Vinohrad pokračuje. Policie se omlouvá

Vitalia.cz: Na co si dát pozor při výběru dětských příkrmů

Na co si dát pozor při výběru dětských příkrmů

120na80.cz: Kam umístit silikony?

Kam umístit silikony?

Lupa.cz: Blokátor reklam už vám na Facebooku nepomůže

Blokátor reklam už vám na Facebooku nepomůže