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.