Správně nakonfigurovaný firewall je jedním z nejdůležitějších aspektů celkového zabezpečení systému.
Firewall je kompletní řešení firewallu, které spravuje systémová pravidla iptables a poskytuje rozhraní D-Bus pro provoz na nich. Počínaje CentOS 7 nahrazuje FirewallD iptables jako výchozí nástroj pro správu brány firewall.
V tomto tutoriálu vám ukážeme, jak nastavit firewall s FirewallD na vašem systému CentOS 7, a vysvětlíme vám základní koncepty FirewallD.
Předpoklady #
Než začnete s tímto výukovým programem, ujistěte se, že jste přihlášeni na svůj server pomocí uživatelského účtu s právy sudo nebo s uživatelem root. Nejlepším postupem je spouštět administrativní příkazy jako uživatel sudo namísto root. Pokud ve svém systému CentOS nemáte uživatele sudo, můžete si jej vytvořit podle těchto pokynů.
Základní koncepty brány firewall #
FirewallD používá koncepty zón a služeb namísto řetězce a pravidel iptables. Na základě zón a služeb, které nakonfigurujete, můžete ovládat, jaký provoz je povolen nebo zakázán do a ze systému.
FirewallD lze konfigurovat a spravovat pomocí firewall-cmd
nástroj příkazového řádku.
Zóny brány firewall #
Zóny jsou předdefinované sady pravidel určujících, jaký provoz by měl být povolen na základě úrovně důvěry v sítích, 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.
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 není trvalá při restartování. Když se služba 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é, musíte použít --permanent
možnost.
Instalace a aktivace brány FirewallD #
-
Firewalld je ve výchozím nastavení nainstalován na CentOS 7, ale pokud není nainstalován ve vašem systému, můžete balíček nainstalovat zadáním:
sudo yum install firewalld
-
Služba brány firewall je ve výchozím nastavení zakázána. Stav brány firewall můžete zkontrolovat pomocí:
sudo firewall-cmd --state
Pokud jste právě nainstalovali nebo nikdy předtím neaktivovali, příkaz vypíše
not running
. V opačném případě uvidíterunning
. -
Chcete-li spustit službu FirewallD a povolit ji při spouštění typu:
sudo systemctl start firewalld
sudo systemctl enable firewalld
Práce se zónami brány firewall #
Po prvním povolení služby FirewallD bude public
zóna je nastavena jako výchozí zóna. Výchozí zónu můžete zobrazit 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
Ve výchozím nastavení je všem síťovým rozhraním přiřazena výchozí zóna. Chcete-li zkontrolovat, jaké zóny používají vaše síťová rozhraní typu:
sudo firewall-cmd --get-active-zones
public
interfaces: eth0 eth1
Výše uvedený výstup nám říká, že obě rozhraní eth0
a eth1
jsou přiřazeny do veřejné zóny.
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 nastavená jako výchozí, kterou používají oba eth0
a eth1
rozhraní. Rovněž jsou povolena připojení související s klientem DHCP a 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 zóny rozhraní #
Zónu rozhraní můžete snadno změnit pomocí --zone
možnost v kombinaci s --change-interface
volba. Následující příkaz přiřadí eth1
rozhraní do pracovní zóny:
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 domácí, měli byste spustit následující příkaz:
sudo firewall-cmd --set-default-zone=home
Ověřte změny pomocí:
sudo firewall-cmd --get-default-zone
home
Otevření portu nebo služby #
S FirewallD můžete povolit provoz pro konkrétní porty 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
Pokud chcete po restartu ponechat otevřený port 80, budete muset zadat stejný příkaz ještě jednou, ale tentokrát s --permanent
možnost:
sudo firewall-cmd --permanent --zone=public --add-service=http
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
možnost:
sudo firewall-cmd --zone=public --remove-service=http --permanent
Výše uvedený příkaz odebere službu http z trvalé konfigurace veřejné zóny.
Co když provozujete aplikaci, jako je Plex Media Server, pro kterou není k dispozici žádná vhodná služba?
V takových situacích máte dvě možnosti. Můžete buď otevřít příslušné porty, nebo definovat novou službu FirewallD.
Například server Plex naslouchá na portu 32400 a používá TCP, k otevření portu ve veřejné zóně pro aktuální relaci použijte --add-port=
možnost:
sudo firewall-cmd --zone=public --add-port=32400/tcp
Protokoly mohou být buď tcp
nebo udp
.
Chcete-li ověřit, že port byl úspěšně přidán, použijte --list-ports
možnost:
sudo firewall-cmd --zone=public --list-ports
32400/tcp
Chcete-li zachovat port 32400
otevřete po restartu, přidejte pravidlo do trvalého nastavení spuštěním stejného příkazu pomocí --permanent
možnost.
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=32400/tcp
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.
Například k vytvoření definice služby pro Plex Media Server můžeme 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žba ve vašich zónách stejná jako jakákoli jiná služba..
Port pro přesměrování s firewallem #
Chcete-li přesměrovat provoz z jednoho portu na jiný port nebo adresu, nejprve povolte maskování pro požadovanou zónu pomocí --add-masquerade
přepínač. Chcete-li například povolit maskování pro external
typ zóny:
sudo firewall-cmd --zone=external --add-masquerade
- Přesměrovat provoz z jednoho portu na druhý na stejném serveru
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 jiný server
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
Pokud chcete, aby forward byl trvalý, stačí připojit --permanent
možnost.
Vytvoření sady pravidel pomocí brány FirewallD #
V následujícím příkladu si ukážeme, jak nakonfigurovat firewall, pokud jste provozovali webový server. Předpokládáme, že váš server má pouze jedno rozhraní eth0
a chcete povolit příchozí provoz pouze na portech SSH, HTTP a HTTPS.
-
Změňte výchozí zónu na dmz
Použijeme dmz (demilitarizovanou) zónu, protože ve výchozím nastavení povoluje pouze provoz SSH. Chcete-li změnit výchozí zónu na dmz a přiřadit ji k
eth0
rozhraní, spusťte následující příkazy:sudo firewall-cmd --set-default-zone=dmz
sudo firewall-cmd --zone=dmz --add-interface=eth0
-
Otevřete porty HTTP a HTTPS:
Chcete-li otevřít porty HTTP a HTTPS, přidejte do zóny dmz trvalá pravidla služby:
sudo firewall-cmd --permanent --zone=dmz --add-service=http
sudo firewall-cmd --permanent --zone=dmz --add-service=https
Proveďte změny okamžitě znovu načtením brány firewall:
sudo firewall-cmd --reload
-
Ověřte změny
Chcete-li zkontrolovat nastavení konfigurace zóny dmz, zadejte:
sudo firewall-cmd --zone=dmz --list-all
dmz (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: ssh http https ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
Výstup výše nám říká, že dmz je výchozí zóna a je aplikována na
eth0
rozhraní a porty ssh (22) http (80) a https (443) jsou otevřené.