Linux E X P R E S

Facebook

FirewallD: „Náhrada iptables“ pro Fedoru 18

fedora_logo.jpg

FirewallD je nová služba, která má na starost nastavování firewallu ve Fedoře 18. Dnes probíhá testovací den Network Manageru a FirewallD, při této příležitosti si službu představíme.


Článek je vydán s licencí Creative Commons BY-SA 3.0, pochází z webu Fedora.cz a jeho autorem je Jiří Popelka. Je vydán u příležitosti testovacího dne Network Manageru a FirewallD, který probíhá dnes, tedy 21. listopadu 2012. Pokud vás tato problematika zajímá, nezapomeňte se zúčastnit a pomoct s testováním a zkvalitňováním této služby ve Fedoře.

Nejprve ale něco o tom, jak to funguje v současnosti

V Linuxu je firewall (paketový filter) implementován v jádře a tento framework se jmenuje Netfilter. V uživatelském prostoru je k dispozici nástroj iptables (případně ip6tables pro IPv6), který nastavuje tento paketový filtr v jádře. Dále má Fedora stejnojmennou službu, která tento nástroj využívá.

Současný model firewallu v uživatelském prostoru je víceméně statický. Počáteční konfigurace firewallu je vytvořena instalátorem anaconda a uživatel ji může později měnit nástrojem system-config-firewall. Pravidla jsou uložena v /etc/sysconfig/iptables. To, že jsou pravidla uložena v jednom souboru, je výhoda, protože tento soubor je možné generovat nebo měnit jednoduchými skripty. Problémem u tohoto modelu je, že pro aplikování každé změny je nutné firewall (službu iptables) restartovat. S tím souvisí další problém – protože služba iptables je jen skupinka skriptů, které se jednorázově pustí při re-startu této služby, tak jiné služby, které potřebují samy manipulovat s firewallem (jmenovitě libvirt) nemají žádnou možnost, jak zjistit, že k restartu firewallu došlo. Dále je nutné při restartu odebrat a znovu nahrát kernel moduly netfilter (např. pro ftp, sambu aj.), což může způsobit přerušení aktivních připojení.

Naproti tomu v novém dynamickém modelu FirewallD se většina změn obejde bez restartu firewallu. Protože jde o neustále běžící službu, přístupnou přes D-Bus, tak např. libvirt dokáže zaznamenat její restart a zareagovat tím, že znovu vytvoří potřebná pravidla pro běžící virtuální stroje. Přes D-Bus je navíc možné měnit a zjišťovat nastavení firewallu. GUI k FirewallD se jmenuje firewall-config a CLI firewall-cmd.

Nevýhodou FirewallD je, že všechny modifikace firewallu je nutné provádět přes FirewallD (GUI, CLI nebo D-Bus). Pokud by uživatel např. sám povolil nějakou službu přímo přes program iptables, tak FirewallD ji bude dál považovat za zakázanou.

FirewallD také neumí číst /etc/sysconfig/iptables, ale má vlastní konfigurační soubory XML v /usr/lib/. Poslední změnou, která by se nemusela všem líbit, je, že výpis všech nastavených pravidel například pomocí iptables -L je obsáhlejší než v případě služby iptables. Důvodem jsou nové řetězce (chains) kvůli síťovým zónám.

Pomocí staršího nástroje system-config-firewall je sice možné měnit většinu důležitých nastavení firewallu, ale problémem je, že například s notebookem se během dne můžete připojit k několika různým sítím a nastavení firewallu, které je vyhovující v jedné síti, už nemusí dávat příliš smysl v případě jiné sítě.

Například připojení k veřejné síti wi-fi bude logicky vyžadovat přísnější nastavení firewallu než v případě připojení k pevné domácí síti, kde můžete ostatním zařízením na síti víceméně důvěřovat.

Autorem obrázku je Máirín Duffy Autorem obrázku je Máirín Duffy

Právě koncept zón umožňuje mít různá nastavení firewallu pro různá připojení. Zóny definují stupeň důvěry síťovému rozhraní nebo připojení. Klasifikovat síťová připojení do zón je možné buď přímo v konfiguračních souborech jednotlivých síťových připojení, tj. v /etc/sysconfig/network-scripts/ifcfg-* nebo v GUI k NetworkManageru. Jednoduchým přepnutím zóny tak lze snadno změnit komplexní nastavení firewallu pro dané připojení.

FirewallD je možné používat již ve Fedoře 17, ale jako výchozí služba pro firewall by měl nahradit službu iptables teprve ve Fedoře 18. Nadále bude možné používat i službu iptables, ne ale zároveň s FirewallD. Půjde tedy o podobnou situaci jako u NetworkManageru a služby ‘network’ (balíček initscripts).

Konfigurace zón

Nejdříve si ukážeme, jak nastavit, do které zóny bude síťové připojení patřit. Pokud neurčíme jinak, patří každé připojení do výchozí zóny. Která zóna je touto výchozí, je nastaveno v /etc/firewalld/firewalld.conf. V současnosti je výchozí zóna nastavena na zónu s názvem public. Změnit výchozí zónu je tedy možné přímo editací tohoto souboru nebo např. příkazem firewall-cmd --set-default-zone=home nebo v firewall-config kliknutím na tlačítko Změnit výchozí zónu. Seznam existujících zón získáte třeba příkazem firewall-cmd --get-zones. Pokud vám stačí (třeba v případě domácího stolního počítače s jednou síťovou kartou), že budou všechna připojení v zóně home, tak je vaše práce u konce.

Řekněme ale, že máte notebook, se kterým se doma nebo v práci připojujete k pevné sítí, ale čas od času používáte bezdrátové připojení k různým veřejným sítím wi-fi.

Potom chcete vaše připojení wi-fi nechat ve výchozí zóně (public) a pouze vaše pevné připojení mít v zóně home. Zóna home totiž poskytuje větší stupeň důvěry v připojení a více povolených služeb. Jsou dvě možnosti, jak změnit zónu pro konkrétní připojení. Můžete editovat konfigurační soubor konkrétního připojení, tj. odpovídající soubor /etc/sysconfig/network-scripts/ifcfg-* a přidat (případně změnit) řádek se ZONE=home. Jednodušší možností je změnit to v GUI k NetworkManageru.

Takto vypadá nastavení zóny pro konkrétní připojení pomocí nástroje Network Connections v systémových nastaveních KDE. Podobné „přepínátko“ by se mělo brzy objevit i v appletu NM, který je v GNOME a jiných prostředích Takto vypadá nastavení zóny pro konkrétní připojení pomocí nástroje Network Connections v systémových nastaveních KDE. Podobné „přepínátko“ by se mělo brzy objevit i v appletu NM, který je v GNOME a jiných prostředích

Dále chcete, dejme tomu, ve své domácí zóně povolit ještě další služby, které jsou zatím zakázány. Zase máte několik možností. Můžete upravit přímo konfigurační soubor zóny /usr/lib/firewalld/zones/home.xml. Provedete to tak, že vytvoříte jeho kopii v /etc/firewalld/zones a teprve ten budete měnit, abyste se nemuseli bát, že vás update připraví o vaše změny. Chcete-li například povolit službu http, stačí přidat řádek <service name="http"/>. Další možnosti viz firewalld.zone(5).

Po editaci ale musíte firewalld restartovat (stačí reload), aby se změny načetly. Seznam existujících zón získáte, jak už jsem zmínil, buď příkazem firewall-cmd –get-zones, nebo v /usr/lib/firewalld/services/, kde jsou jejich konfigurační soubory, které můžete samozřejmě taktéž upravovat. Viz firewalld.service(5).

Další možností, jak povolit službu v konkrétní zóně, je firewall-cmd --permanent --zone=home --add-service=http, případně varianta bez --permanent, tedy firewall-cmd --zone=home --add-service=http. Rozdíl mezi nimi je ten, že --permanent mění konfiguraci trvalou, tj. ty dříve zmiňované soubory XML, které se načtou s restartem firewalld. Bez --permanent měníte současnou aktivní (runtime) konfiguraci, která ale s restartem zmizí, resp. bude přepsána konfigurací persistentní.

Runtime změny vás zajímají, asi pouze pokud si chcete pohrát s nastavením bez obav, že něco zkazíte, protože restartem se vše vrátí do původní podoby. Možná si řeknete, že je to zajímavá hračka, ale proč s tím někdo ztrácel čas? Důvodem je třeba služba libvirt, která za běhu modifikuje firewall, například nastaví NAT pro startující virtuální stroj a pak ho zase zruší, když se virtuální stroj vypne. Bylo by kontraproduktivní, kdyby takovéto změny byly trvalé a po (re)startu firewallu se nastavil NAT pro virtuální stroj, který v té chvíli možná vůbec neběží.

Samozřejmě úplně nejjednodušší je všechno naklikat v nástroji firewall-config, což je GUI k firewalld. firewall-config se zatím podobá nástroji system-config-firewall s několika drobnými rozdíly:

Nástroj firewall-config je čerstvá novinka a je velmi pravděpodobné, že vzhled se ještě bude měnit Nástroj firewall-config je čerstvá novinka a je velmi pravděpodobné, že vzhled se ještě bude měnit

Na levé straně je seznam zón. Kliknutím na název zóny se načte její konfigurace, kterou můžete měnit. Další novinkou je přepínání pohledů (na obrázku zatím nepřeloženo jako Current view). Tímto se přepíná mezi konfigurací aktuální a persistentní. Pokud měníte konfiguraci aktuální, tak se změny okamžitě provádějí bez nutnosti cokoliv restartovat (na rozdíl od system-config-firewall), ale tyto změny po restartu zmizí. Po editaci persistentní konfigurace je ještě nutné stisknout Reload Firewalld, aby se persistentní změny načetly a stala se z nich nová aktuální konfigurace. V Pohledu Persistentní konfigurace, máte možnost přidávat a editovat zóny, služby nebo typy ICMP.

Teď už byste měli vědět vše podstatné, abyste byli schopní měnit firewall ve Fedoře 18. Případné problémy hlaste jako vždy do bugzilly. Také se můžete dnes (21. listopadu) zúčastnit testovacího dne a pomoct s testováním a zkvalitňováním této služby ve Fedoře.

Diskuze (9) Nahoru