firewalld
firewalld je utilita pro správu firewallu v linuxových operačních systémech. Chová se jako front-end pro framework Netfliter. Jako svůj backend používá v aktuální verzi nftables, dříve používal iptables. Je před instalován například v distribucích CentOS, Red Hat, Fedora a SUSE.
Zóny
Zóny jsou základním stavebním kamenem celého firewalld, použitá zóna nám určuje důvěrnost sítě. Ve firewalld nalezneme několik před konfigurovaných zón, veškeré zóny v systému si můžeme vypsat pomocí příkazu firewall-cmd --get-zones.
Předdefinované zóny
drop - nejnižší důvěryhodnost, veškerá příchozí komunikace bude zahozena
block - veškerá příchozí bude odmítnuta s icmp zprávou icmp-host-prohibited/icmp6 zprávou icmp6-adm-prohibited
Zóny kde ostatním počítačům nevěříte
public - vhodná pro veřejné sítě, pouze určitá příchozí komunikace bude propuštěna
external - určená pro externí sítě se zapnutou maškarádou, především pro routery, pouze určitá příchozí komunikace bude propuštěna
dmz - dle dokumentace “pro počítače ve vaší demilitarizované zóně”, cokoliv co to znamená
Zóny kde ostatním počítačům spíše věříte
work - určena pro domácí použití, pouze určitá příchozí komunikace bude propuštěna
home - určena pro firemní použití, pouze určitá příchozí komunikace bude propuštěna
internal - určena pro interní sítě, pouze určitá příchozí komunikace bude propuštěna
trusted - nejvyšší míra důvěryhodnosti, veškerá příchozí komunikace bude propuštěna
Atributy zón
target - <ACCEPT,REJECT,DROP> určuje co má firewall dělat s pakety, které nesplňují žádná pravidla
short - Název zóny
description - Popis zóny
interface - Umožňuje přiřadit určité síťové rozhraní k zóně
source - Umožňuje přiřadit určitý zdroj (IP adresa, MAC adresa) k zóně
service - Definuje povolené služby v dané zóně
port - Definuje povolené porty v dané zóně
protocol - Definuje povolené protokoly v dané zóně. Lze definovat protokoly ze souboru /etc/protocols
rule - Umožňuje do zóny přidat pokročilá pravidla
Služby
Služba je lokální seznam portů, destinací a modulů, které danou službu definují. Přinášejí nám jednodušší možnost blokovat/povolovat služby v síti. Ve firewalld je jich mnoho předdefinovaných, ale můžeme vytvářet i vlastní.
Atributy služeb
short - Název služby
description - Popis služby
port - Definuje port služby
protocol - Definuje protokol služby. lze definovat protokoly ze souboru /etc/protocols
source-port - Definuje zdrojový port služby
module - Definuje Netfilter moduly služby
destination - Definuje IP adresu destinace služby
Utilita firewall-cmd
Pomocí této utility budeme konfigurovat firewalld z příkazové řádky, existuje také GUI alternativa firewall-config, kterou si ukážeme později.
Základní příklady
firewall-cmd [příkaz]
--state Vrátí stav firewallu
--reload Znovu načte firewall, bez ztráty aktuální konfigurace
--complete-reload Kompletně restartuje firewall, znovu načte i konfiguraci, takže neuložená konfigurace v paměti bude ztracena
--runtime-to-permanent Uloží konfiguraci v paměti do permanentní konfigurace
--permanent Pokud vložíme před příkaz, změna se zapíše do trvalé konfigurace (vytvářet a upravovat služby/vytvářet a odebírat zóny je možné pouze v trvalé konfiguraci)
Práce se zónami
Základní příkazy pro práci se zónami
--get-default-zone Vypíše aktuální výchozí zónu
--set-default-zone=[zóna] Nastaví výchozí zónu
--get-active-zones Vypíše aktuálně používané zóny
--get-zones Vypíše všechny zóny v systému
--list-all-zones Vypíše všechny zóny v systému včetně jejich konfigurace
--permanent --delete-zone Vymaže zónu
--permanent --add-zone Vytvoří novou prázdnou zónu
Práce s rozhraními v zónách
--zone=[zóna] --list-interfaces Vypíše rozhraní, která jsou definovaná v dané zóně
--zone=[zóna] --add-interface=[rozhraní] Přidá do zóny rozhraní
--zone=[zóna] --remove-interface=[rozhraní] Odstraní ze zóny rozhraní
--zone=[zóna] --change-interface=[rozhraní] Změní zónu rozhraní (odstraní z původní zóny a přidá do nové zóny)
Práce se zdroji v zónách
--zone=[zóna] --list-sources Vypíše zdroje, které jsou definované v dané zóně
--zone=[zóna] --add-source=[zdroj] Přidá zdroj do zóny
--zone=[zóna] --remove-source=[zdroj] Odebere zdroj ze zóny
--zone=[zóna] --change-source=[zdroj] Přesune zdroj do jiné zóny (odstraní z původní zóny a přidá do nové)
Práce se službami v zónách
--zone=[zóna] --add-service Přidá službu do zóny
--zone=[zóna] -–remove-service Odebere službu ze zóny
Práce s porty a protokoly
--zone=[zóna] -–add-port Přidá port do zóny
--zone=[zóna] --remove-port Odebere port ze zóny
--zone=[zóna] --add-protocol Přidá protokol do zóny
--zone=[zóna] --remove-protocol Odebere protokol ze zóny
Nouzový mód
--panic-on Okamžitě zablokuje komunikaci na síti, vhodné například při útoku na síť
--panic-off Odblokuje komunikaci na síti
Práce se službami
--permanent --new-service=[služba] Vytvoří novou službu
--permanent --remove-service=[služba] Odstraní službu ze systému
Konfigurace služby
--permanent --service=[služba] --set-description=[popisek] Nastaví službě popisek
--permanent --service=[služba] --set-short=[název] Nastaví službě název
--permanent --service=[služba] --add-port=[port] Přidá službě port
--permanent --service=[služba] --add-protocol=[protokol] Přidá službě protokol
--permanent --service=[služba] --add-source-port=[zdrojový port] Přidá službě zdrojový port
--permanent --service=[služba] --add-module=[modul] Přidá službě modul
--permanent --service=[služba] --set-destination=[destinace] Přidá službě destinaci
Ukázka konfigurace
Příklad změny zóny a otevření služby a portu
Nyní si ukážeme jednoduchý příklad, kde si přenastavíme zónu našeho počítače na home, povolíme službu vnc-server a port 666.
Nejdříve si zkontrolujeme, jaké aktivní zóny máme v systému, to učiníme následujícím příkazem:
firewall-cmd --get-active-zones
A výstup programu je následující
FedoraWorkstation
interfaces: ens160
Z výstupu programu můžeme vidět, že naše síťové rozhraní se nachází v zóně FedoraWorkstation, my bychom, ale chtěli naše rozhraní umístit do zóny home, využijeme tedy následující příkaz a přesuneme rozhraní ens160 do zóny home
firewall-cmd --zone=home --change-interface=ens160
Nyní přidáme pravidlo pro službu a port.
firewall-cmd --zone=home —-add-service=vnc-server
firewall-cmd --zone=home —-add-port=666/tcp
Zda se vše do zóny správně přidalo si můžeme jednoduše ověřit pomocí následujícího příkazu:
firewall-cmd --zone=home --list-all
V našem případě výstup vypadá takto:
home (active)
target: default
icmp-block-inversion: no
interfaces: ens160
sources:
services: dhcpv6-client mdns samba-client ssh vnc-server
ports: 666/tcp
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Na závěr, pokud jsem s konfigurací spokojení, uložíme vše trvale, pomocí následujícího příkazu:
firewall-cmd --runtime-to-permanent
Příklad vytvoření nové služby
Nejdříve začneme příkazem na vytvoření prázdné služby, tu si například pojmenujeme nasesluzba
firewall-cmd --permanent --new-service=nasesluzba
Následně do služby doplníme všechny potřebné informace:
firewall-cmd --permanent --service=nasesluzba --set-description="Nase testovaci sluzba"
firewall-cmd --permanent --service=nasesluzba --set-short="Nase sluzba"
firewall-cmd --permanent --service=nasesluzba --add-port=666/tcp
Debugging firewalld
Pro debugování firewalld je možné použít přepínač --debug například pomocí tohoto příkladu je možné spustit firewalld pro debugging:
firewalld --nofork --debug
Utilita firewall-config
Tato utilita funguje stejně jako firewall-cmd, pouze s rozdílem, že obsahuje grafické rozhraní. Utilitu můžeme spustit zadáním firewall-config do terminálu. Po spuštění se nám zobrazí obrazovka, která vypadá přibližně takto:
V levo nalezneme aktivní rozhraní a zdroje ke kterým jsou přiřazena, zde také toto přiřazení můžeme změnit. V horní části můžeme měnit, zda pracujeme s konfigurací v paměti nebo s trvalou konfigurací. Napravo poté můžeme upravovat atributy zón a služeb.