Installieren, Konfigurieren und Verwenden von Firewalld in CentOS und Ubuntu
Firewalld (Firewall-Daemon) ist eine Alternative zum iptables-Dienst für die dynamische Verwaltung der Firewall eines Systems mit Unterstützung für Netzwerk- (oder Firewall-) Zonen und bietet eine D-Bus-Schnittstelle für die Verwaltung von Konfigurationen. Es ist einfach zu bedienen und zu konfigurieren und ist jetzt das Standard-Firewall-Management-Tool auf RHEL/CentOS, Fedora und mehreren anderen Linux-Distributionen.
In diesem Artikel werden wir besprechen, wie Sie die System-Firewall mit firewalld konfigurieren und eine grundlegende Paketfilterung in CentOS/RHEL 7 und Ubuntu implementieren.
Die Grundlagen zu Firewalld
Firewalld besteht aus drei Schichten, nämlich:
- Core Layer: Verantwortlich für die Handhabung der Konfiguration und der Backends (siehe unten).
- D-Bus-Schnittstelle: das primäre Mittel zum Ändern und Erstellen der Firewall-Konfiguration.
- Backends: für die Interaktion mit netfilter (dem nativen Kernel-Modul, das für die Firewall verwendet wird). Dazu gehören iptables, ip6tables, ebtables, ipset, nft, linnftables; Netzwerk-Manager; und Module.
Es verwaltet Firewall-Regeln durch die Implementierung von Netzwerk-/Firewall-Zonen, die die Vertrauensstufe von Netzwerkverbindungen oder Schnittstellen definieren. Zu den weiteren unterstützten Firewall-Funktionen gehören Dienste, direkte Konfiguration (wird verwendet, um die rohe iptables-Syntax direkt zu übergeben), IPSets sowie ICMP-Typen.
Zwei Arten von Konfigurationsumgebungen werden von firewalld unterstützt:
- Laufzeitkonfiguration, die nur so lange wirksam ist, bis der Rechner neu gestartet wurde oder der firewalld-Dienst neu gestartet wurde
- Permanente Konfiguration, die gespeichert wird und dauerhaft funktioniert.
Das Befehlszeilentool firewall-cmd wird verwendet, um die Laufzeit und die permanente Konfiguration zu verwalten. Alternativ können Sie das Konfigurationstool firewall-config für die grafische Benutzeroberfläche (GUI) verwenden, um mit dem Daemon zu interagieren.
Darüber hinaus bietet firewalld eine klar definierte Schnittstelle für andere lokale Dienste oder Anwendungen, um Änderungen an den Firewall-Regeln direkt anzufordern, wenn sie mit Root-Rechten ausgeführt werden.
Die globale Konfigurationsdatei für firewalld befindet sich unter /etc/firewalld/firewalld.conf und die Firewall-Funktionen sind im XML-Format konfiguriert.
Wichtige Firewalld-Funktionen verstehen
Das zentrale Merkmal von firewalld sind Netzwerk-/Firewall-Zonen. Jedes andere Feature ist an eine Zone gebunden. Eine Firewallzone beschreibt die Vertrauensebene für eine Verbindung, Schnittstelle oder Quelladressbindung.
Die Standardkonfiguration enthält eine Reihe vordefinierter Zonen, die nach der Standardvertrauensstufe der Zonen von nicht vertrauenswürdig bis vertrauenswürdig sortiert sind: Drop, Block, Public, External, DMZ, Work, Home, Internal und Trusted. Sie werden in Dateien definiert, die im Verzeichnis /usr/lib/firewalld/zones gespeichert sind.
Sie können Ihre benutzerdefinierten Zonen mit dem CLI-Client konfigurieren oder hinzufügen oder einfach eine Zonendatei in /etc/firewalld/zones aus vorhandenen Dateien erstellen oder kopieren und bearbeiten.
Ein weiteres wichtiges Konzept unter firewalld sind Dienste. Ein Dienst wird mithilfe von Ports und Protokollen definiert. Diese Definitionen stellen einen bestimmten Netzwerkdienst dar, z. B. einen Webserver oder einen RAS-Dienst. Dienste werden in Dateien definiert, die im Verzeichnis /usr/lib/firewalld/services/ oder /etc/firewalld/services/ gespeichert sind.
Wenn Sie die grundlegenden Konzepte von iptables/ip6tables/ebtables kennen, können Sie auch die direkte Schnittstelle (oder Konfiguration) verwenden, um direkten Zugriff auf die Firewall zu erhalten. Für diejenigen, die keine iptables-Kenntnisse haben, können Sie die umfangreiche Sprache verwenden, um komplexere Firewall-Regeln für IPv4 und IPv6 zu erstellen.
So installieren Sie das Firewalld-Paket unter Linux
Unter CentOS 7 ist das firewalld-Paket vorinstalliert und Sie können es mit dem folgenden Befehl überprüfen.
$ rpm -qa firewalld
Unter Ubuntu 16.04 und 18.04 können Sie es mit dem Standard-Paketmanager installieren, wie gezeigt.
$ sudo apt install firewalld
Verwalten des Firewalld-Dienstes unter Linux
Firewalld ist ein regulärer systemd-Dienst, der über den Befehl systemctl verwaltet werden kann.
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
Nach dem Start des firewalld-Dienstes können Sie auch mit dem Tool firewall-cmd überprüfen, ob der Daemon ausgeführt wird oder nicht (falls es nicht aktiv ist, gibt dieser Befehl "nicht ausgeführt" aus).
$ sudo firewall-cmd --state
Wenn Sie Änderungen dauerhaft speichern, können Sie firewalld neu laden. Dadurch werden Firewallregeln neu geladen und Statusinformationen werden beibehalten. Die aktuelle permanente Konfiguration wird zur neuen Laufzeitkonfiguration.
$ sudo firewall-cmd --reload
So arbeiten Sie mit Firewall-Zonen in Firewalld
Führen Sie die folgenden Befehle aus, um eine Liste aller verfügbaren Firewallzonen und -dienste abzurufen.
$ sudo firewall-cmd --get-zones
sudo firewall-cmd --get-services
Die Standardzone ist die Zone, die für jede Firewall-Funktion verwendet wird, die nicht explizit an eine andere Zone gebunden ist. Sie können die Standardzone für Netzwerkverbindungen und Schnittstellen abrufen, indem Sie Folgendes ausführen.
$ sudo firewall-cmd --get-default-zone
Um die Standardzone festzulegen, z. B. auf extern, verwenden Sie den folgenden Befehl. Beachten Sie, dass das Hinzufügen der Option --permanent die Konfiguration dauerhaft setzt (oder die Abfrage von Informationen aus der permanenten Konfigurationsumgebung ermöglicht).
$ sudo firewall-cmd --set-default-zone=external
OR
sudo firewall-cmd --set-default-zone=external --permanent
sudo firewall-cmd --reload
Als Nächstes sehen wir uns an, wie Sie einer Zone eine Schnittstelle hinzufügen. In diesem Beispiel wird gezeigt, wie Sie Ihren Drahtlosnetzwerkadapter (wlp1s0) zur Zone Home hinzufügen, die in Home-Bereichen verwendet wird.
$ sudo firewall-cmd --zone=home --add-interface=wlp1s0
Eine Schnittstelle kann nur zu einer einzelnen Zone hinzugefügt werden. Um sie in eine andere Zone zu verschieben, verwenden Sie den Schalter --change-interface wie gezeigt, oder entfernen Sie sie mit dem Schalter –remove-interface aus der vorherigen Zone, und fügen Sie sie dann der neuen Zone hinzu.
Angenommen, Sie möchten eine Verbindung zu einem öffentlichen WLAN-Netzwerk herstellen, sollten Sie Ihre drahtlose Schnittstelle wie folgt zurück in die öffentliche Zone verschieben:
$ sudo firewall-cmd --zone=public --add-interface=wlp1s0
sudo firewall-cmd --zone=public --change-interface=wlp1s0
Sie können viele Zonen gleichzeitig verwenden. Um eine Liste aller aktiven Zonen mit aktivierten Funktionen wie Schnittstellen, Dienste, Ports, Protokolle zu erhalten, führen Sie Folgendes aus:
$ sudo firewall-cmd --get-active-zones
In Bezug auf den vorherigen Punkt, Wenn Sie mehr Informationen über eine bestimmte Zone finden möchten, d.h. alles, was in ihr hinzugefügt oder aktiviert wurde, verwenden Sie einen der folgenden Befehle:
$ sudo firewall-cmd --zone=home --list-all
OR
sudo firewall-cmd --info-zone public
Eine weitere nützliche Option ist --get-target, die Ihnen das Ziel einer permanenten Zone anzeigt. Ein Ziel ist eines der folgenden Ziele: default, ACCEPT, DROP, REJECT. Sie können das Ziel verschiedener Zonen überprüfen:
$ 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
So öffnen und blockieren Sie Ports in Firewalld
Um einen Port (oder eine Port/Protokoll-Kombination) in der Firewall zu öffnen, fügen Sie ihn einfach in einer Zone mit der Option --add-port hinzu. Wenn Sie die Zone nicht explizit angeben, wird sie in der Standardzone aktiviert.
Das folgende Beispiel zeigt, wie Sie Port 80 und 443 hinzufügen, um eingehenden Webdatenverkehr über das HTTP- bzw. HTTPS-Protokoll zuzulassen:
$ sudo firewall-cmd --zone=public --permanent --add-port=80/tcp --add-port=443/tcp
Laden Sie als nächstes firewalld neu und überprüfen Sie die aktivierten Funktionen in der öffentlichen Zone erneut, Sie sollten die gerade hinzugefügten Ports sehen können.
$ sudo firewall-cmd --reload
sudo firewall-cmd --info-zone public
Das Blockieren oder Schließen eines Ports in der Firewall ist ebenso einfach, entfernen Sie ihn einfach mit der Option --remove-port aus einer Zone. Zum Beispiel, um die Ports 80 und 443 in der öffentlichen Zone zu schließen.
$ sudo firewall-cmd --zone=public --permanent --remove-port=80/tcp --remove-port=443/tcp
Anstatt einen Port oder eine Port/Protokoll-Kombination zu verwenden, können Sie den Dienstnamen verwenden, dem ein Port zugewiesen ist, wie im nächsten Abschnitt beschrieben.
So öffnen und blockieren Sie Dienste in Firewalld
Um einen Dienst in der Firewall zu öffnen, aktivieren Sie ihn mit der Option --add-service. Wenn die Zone weggelassen wird, wird die Standardzone verwendet.
Mit dem folgenden Befehl wird der HTTP-Dienst in der öffentlichen Zone dauerhaft aktiviert.
$ sudo firewall-cmd --zone=public --permanent --add-service=http
sudo firewall-cmd --reload
Die Option --remove-service kann verwendet werden, um einen Dienst zu deaktivieren.
$ sudo firewall-cmd --zone=public --permanent --remove-service=http
sudo firewall-cmd --reload
Aktivieren und Deaktivieren von IP-Maskerade mit Firewalld
IP Masquerading (auch bekannt als IPMASQ oder MASQ) ist ein NAT-Mechanismus (Network Address Translation) in Linux-Netzwerken, der es Ihren Hosts in einem Netzwerk mit privaten IP-Adressen ermöglicht, über die von Ihrem Linux-Server (IPMASQ-Gateway) zugewiesene öffentliche IP-Adresse mit dem Internet zu kommunizieren.
Es handelt sich um eine Eins-zu-Viele-Zuordnung. Der Datenverkehr von Ihren unsichtbaren Hosts wird für andere Computer im Internet so angezeigt, als käme er von Ihrem Linux-Server.
Sie können das IP-Masquerading in einer gewünschten Zone aktivieren, z. B. in der öffentlichen Zone. Bevor Sie dies tun, überprüfen Sie jedoch zunächst, ob die Maskierung aktiv ist oder nicht (ein "Nein" bedeutet, dass es deaktiviert ist, und ein "Ja" bedeutet etwas anderes).
$ sudo firewall-cmd --zone=public --query-masquerade
sudo firewall-cmd --zone=public --add-masquerade
Ein typischer Anwendungsfall für Masquerading ist die Portweiterleitung. Angenommen, Sie möchten SSH von einem Remote-Rechner zu einem Host in Ihrem internen Netzwerk mit der IP 10.20.1.3 herstellen, auf dem der sshd-Daemon auf Port 5000 lauscht.
Sie können alle Verbindungen zu Port 22 auf Ihrem Linux-Server an den vorgesehenen Port auf Ihrem Zielhost weiterleiten, indem Sie Folgendes ausgeben:
$ sudo firewall-cmd --zone=public --add-forward-port=port=22=proto=tcp:toport=5000:toaddr=10.20.1.3
Um die Maskierung in einer Zone zu deaktivieren, verwenden Sie den Schalter --remove-masquerade.
$ sudo firewall-cmd --zone=public --remove-masquerade
Aktivieren und Deaktivieren von IMCP-Nachrichten in Firewalld
ICMP-Nachrichten (Internet Control Message Protocol) sind entweder Informationsanfragen oder Antworten auf Informationsanfragen oder unter Fehlerbedingungen.
Sie können ICMP-Nachrichten in der Firewall aktivieren oder deaktivieren, aber vorher werden zunächst alle unterstützten ICMP-Typen aufgelistet.
$ sudo firewall-cmd --get-icmptypes
So fügen Sie einen gewünschten Blocktyp hinzu oder entfernen ihn.
$ sudo firewall-cmd --zone=home --add-icmp-block=echo-reply
OR
sudo firewall-cmd --zone=home --remove-icmp-block=echo-reply
Sie können alle ICMP-Typen, die in einer Zone hinzugefügt wurden, mit dem Schalter --list-icmp-blocks anzeigen.
$ sudo firewall-cmd --zone=home --list-icmp-blocks
So verwenden Sie die direkte Schnittstelle, um unformatierte iptables-Befehle zu übergeben
firewall-cmd bietet auch direkte Optionen (--direct), mit denen Sie einen direkteren Zugriff auf die Firewall erhalten können. Dies ist nützlich für diejenigen, die über grundlegende Kenntnisse von iptables verfügen.
Wichtig: Sie sollten die direkten Optionen nur als letzten Ausweg verwenden, wenn es nicht möglich ist, die oben beschriebenen regulären firewall-cmd-Optionen zu verwenden.
Hier ist ein Beispiel für das Übergeben einer unformatierten iptables-Regel mit dem Schalter --add-rules. Sie können diese Regeln einfach entfernen, indem Sie --add-rule durch --remove-rule ersetzen:
$ sudo firewall-cmd --direct --add-rule ipv4 filter IN_public_allow 0 -m tcp -p tcp --dport 80 -j ACCEPT
Weitere Informationen zu iptables finden Sie in dieser Anleitung: So richten Sie eine iptables-Firewall ein, um den Remotezugriff auf Dienste unter Linux zu ermöglichen.
Wenn Sie mit der iptables-Syntax nicht vertraut sind, können Sie sich für die "Rich Language" von firewalld entscheiden, um komplexere Firewall-Regeln auf leicht verständliche Weise zu erstellen, wie im Folgenden erläutert.
So verwenden Sie Rich Language in Firewalld
Die Rich-Sprache (auch als Rich-Regeln bezeichnet) wird verwendet, um komplexere Firewall-Regeln für IPv4 und IPv6 hinzuzufügen, ohne die Syntax von iptables kennen zu müssen.
Es erweitert die Zonenfunktionen (service, port, icmp-block, masquerade und forward-port), die wir behandelt haben. Es unterstützt Quell- und Zieladressen, Protokollierung, Aktionen und Limits für Protokolle und Aktionen.
Die --add-rich-rule wird verwendet, um Rich-Regeln hinzuzufügen. In diesem Beispiel wird gezeigt, wie neue IPv4- und IPv6-Verbindungen für Dienst-HTTP und Protokoll 1 pro Minute mithilfe der Überwachung zugelassen werden:
$ sudo firewall-cmd --add-rich-rule='rule service name="http" audit limit value="1/m" accept'
Um die hinzugefügte Regel zu entfernen, ersetzen Sie die Option --add-rich-rule durch --remove-rich-rule.
$ sudo firewall-cmd --remove-rich-rule='rule service name="http" audit limit value="1/m" accept'
Diese Funktion ermöglicht auch das Blockieren oder Zulassen von Datenverkehr von einer bestimmten IP-Adresse. Das folgende Beispiel zeigt, wie Verbindungen von der IP 10.20.1.20 abgelehnt werden.
$ sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.0.254" reject'
So aktivieren und deaktivieren Sie den Panikmodus in Firewalld
Der Panikmodus ist ein spezieller Modus unter firewalld, in dem alle ein- und ausgehenden Pakete verworfen werden und aktive Verbindungen nach der Aktivierung ablaufen.
Sie können diesen Modus in Notfallsituationen aktivieren, in denen eine Bedrohung für Ihre Netzwerkumgebung auftritt.
Um den Panikmodus abzufragen, verwenden Sie die Option --query-panic.
$ sudo firewall-cmd --query-panic
Um den Panikmodus zu aktivieren, verwenden Sie die Option --panic-on. Sie können testen, ob es funktioniert, indem Sie den Befehl ping verwenden, wie gezeigt. Da das Paket verworfen wird, kann der Name www.google.com nicht aufgelöst werden, daher der angezeigte Fehler.
$ sudo firewall-cmd --panic-on
ping -c 2 www.google.com
Um den Panikmodus zu deaktivieren, verwenden Sie die Option --panic-off.
$ sudo firewall-cmd --panic-off
So sperren Sie Firewalld
Denken Sie daran, dass wir unter den Grundlagen über firewalld erwähnt haben, dass lokale Anwendungen oder Dienste in der Lage sind, die Firewall-Konfiguration zu ändern, wenn sie mit Root-Rechten ausgeführt werden. Sie können steuern, welche Anwendungen Firewall-Änderungen anfordern können, indem Sie diese in einer Sperr-Whitelist angeben.
Diese Funktion ist standardmäßig deaktiviert, Sie können sie mit den Schaltern --lockdown-on oder --lockdown rezeptiv aktivieren oder deaktivieren.
$ sudo firewall-cmd --lockdown-on
OR
sudo firewall-cmd --lockdown-off
Beachten Sie, dass es empfohlen wird, diese Funktion zu aktivieren oder zu deaktivieren, indem Sie die Hauptkonfigurationsdatei bearbeiten, da die firewall-cmd möglicherweise nicht in der Sperrungs-Whitelist vorhanden ist, wenn Sie die Sperre aktivieren.
$ sudo vim /etc/firewalld/firewalld.conf
Suchen Sie den Parameter Lockdown und ändern Sie seinen Wert von no (bedeutet aus) in yes (bedeutet an).
Lockdown=yes
Um diese Einstellung dauerhaft zu machen, laden Sie firewalld.
$ sudo firewall-cmd --reload
Zusammenfassung
Firewalld ist ein einfach zu bedienender Ersatz für den iptables-Dienst, der iptables als Backend verwendet. In diesem Artikel haben wir gezeigt, wie man das firewalld-Paket installiert, die wichtigen Funktionen von firewalld erklärt und besprochen, wie man sie in der Laufzeit- und permanenten Konfigurationsumgebung konfiguriert.
Wenn Sie Fragen oder Anmerkungen haben, können Sie uns gerne über das untenstehende Kommentarformular erreichen. Weitere Informationen finden Sie in der firewalld-Handbuchseite (man firewalld) oder in der firewalld-Dokumentation auf der Projektwebsite.







