Vyhledávání na webu

Jak nainstalovat, nakonfigurovat a používat Firewalld v CentOS a Ubuntu


Firewalld (démon brány firewall) je alternativou ke službě iptables pro dynamickou správu brány firewall systému s podporou síťových (neboli firewallových) zón a poskytuje rozhraní D-Bus pro správu konfigurací. Snadno se používá a konfiguruje a nyní je to výchozí nástroj pro správu brány firewall v systémech RHEL/CentOS, Fedora a několika dalších distribucích Linuxu.

V tomto článku probereme, jak nakonfigurovat systémový firewall pomocí firewallu a implementovat základní filtrování paketů v CentOS/RHEL 7 a Ubuntu.

Základy Firewallu

Firewall se skládá ze tří vrstev, kterými jsou:

  • základní vrstva: zodpovědná za manipulaci s konfigurací a zadními konci (uvedeno níže).
  • Rozhraní D-Bus: primární prostředek pro změnu a vytvoření konfigurace brány firewall.
  • backendy: pro interakci s netfilter (modul nativního jádra používaný pro firewall). Zahrnují iptables, ip6tables, ebtables, ipset, nft, linnftables; správce sítě; a moduly.

Spravuje pravidla brány firewall implementací zón sítě/brány firewall, které definují úroveň důvěryhodnosti síťových připojení nebo rozhraní. Mezi další podporované funkce brány firewall patří služby, přímá konfigurace (používá se k přímému předávání nezpracované syntaxe iptables), sady IPS a také typy ICMP.

Firewall podporuje dva druhy konfiguračních prostředí:

  • runtime konfiguraci, která je účinná pouze do restartování počítače nebo restartování služby brány firewall
  • trvalá konfigurace, která se uloží a trvale funguje.

Nástroj příkazového řádku firewall-cmd se používá ke správě běhového prostředí a trvalé konfigurace. Alternativně můžete pro interakci s démonem použít konfigurační nástroj grafického uživatelského rozhraní (GUI) brány firewall.

Kromě toho firewalld nabízí dobře definované rozhraní pro další místní služby nebo aplikace pro přímé vyžádání změn pravidel brány firewall, pokud jsou spuštěny s právy root.

Globální konfigurační soubor pro firewalld se nachází na adrese /etc/firewalld/firewalld.conf a funkce brány firewall jsou konfigurovány ve formátu XML.

Porozumění důležitým funkcím brány firewall

Ústřední funkcí firewallu jsou zóny sítě/firewallu. Každý další prvek je ohraničen zónou. Zóna brány firewall popisuje úroveň důvěryhodnosti pro připojení, rozhraní nebo vazbu zdrojové adresy.

Výchozí konfigurace je dodávána s řadou předdefinovaných zón seřazených podle výchozí úrovně důvěryhodnosti zón od nedůvěryhodných po důvěryhodné: drop, block, public, external, dmz, work, home, internal and trusted. Jsou definovány v souborech uložených v adresáři /usr/lib/firewalld/zones.

Své vlastní zóny můžete nakonfigurovat nebo přidat pomocí klienta CLI nebo jednoduše vytvořit nebo zkopírovat soubor zóny v /etc/firewalld/zones ze stávajících souborů a upravit jej.

Dalším důležitým konceptem pod firewallem jsou služby. Služba je definována pomocí portů a protokolů; tyto definice představují danou síťovou službu, jako je webový server nebo služba vzdáleného přístupu. Služby jsou definovány v souborech uložených v adresáři /usr/lib/firewalld/services/ nebo /etc/firewalld/services/.

Pokud znáte základní koncepty iptables/ip6tables/ebtables, můžete také použít přímé rozhraní (nebo konfiguraci) k získání přímého přístupu k firewallu. Ale pro ty, kteří nemají žádné znalosti iptables, můžete použít bohatý jazyk pro vytváření složitějších pravidel brány firewall pro IPv4 a IPv6.

Jak nainstalovat balíček Firewalld v Linuxu

V systému CentOS 7 je balíček firewalld předinstalován a můžete jej ověřit pomocí následujícího příkazu.

rpm -qa firewalld

Na Ubuntu 16.04 a 18.04 jej můžete nainstalovat pomocí výchozího správce balíčků, jak je znázorněno.

sudo apt install firewalld

Jak spravovat službu brány firewall v systému Linux

Firewalld je běžná služba systemd, kterou lze spravovat pomocí příkazu systemctl.

 
sudo systemctl start firewalld	#start the service for the mean time
sudo systemctl enable firewalld	#enable the service to auto-start at boot time
sudo systemctl status firewalld	#view service status

Po spuštění služby firewalld můžete také zkontrolovat, zda démon běží nebo ne, pomocí nástroje firewall-cmd (v případě, že není aktivní, tento příkaz vypíše „not běží“).

sudo firewall-cmd --state

Pokud náhodou uložíte nějaké změny trvale, můžete znovu načíst firewall. Tím se znovu načtou pravidla brány firewall a zachovají se informace o stavu. Aktuální trvalá konfigurace se stane novou konfigurací runtime.

sudo firewall-cmd --reload

Jak pracovat se zónami brány firewall v aplikaci Firewalld

Chcete-li získat seznam všech dostupných zón a služeb brány firewall, spusťte tyto příkazy.

sudo firewall-cmd --get-zones
sudo firewall-cmd --get-services

Výchozí zóna je zóna, která se používá pro každou funkci brány firewall, která není explicitně vázána na jinou zónu. Spuštěním můžete získat výchozí zónu nastavenou pro síťová připojení a rozhraní.

sudo firewall-cmd --get-default-zone

Chcete-li nastavit výchozí zónu, například na externí, použijte následující příkaz. Všimněte si, že přidání volby --permanent nastaví konfiguraci trvale (nebo povolí dotazování na informace z prostředí trvalé konfigurace).

sudo firewall-cmd --set-default-zone=external
OR
sudo firewall-cmd --set-default-zone=external --permanent
sudo firewall-cmd --reload 

Dále se podíváme na to, jak přidat rozhraní do zóny. Tento příklad ukazuje, jak přidat adaptér bezdrátové sítě (wlp1s0) do zóny doma, která se používá v domácích oblastech.

sudo firewall-cmd --zone=home --add-interface=wlp1s0

Rozhraní lze přidat pouze do jedné zóny. Chcete-li ji přesunout do jiné zóny, použijte přepínač --change-interface, jak je znázorněno, nebo ji odeberte z předchozí zóny pomocí přepínače –remove-interface a poté ji přidejte do nové zóny.

Za předpokladu, že se chcete připojit k veřejné WI-FI síti, měli byste své bezdrátové rozhraní přesunout zpět do veřejné zóny takto:

sudo firewall-cmd --zone=public --add-interface=wlp1s0
sudo firewall-cmd --zone=public --change-interface=wlp1s0

Můžete používat mnoho zón současně. Chcete-li získat seznam všech aktivních zón s povolenými funkcemi, jako jsou rozhraní, služby, porty, protokoly, spusťte:

sudo firewall-cmd --get-active-zones

V souvislosti s předchozím bodem: Pokud chcete zjistit více informací o konkrétní zóně, tedy o všem, co je v ní přidáno nebo povoleno, použijte jeden z těchto příkazů:

sudo firewall-cmd --zone=home --list-all
OR
sudo firewall-cmd --info-zone public

Další užitečnou možností je --get-target, která vám ukáže cíl trvalé zóny. Cíl je jeden z: výchozí, ACCEPT, DROP, REJECT. Můžete zkontrolovat cíl různých zón:

sudo firewall-cmd --permanent --zone=public --get-target  
sudo firewall-cmd --permanent --zone=block --get-target  
sudo firewall-cmd --permanent --zone=dmz --get-target  
sudo firewall-cmd --permanent --zone=external --get-target
sudo firewall-cmd --permanent --zone=drop --get-target

Jak otevřít a zablokovat porty v bráně firewall

Chcete-li otevřít port (nebo kombinaci portu/protokolu) ve firewallu, jednoduše jej přidejte do zóny pomocí volby --add-port. Pokud zónu výslovně neurčíte, bude povolena ve výchozí zóně.

Následující příklad ukazuje, jak přidat port 80 a 443, aby byl povolen příchozí webový provoz prostřednictvím HTTP a HTTPS protokoly, respektive:

sudo firewall-cmd --zone=public --permanent --add-port=80/tcp --add-port=443/tcp

Poté znovu načtěte firewall a ještě jednou zkontrolujte povolené funkce ve veřejné zóně, měli byste vidět právě přidané porty.

sudo firewall-cmd --reload
sudo firewall-cmd --info-zone public

Blokování nebo uzavření portu ve firewallu je stejně snadné, jednoduše jej odeberte ze zóny pomocí možnosti --remove-port. Například k uzavření portů 80 a 443 ve veřejné zóně.

sudo firewall-cmd --zone=public --permanent --remove-port=80/tcp --remove-port=443/tcp

Místo použití kombinace portu nebo portu/protokolu můžete použít název služby, ke které je port přiřazen, jak je vysvětleno v další části.

Jak otevřít a zablokovat služby v bráně firewall

Chcete-li otevřít službu ve firewallu, povolte ji pomocí možnosti --add-service. Pokud je zóna vynechána, použije se výchozí zóna.

Následující příkaz trvale povolí službu http ve veřejné zóně.

sudo firewall-cmd --zone=public --permanent --add-service=http 
sudo firewall-cmd --reload 

Možnost --remove-service lze použít k deaktivaci služby.

sudo firewall-cmd --zone=public --permanent --remove-service=http 
sudo firewall-cmd --reload 

Jak povolit a zakázat maskování IP pomocí brány firewall

IP Masquerading (také známé jako IPMASQ nebo MASQ) je NAT (Překlad síťových adres) mechanismus v linuxových sítích, který umožňuje vašim hostitelům v síti se soukromými IP adresami komunikovat s internetem pomocí přidělené veřejné IP adresy vašeho linuxového serveru (brána IPMASQ).

Je to mapování typu one-to-many. Provoz z vašich neviditelných hostitelů se bude ostatním počítačům na internetu jevit, jako by přicházel z vašeho linuxového serveru.

Můžete povolit maskování IP v požadované zóně, například ve veřejné zóně. Než to však uděláte, nejprve zkontrolujte, zda je maskování aktivní nebo ne (“ne “ znamená, že je zakázáno a „ano“ znamená jinak).

sudo firewall-cmd --zone=public --query-masquerade
sudo firewall-cmd --zone=public --add-masquerade

Typickým případem použití maskování je provádění přesměrování portů. Za předpokladu, že chcete provést SSH ze vzdáleného počítače na hostitele ve vaší interní síti s IP 10.20.1.3, na kterém na portu 5000 naslouchá démon sshd.

Všechna připojení k portu 22 na vašem linuxovém serveru můžete přesměrovat na zamýšlený port na cílovém hostiteli vydáním:

sudo firewall-cmd --zone=public --add-forward-port=port=22=proto=tcp:toport=5000:toaddr=10.20.1.3

Chcete-li zakázat maskování v zóně, použijte přepínač --remove-masquerade.

sudo firewall-cmd --zone=public --remove-masquerade

Jak povolit a zakázat zprávu IMCP v bráně firewall

Zprávy ICMP (Internet Control Message Protocol) jsou buď požadavky na informace, nebo odpovědi na žádosti o informace nebo v chybových podmínkách.

Zprávy ICMP můžete povolit nebo zakázat ve bráně firewall, ale předtím si nejprve vypište všechny podporované typy icmp.

sudo firewall-cmd --get-icmptypes

Chcete-li přidat nebo odebrat požadovaný typ bloku.

sudo firewall-cmd --zone=home --add-icmp-block=echo-reply
OR
sudo firewall-cmd --zone=home --remove-icmp-block=echo-reply

Všechny typy icmp přidané do zóny můžete zobrazit pomocí přepínače --list-icmp-blocks.

sudo firewall-cmd --zone=home --list-icmp-blocks

Jak používat přímé rozhraní k předávání nezpracovaných příkazů iptables

Firewall-cmd také poskytuje přímé možnosti (--direct), abyste získali přímější přístup k firewallu. To je užitečné pro ty, kteří mají základní znalosti iptables.

Důležité: Přímé možnosti byste měli používat pouze jako poslední možnost, pokud není možné použít běžné možnosti firewall-cmd vysvětlené výše.

Zde je příklad, jak předat nezpracované pravidlo iptables pomocí přepínače --add-rules. Tato pravidla můžete snadno odstranit nahrazením --add-rule za --remove-rule:

sudo firewall-cmd --direct --add-rule ipv4 filter IN_public_allow 0 -m tcp -p tcp --dport 80 -j ACCEPT

Další informace o iptables naleznete v této příručce: Jak nastavit bránu Iptables Firewall k povolení vzdáleného přístupu ke službám v systému Linux.

Pokud nejste obeznámeni se syntaxí iptables, můžete se rozhodnout pro „bohatý jazyk“ firewallu pro vytváření složitějších pravidel brány firewall snadno srozumitelným způsobem, jak je vysvětleno dále.

Jak používat bohatý jazyk ve firewallu

Rychlý jazyk (také známý jako rozsáhlá pravidla) se používá k přidávání složitějších pravidel brány firewall pro IPv4 a IPv6 bez znalosti syntaxe iptables.

Rozšiřuje funkce zóny (služba, port, blok icmp, maškaráda a dopředný port), které jsme pokryli. Podporuje zdrojové a cílové adresy, protokolování, akce a limity pro protokoly a akce.

K přidání rozšířených pravidel se používá --add-rich-rule. Tento příklad ukazuje, jak povolit nová připojení IPv4 a IPv6 pro službu http a protokol 1 za minutu pomocí auditu:

sudo firewall-cmd --add-rich-rule='rule service name="http" audit limit value="1/m" accept'

Chcete-li přidané pravidlo odstranit, nahraďte možnost --add-rich-rule za možnost --remove-rich-rule.

sudo firewall-cmd --remove-rich-rule='rule service name="http" audit limit value="1/m" accept'

Tato funkce také umožňuje blokovat nebo povolit provoz z konkrétní IP adresy. Následující příklad ukazuje, jak odmítnout připojení z IP 10.20.1.20.

sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.0.254" reject'

Jak povolit a zakázat režim paniky v bráně firewall

Panic mode je speciální režim pod firewallem, kde jsou všechny příchozí a odchozí pakety zahazovány a aktivní připojení po aktivaci vyprší.
Tento režim můžete povolit v nouzových situacích, kdy dochází k ohrožení vašeho síťového prostředí.

Pro dotaz na panický režim použijte volbu --query-panic.

sudo firewall-cmd --query-panic

Chcete-li povolit režim paniky, použijte možnost --panic-on. Můžete otestovat, zda funguje pomocí příkazu ping, jak je znázorněno. Protože je paket zahozen, název www.google.com nelze vyřešit, a proto se zobrazí chyba.

sudo firewall-cmd --panic-on
ping -c 2 www.google.com

Pro deaktivaci panického režimu použijte volbu --panic-off.

sudo firewall-cmd --panic-off

Jak zamknout firewall

Nezapomeňte, že jsme v základních informacích o firewallu zmínili, že místní aplikace nebo služby mohou změnit konfiguraci brány firewall, pokud běží s právy root. Můžete určit, které aplikace mohou požadovat změny brány firewall, a to zadáním v seznamu povolených položek uzamčení.

Tato funkce je ve výchozím nastavení vypnuta, můžete ji aktivovat nebo deaktivovat pomocí přepínače --lockdown-on nebo --lockdown.

sudo firewall-cmd --lockdown-on
OR
sudo firewall-cmd --lockdown-off

Všimněte si, že se doporučuje povolit nebo zakázat tuto funkci úpravou hlavního konfiguračního souboru, protože firewall-cmd nemusí existovat na seznamu povolených uzamčení, když povolíte uzamčení.

sudo vim /etc/firewalld/firewalld.conf

Najděte parametr Lockdown a změňte jeho hodnotu z no (znamená vypnuto) na yes (znamená zapnuto).

Lockdown=yes

Aby toto nastavení bylo trvalé, znovu načtěte firewall.

sudo firewall-cmd --reload
souhrn

Firewalld je snadno použitelná náhrada za službu iptables, která používá iptables jako backend. V tomto článku jsme si ukázali, jak nainstalovat balíček firewalld, vysvětlili jsme důležité funkce firewallu a diskutovali o tom, jak je nakonfigurovat v prostředí runtime a trvalé konfigurace.

Máte-li jakékoli dotazy nebo připomínky, neváhejte nás kontaktovat prostřednictvím formuláře pro komentáře níže. Další informace naleznete na manuálové stránce firewallu (man firewalld) nebo v dokumentaci k firewallu na webu projektu.