Firewall je metoda pro monitorování a filtrování příchozího a odchozího síťového provozu. Funguje tak, že definuje sadu bezpečnostních pravidel, která určují, zda povolit nebo blokovat konkrétní provoz. Správně nakonfigurovaný firewall je jedním z nejdůležitějších aspektů celkového zabezpečení systému.
CentOS 8 se dodává s démonem brány firewall s názvem firewalld. Jedná se o kompletní řešení s rozhraním D-Bus, které vám umožňuje dynamicky spravovat systémový firewall.
V tomto tutoriálu budeme hovořit o tom, jak nakonfigurovat a spravovat firewall na CentOS 8. Vysvětlíme také základní koncepty FirewallD.
Předpoklady #
Chcete-li nakonfigurovat službu brány firewall, musíte být přihlášeni jako uživatel root nebo uživatel s právy sudo.
Základní koncepty brány firewall #
firewalld používá koncepty zón a služeb. Na základě zón a služeb, které nakonfigurujete, můžete ovládat, jaký provoz je povolen nebo blokován do a ze systému.
Firewalld lze konfigurovat a spravovat pomocí firewall-cmd
nástroj příkazového řádku.
V CentOS 8 je iptables nahrazeno nftables jako výchozí backend firewallu pro firewalld démona.
Zóny brány firewall #
Zóny jsou předdefinované sady pravidel, které určují úroveň důvěryhodnosti sítí, ke kterým je váš počítač připojen. K zóně můžete přiřadit síťová rozhraní a zdroje.
Níže jsou zóny poskytované FirewallD seřazené podle úrovně důvěryhodnosti zóny od nedůvěryhodné po důvěryhodné:
- pokles :Všechna příchozí připojení jsou přerušena bez jakéhokoli upozornění. Jsou povolena pouze odchozí připojení.
- blokovat :Všechna příchozí připojení jsou odmítnuta s
icmp-host-prohibited
zprávu proIPv4
aicmp6-adm-prohibited
pro IPv6n. Jsou povolena pouze odchozí připojení. - veřejné :Pro použití v nedůvěryhodných veřejných prostorách. Ostatním počítačům v síti nedůvěřujete, ale můžete povolit vybraná příchozí připojení.
- externí :Pro použití v externích sítích s povoleným maskováním NAT, když váš systém funguje jako brána nebo směrovač. Jsou povolena pouze vybraná příchozí připojení.
- interní :Pro použití v interních sítích, kdy váš systém funguje jako brána nebo směrovač. Ostatní systémy v síti jsou obecně důvěryhodné. Jsou povolena pouze vybraná příchozí připojení.
- dmz :Používá se pro počítače umístěné ve vaší demilitarizované zóně, které mají omezený přístup ke zbytku vaší sítě. Jsou povolena pouze vybraná příchozí připojení.
- práce :Používá se pro pracovní stroje. Ostatní počítače v síti jsou obecně důvěryhodné. Jsou povolena pouze vybraná příchozí připojení.
- domů :Používá se pro domácí stroje. Ostatní počítače v síti jsou obecně důvěryhodné. Jsou povolena pouze vybraná příchozí připojení.
- důvěryhodný :Všechna síťová připojení jsou akceptována. Důvěřujte všem počítačům v síti.
Služby brány firewall #
Služby brány firewall jsou předdefinovaná pravidla, která platí v rámci zóny a definují nezbytná nastavení pro povolení příchozího provozu pro konkrétní službu. Služby vám umožňují snadno provádět několik úkolů v jediném kroku.
Služba může například obsahovat definice o otevírání portů, přesměrování provozu a další.
Běh brány firewall a trvalá nastavení #
Firewalld používá dvě oddělené konfigurační sady, runtime a trvalou konfiguraci.
Konfigurace runtime je skutečná spuštěná konfigurace a nezůstává po restartu. Když se démon firewalld spustí, načte trvalou konfiguraci, která se stane konfigurací běhového prostředí.
Ve výchozím nastavení při provádění změn v konfiguraci brány firewall pomocí firewall-cmd
obslužný program, změny se použijí na konfiguraci runtime. Aby byly změny trvalé, připojte --permanent
možnost k příkazu.
Chcete-li použít změny v obou konfiguračních sadách, můžete použít jednu z následujících dvou metod:
-
Změňte konfiguraci runtime a nastavte ji na trvalou:
sudo firewall-cmd <options>
sudo firewall-cmd --runtime-to-permanent
-
Změňte trvalou konfiguraci a znovu načtěte démona brány firewall:
sudo firewall-cmd --permanent <options>
sudo firewall-cmd --reload
Povolení brány FirewallD #
Na CentOS 8 je firewalld nainstalován a povolen ve výchozím nastavení. Pokud z nějakého důvodu není ve vašem systému nainstalován, můžete démona nainstalovat a spustit zadáním:
sudo dnf install firewalld
sudo systemctl enable firewalld --now
Stav služby brány firewall můžete zkontrolovat pomocí:
sudo firewall-cmd --state
Pokud je povolena brána firewall, měl by příkaz vypsat running
. V opačném případě uvidíte not running
.
Zóny brány firewall #
Pokud jste ji nezměnili, výchozí zóna je nastavena na public
a všechna síťová rozhraní jsou přiřazena této zóně.
Výchozí zóna je ta, která se používá pro vše, co není explicitně přiřazeno jiné zóně.
Výchozí zónu zobrazíte zadáním:
sudo firewall-cmd --get-default-zone
public
Chcete-li získat seznam všech dostupných zón, zadejte:
sudo firewall-cmd --get-zones
block dmz drop external home internal public trusted work
Chcete-li zobrazit aktivní zóny a k nim přiřazená síťová rozhraní:
sudo firewall-cmd --get-active-zones
Níže uvedený výstup ukazuje, že rozhraní eth0
a eth1
jsou přiřazeny k public
zóna:
public
interfaces: eth0 eth1
Nastavení konfigurace zóny můžete vytisknout pomocí:
sudo firewall-cmd --zone=public --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0 eth1
sources:
services: ssh dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Z výše uvedeného výstupu vidíme, že veřejná zóna je aktivní a používá výchozí cíl, kterým je REJECT
. Výstup také ukazuje, že zóna je používána eth0
a eth1
rozhraní a umožňuje klienty DHCP a provoz SSH.
Pokud chcete zkontrolovat konfigurace všech dostupných zón, zadejte:
sudo firewall-cmd --list-all-zones
Příkaz vytiskne obrovský seznam s nastavením všech dostupných zón.
Změna cíle zóny #
Cíl definuje výchozí chování zóny pro příchozí provoz, který není specifikován. Lze jej nastavit na jednu z následujících možností:default
, ACCEPT
, REJECT
a DROP
.
Chcete-li nastavit cíl zóny, určete zónu pomocí --zone
a cíl pomocí --set-target
možnost.
Chcete-li například změnit public
cíl zóny na DROP
běželi byste:
sudo firewall-cmd --zone=public --set-target=DROP
Přiřazení rozhraní k jiné zóně #
Můžete vytvořit specifické sady pravidel pro různé zóny a přiřadit jim různá rozhraní. To je zvláště užitečné, když máte na svém počítači více rozhraní.
Chcete-li přiřadit rozhraní k jiné zóně, určete zónu pomocí --zone
a rozhraní s --change-interface
možnost.
Například následující příkaz přiřadí eth1
rozhraní k work
zóna:
sudo firewall-cmd --zone=work --change-interface=eth1
Ověřte změny zadáním:
sudo firewall-cmd --get-active-zones
work
interfaces: eth1
public
interfaces: eth0
Změna výchozí zóny #
Chcete-li změnit výchozí zónu, použijte --set-default-zone
následuje název zóny, kterou chcete nastavit jako výchozí.
Chcete-li například změnit výchozí zónu na home
spustíte následující příkaz:
sudo firewall-cmd --set-default-zone=home
Ověřte změny pomocí:
sudo firewall-cmd --get-default-zone
home
Vytváření nových zón #
Firewalld také umožňuje vytvářet vlastní zóny. To je užitečné, když chcete vytvořit pravidla pro jednotlivé aplikace.
V následujícím příkladu vytvoříme novou zónu s názvem memcached
, otevřete port 11211
a povolit přístup pouze z 192.168.100.30
IP adresa:
-
Vytvořte zónu:
sudo firewall-cmd --new-zone=memcached --permanent
-
Přidejte pravidla do zóny:
sudo firewall-cmd --zone=memcached --add-port=11211/udp --permanent
sudo firewall-cmd --zone=memcached --add-port=11211/tcp --permanent
sudo firewall-cmd --zone=memcached --add-source=192.168.100.30/32 --permanent
-
Znovu načtěte démona brány firewall, abyste aktivovali změny:
sudo firewall-cmd --reload
Služby brány firewall #
S firewalld můžete povolit provoz pro konkrétní porty a/nebo zdroje na základě předdefinovaných pravidel nazývaných služby.
Chcete-li získat seznam všech výchozích dostupných typů služeb:
sudo firewall-cmd --get-services
Další informace o každé službě naleznete otevřením příslušného souboru .xml v /usr/lib/firewalld/services
adresář. Například služba HTTP je definována takto:
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>WWW (HTTP)</short>
<description>HTTP is the protocol used to serve Web pages. If you plan to make your Web server publicly available, enable this option. This option is not required for viewing pages locally or developing Web pages.</description>
<port protocol="tcp" port="80"/>
</service>
Chcete-li povolit příchozí provoz HTTP (port 80) pro rozhraní ve veřejné zóně, pouze pro aktuální relaci (konfiguraci runtime) typu:
sudo firewall-cmd --zone=public --add-service=http
Pokud upravujete výchozí zónu, můžete vynechat --zone
volba.
Chcete-li ověřit, že služba byla úspěšně přidána, použijte --list-services
možnost:
sudo firewall-cmd --zone=public --list-services
ssh dhcpv6-client http
Chcete-li po restartu ponechat otevřený port 80, spusťte stejný příkaz znovu s --permanent
možnost nebo spusťte:
sudo firewall-cmd --runtime-to-permanent
Použijte --list-services
spolu s --permanent
možnost ověření vašich změn:
sudo firewall-cmd --permanent --zone=public --list-services
ssh dhcpv6-client http
Syntaxe pro odebrání služby je stejná jako při přidávání služby. Stačí použít --remove-service
místo --add-service
příznak:
sudo firewall-cmd --zone=public --remove-service=http --permanent
Výše uvedený příkaz odstraní http
služby z trvalé konfigurace veřejné zóny.
Vytvoření nové služby FirewallD #
Jak jsme již uvedli, výchozí služby jsou uloženy v /usr/lib/firewalld/services
adresář. Nejjednodušší způsob, jak vytvořit novou službu, je zkopírovat existující soubor služby do /etc/firewalld/services
adresář, což je umístění pro uživatelem vytvořené služby a upravte nastavení souboru.
Chcete-li například vytvořit definici služby pro server Plex Media Server, můžete použít soubor služby SSH:
sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/plexmediaserver.xml
Otevřete nově vytvořený plexmediaserver.xml
a změňte krátký název a popis služby v <short>
a <description>
značky. Nejdůležitější tag, který musíte změnit, je port
tag, který definuje číslo portu a protokol, který chcete otevřít.
V následujícím příkladu otevíráme porty 1900
UDP a 32400
TCP.
<?xml version="1.0" encoding="utf-8"?>
<service version="1.0">
<short>plexmediaserver</short>
<description>Plex is a streaming media server that brings all your video, music and photo collections together and stream them to your devices at anytime and from anywhere.</description>
<port protocol="udp" port="1900"/>
<port protocol="tcp" port="32400"/>
</service>
Uložte soubor a znovu načtěte službu FirewallD:
sudo firewall-cmd --reload
Nyní můžete použít plexmediaserver
službu ve vašich zónách stejně jako kterákoli jiná služba.
Otevření portů a zdrojových IP adres #
Firewalld také umožňuje rychle povolit veškerý provoz z důvěryhodné IP adresy nebo na konkrétním portu bez vytvoření definice služby.
Otevření zdrojové adresy IP #
Chcete-li povolit veškerý příchozí provoz z konkrétní IP adresy (nebo rozsahu), určete zónu pomocí --zone
a zdrojovou IP s --add-source
možnost.
Chcete-li například povolit veškerý příchozí provoz z adresy 192.168.1.10 ve public
zóna, spustit:
sudo firewall-cmd --zone=public --add-source=192.168.1.10
Udělejte nové pravidlo trvalým:
sudo firewall-cmd --runtime-to-permanent
Ověřte změny pomocí následujícího příkazu:
sudo firewall-cmd --zone=public --list-sources
192.168.1.10
Syntaxe pro odebrání zdrojové IP je stejná jako při přidání. Stačí použít --remove-source
místo --add-source
možnost:
sudo firewall-cmd --zone=public --remove-source=192.168.1.10
Otevření zdrojového portu #
Chcete-li povolit veškerý příchozí provoz na daném portu, určete zónu pomocí --zone
a port a protokol s --add-port
možnost.
Například pro otevření portu 8080
ve veřejné zóně pro aktuální relaci, kterou jste spustili:
sudo firewall-cmd --zone=public --add-port=8080/tcp
Protokol může být buď tcp
, udp
, sctp
nebo dccp
.
Ověřte změny:
sudo firewall-cmd --zone=public --list-ports
8080
Chcete-li zachovat port otevřený i po restartu, přidejte pravidlo do trvalého nastavení spuštěním stejného příkazu pomocí --permanent
flag nebo provedením:
sudo firewall-cmd --runtime-to-permanent
Syntaxe pro odebrání portu je stejná jako při přidávání portu. Stačí použít --remove-port
místo --add-port
možnost.
sudo firewall-cmd --zone=public --remove-port=8080/tcp
Porty pro předávání #
Chcete-li přesměrovat provoz z jednoho portu na druhý, nejprve povolte maskování pro požadovanou zónu pomocí --add-masquerade
volba. Chcete-li například povolit maskování pro external
zóna, zadejte:
sudo firewall-cmd --zone=external --add-masquerade
Přesměrovat provoz z jednoho portu na druhý na IP adrese #
V následujícím příkladu přesměrováváme provoz z portu 80
na port 8080
na stejném serveru:
sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080
Přesměrovat provoz na jinou IP adresu #
V následujícím příkladu přesměrováváme provoz z portu 80
na port 80
na serveru s IP 10.10.10.2
:
sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toaddr=10.10.10.2
Přesměrovat provoz na jiný server na jiném portu #
V následujícím příkladu přesměrováváme provoz z portu 80
na port 8080
na serveru s IP 10.10.10.2
:
sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=10.10.10.2
Aby bylo dopředné pravidlo trvalé, použijte:
sudo firewall-cmd --runtime-to-permanent