FirewallD je nástroj, který Fedora používá pro poskytování dynamického firewallu. To znamená, že změny v nastavení firewallu se projevují okamžitě, aniž by bylo nutné firewall restartovat. Kromě toho podporuje FirewallD D-BUS a koncept zón.

Poznámka: Článek původně vyšel jako Howto: Firewalld basics v blogu Rolanda Wolterse liquidat. Text vychází s licencí CC BY-SA 3.0.

FirewallD nahradil starý mechanismus firewallu ve Fedoře 18. Jedním z důvodů pro zavedení nového firewallového systému bylo to, že staré řešení vyžadovalo restartování firewallu, což znamenalo přerušení všech stavových spojení při jakékoliv změně. FirewallD navíc podporuje dynamické zóny, které se hodí při používání mobilních zařízení, např. notebooků: můžete mít různé zóny a tím pádem různé sady pravidel např. pro síť v práci a doma.

Pro usnadnění integrace firewallu do jiných aplikací byla do FirewallD přidána podpora D-BUS. Nastavení lze provést pomocí grafického rozhraní nebo v příkazové řádce, což je to, čemu se věnuje tento článek.

Chcete-li používat FirewallD, měli byste se podívat, kterou zónu zrovna používáte:

firewall-cmd --get-active-zone
home: wlan0

Příkaz zobrazí síťová zařízení a dané zóny.

Dostupné zóny zobrazíte pomocí:

# firewall-cmd --get-zones
drop work internal external trusted home dmz public block

Takže pokud chcete změnit zónu sítě, např. proto, že jste zrovna vytvořili VPN tunel do své domácí sítě, provedete to takto:

# firewall-cmd --zone=external --change-interface=wlan0

Bohužel se nezobrazí žádný návratový kód, ale můžete se znovu dotázat na aktuální zóny, chcete-li potvrdit, že vše proběhlo správně.

Protože však mluvíme o dynamických změnách firewallu, tak nás zajímá otevírání a zavírání portů. Dá se na to dívat také tak, že půjde o povolování či zakazování přístupu ke službám. Rozdíl je, že služba může představovat seznam několika portů.

Vyplývá z toho, že můžete dotazovat povolené služby (porty se neukazují), povolené porty (služby se neukazují) nebo všechno (ukazuje se vše):

# firewall-cmd --zone=home --list-services
mdns ipp-client dhcpv6-client ssh samba-client

U externí zóny to vypadá jinak:

# firewall-cmd --zone=public --list-services
ssh

Dotaz na porty vypadá stejně, ale obsahuje příslušný port a protokol:

# firewall-cmd --zone=external --list-ports
3333/tcp

Jak bylo zmíněno výše, nejjednodušší je vždy dotazovat vše:

# firewall-cmd --zone=external --list-all
external
  interfaces: wlan0
  services: ssh
  ports: 3333/tcp
  forward-ports: 
  icmp-blocks:

Jak patrně víte, pokud chcete ověřit, jestli je port skutečně přístupný zvenčí, spusťte start nc -l 3333 a zkuste se na daný port připojit přes telnet.

To však nic není bez možnosti otevírat a zavírat porty:

# firewall-cmd --zone=external --add-port=2222/tcp
# firewall-cmd --zone=external --list-ports
3333/tcp 2222/tcp

Zavření portu je podobně snadné:

# firewall-cmd --zone=external --remove-port=2222/tcp
# firewall-cmd --zone=external --list-ports
3333/tcp

Jak je vidět, dynamické a zónové funkce FirewallD fungují velmi pěkně. V serverovém prostředí však pro FirewallD upotřebení nevidím. Tam obyčejně nemáte potřebu měnit úrovně důvěryhodnosti připojení, takže podle mého nejsou potřeba zóny. Ani dynamické změny nemusí být tak důležité, takže jsem zvědavý, jestli to na serverech bude z dlouhodobého hlediska hrát nějakou roli.

Z uživatelského pohledu jsou dynamické změny pomocí příkazové řádky velmi užitečné. Neškodilo by přidat více stavových zpráv, ale jinak to prostě funguje. Zóny jsou částečně integrovány do NetworkManageru, takže v budoucnu bude moci různé úrovně důvěryhodnosti uživatel vybrat, aniž by musel vědět, co přesně to znamená ve vztahu k vlastním portům.

Nejsem si jistý, jak jsou na tom ostatní distribuce: převezmou to? Předpokládám, že to záleží na tom, jak těsná bude integrace s nástroji jako NetworkManager nebo s desktopovým prostředím obecně…

Více informací o FirewallD najdete v dokumentaci Fedory.