Website-Suche

So installieren, konfigurieren und verwenden Sie Firewalld in CentOS und Ubuntu


Firewalld (Firewall-Daemon) ist eine Alternative zum iptables-Dienst zur dynamischen Verwaltung der Firewall eines Systems mit Unterstützung für Netzwerk- (oder Firewall-)Zonen und bietet eine D-Bus-Schnittstelle zur Verwaltung von Konfigurationen. Es ist einfach zu verwenden und zu konfigurieren und jetzt das Standard-Firewall-Verwaltungstool auf RHEL/CentOS, Fedora und mehreren anderen Linux-Distributionen.

In diesem Artikel besprechen wir, wie man die System-Firewall mit firewalld konfiguriert und die grundlegende Paketfilterung in CentOS/RHEL 7 und Ubuntu implementiert.

Die Grundlagen zu Firewalld

Firewalld besteht aus drei Schichten:

  • Kernschicht: Verantwortlich für die Verwaltung der Konfiguration und der Backends (unten aufgeführt).
  • D-Bus-Schnittstelle: das wichtigste 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 den Vertrauensgrad von Netzwerkverbindungen oder -schnittstellen definieren. Zu den weiteren unterstützten Firewall-Funktionen gehören Dienste, direkte Konfiguration (zur direkten Weitergabe der rohen iptables-Syntax), IPSets sowie ICMP-Typen.

Firewalld unterstützt zwei Arten von Konfigurationsumgebungen:

  • Laufzeitkonfiguration, die nur wirksam ist, bis die Maschine neu gestartet oder der Firewalld-Dienst neu gestartet wurde
  • Permanente Konfiguration, die gespeichert wird und dauerhaft funktioniert.

Das Befehlszeilentool firewall-cmd wird zur Verwaltung der Laufzeit und der permanenten Konfiguration verwendet. Alternativ können Sie das Konfigurationstool für die grafische Benutzeroberfläche (GUI) firewall-config verwenden, um mit dem Daemon zu interagieren.

Darüber hinaus bietet firewalld eine gut definierte Schnittstelle für andere lokale Dienste oder Anwendungen, um Änderungen an den Firewall-Regeln direkt anzufordern, wenn diese mit Root-Rechten ausgeführt werden.

Die globale Konfigurationsdatei für firewalld befindet sich unter /etc/firewalld/firewalld.conf und Firewall-Funktionen werden im XML-Format konfiguriert.

Wichtige Firewall-Funktionen verstehen

Das zentrale Merkmal von firewalld sind Netzwerk-/Firewallzonen. Jedes andere Feature ist an eine Zone gebunden. Eine Firewallzone beschreibt die Vertrauensstufe für eine Verbindung, Schnittstelle oder Quelladressbindung.

Die Standardkonfiguration umfasst eine Reihe vordefinierter Zonen, sortiert nach der Standardvertrauensstufe der Zonen von nicht vertrauenswürdig bis vertrauenswürdig: Löschen, Blockieren, Öffentlich, Extern, DMZ, Arbeit, Zuhause, Intern und Vertrauenswürdig. Sie werden in Dateien definiert, die im Verzeichnis /usr/lib/firewalld/zones gespeichert sind.

Sie können Ihre benutzerdefinierten Zonen mithilfe des CLI-Clients konfigurieren oder hinzufügen oder einfach eine Zonendatei in /etc/firewalld/zones aus vorhandenen Dateien erstellen oder kopieren und diese 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, beispielsweise 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 grundlegende iptables/ip6tables/ebtables-Konzepte kennen, können Sie auch die direkte Schnittstelle (oder Konfiguration) verwenden, um direkten Zugriff auf die Firewall zu erhalten. Aber wer keine Iptables-Kenntnisse hat, kann die umfangreiche Sprache nutzen, um komplexere Firewall-Regeln für IPv4 und IPv6 zu erstellen.

So installieren Sie das Firewalld-Paket unter Linux

Unter CentOS 7 ist das Paket firewalld 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 wie gezeigt mit dem Standardpaketmanager installieren.

sudo apt install firewalld

So verwalten Sie den Firewall-Dienst 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 Starten des firewalld-Dienstes können Sie auch mit dem Tool firewall-cmd überprüfen, ob der Daemon läuft oder nicht (falls es nicht aktiv ist, gibt dieser Befehl „not läuft ").

sudo firewall-cmd --state

Sollten Sie Änderungen dauerhaft speichern, können Sie firewalld neu laden. Dadurch werden die Firewall-Regeln neu geladen und die Statusinformationen bleiben erhalten. Die aktuelle permanente Konfiguration wird zur neuen Laufzeitkonfiguration.

sudo firewall-cmd --reload

So arbeiten Sie mit Firewall-Zonen in Firewalld

Führen Sie diese Befehle aus, um eine Liste aller verfügbaren Firewall-Zonen und -Dienste zu erhalten.

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 festlegen, indem Sie Folgendes ausführen.

sudo firewall-cmd --get-default-zone

Um die Standardzone beispielsweise auf extern festzulegen, verwenden Sie den folgenden Befehl. Beachten Sie, dass das Hinzufügen der Option --permanent die Konfiguration dauerhaft festlegt (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 

Schauen wir uns als Nächstes an, wie man einer Zone eine Schnittstelle hinzufügt. Dieses Beispiel zeigt, wie Sie Ihren drahtlosen Netzwerkadapter (wlp1s0) zur Zone Home hinzufügen, die in Heimbereichen verwendet wird.

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

Eine Schnittstelle kann nur einer einzelnen Zone hinzugefügt werden. Um es in eine andere Zone zu verschieben, verwenden Sie wie gezeigt den Schalter --change-interface oder entfernen Sie es mit dem Schalter –remove-interface aus der vorherigen Zone und fügen Sie es dann hinzu in die neue Zone.

Angenommen, Sie möchten eine Verbindung zu einem öffentlichen WLAN-Netzwerk herstellen, sollten Sie Ihre drahtlose Schnittstelle wie folgt wieder 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 nutzen. Um eine Liste aller aktiven Zonen mit aktivierten Funktionen wie Schnittstellen, Diensten, Ports und Protokollen zu erhalten, führen Sie Folgendes aus:

sudo firewall-cmd --get-active-zones

In Bezug auf den vorherigen Punkt: Wenn Sie weitere Informationen zu einer bestimmten Zone finden möchten, d. h. zu allem, was darin hinzugefügt oder aktiviert wurde, verwenden Sie einen dieser 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 von: Standard, 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-/Protokollkombination) in der Firewall zu öffnen, fügen Sie ihn einfach mit der Option --add-port einer Zone hinzu. Wenn Sie die Zone nicht explizit angeben, wird sie in der Standardzone aktiviert.

Das folgende Beispiel zeigt, wie man Port 80 und 443 hinzufügt, um eingehenden Webverkehr über HTTP und HTTPS zu ermöglichen > Protokolle bzw.:

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

Als nächstes laden Sie firewalld neu und überprüfen die aktivierten Funktionen in der öffentlichen Zone noch einmal. 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-/Protokollkombination zu verwenden, können Sie den Dienstnamen verwenden, dem ein Port zugewiesen ist, wie im nächsten Abschnitt erläutert.

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 Zone weggelassen wird, wird die Standardzone verwendet.

Der folgende Befehl aktiviert den http-Dienst dauerhaft in der öffentlichen Zone.

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

Mit der Option --remove-service kann ein Dienst deaktiviert werden.

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

So aktivieren und deaktivieren Sie IP-Masquerading mit Firewalld

IP Masquerading (auch bekannt als IPMASQ oder MASQ) ist ein NAT (Network Address Translation).)-Mechanismus in Linux-Netzwerken, der es Ihren Hosts in einem Netzwerk mit privaten IP-Adressen ermöglicht, über die 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 IP-Masquerading in einer gewünschten Zone aktivieren, beispielsweise in der öffentlichen Zone. Aber bevor Sie das tun, prüfen Sie 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 Durchführung einer Portweiterleitung. Angenommen, Sie möchten eine SSH-Verbindung von einem Remote-Computer zu einem Host in Ihrem internen Netzwerk mit der IP 10.20.1.3 herstellen, auf dem der sshd-Daemon Port 5000 überwacht.

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

So aktivieren und deaktivieren Sie die IMCP-Nachricht in Firewalld

ICMP-Nachrichten (Internet Control Message Protocol) sind entweder Informationsanfragen oder Antworten auf Informationsanfragen oder im Fehlerzustand.

Sie können ICMP-Nachrichten in der Firewall aktivieren oder deaktivieren, listen Sie jedoch vorher alle unterstützten ICMP-Typen auf.

sudo firewall-cmd --get-icmptypes

Um einen gewünschten Blocktyp hinzuzufügen oder zu entfernen.

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

Mit dem Schalter --list-icmp-blocks können Sie alle in einer Zone hinzugefügten ICMP-Typen anzeigen.

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

So verwenden Sie die direkte Schnittstelle, um rohe iptables-Befehle zu übergeben

Das firewall-cmd bietet auch direkte Optionen (--direct), mit denen Sie einen direkteren Zugriff auf die Firewall erhalten. Dies ist nützlich für diejenigen mit Grundkenntnissen in iptables.

Wichtig: Sie sollten die direkten Optionen nur als letzten Ausweg verwenden, wenn es nicht möglich ist, die oben erläuterten regulären firewall-cmd-Optionen zu verwenden.

Hier ist ein Beispiel für die Übergabe einer rohen iptables-Regel mithilfe des Schalters --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 Fernzugriff 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 Language (auch bekannt als Rich Rules) wird verwendet, um komplexere Firewall-Regeln für IPv4 und IPv6 hinzuzufügen ohne Kenntnisse der iptables-Syntax.

Es erweitert die von uns abgedeckten Zonenfunktionen (Service, Port, ICMP-Block, Masquerade und Forward-Port). Es unterstützt Quell- und Zieladressen, Protokollierung, Aktionen und Grenzwerte für Protokolle und Aktionen.

Der --add-rich-rule wird zum Hinzufügen umfangreicher Regeln verwendet. Dieses Beispiel zeigt, wie Sie mithilfe von Audit neue IPv4- und IPv6-Verbindungen für den Dienst http zulassen und 1 pro Minute protokollieren:

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 besteht.

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 wie gezeigt mit dem Ping-Befehl testen, ob es funktioniert. Da das Paket verworfen wurde, kann der Name www.google.com nicht aufgelöst werden, weshalb der Fehler angezeigt wird.

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 „Grundlagen zu Firewalld“ erwähnt haben, dass lokale Anwendungen oder Dienste die Firewall-Konfiguration ändern können, 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 dem Schalter --lockdown-on oder --lockdown aktivieren oder deaktivieren.

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

Beachten Sie, dass empfohlen wird, diese Funktion durch Bearbeiten der Hauptkonfigurationsdatei zu aktivieren oder zu deaktivieren, da der Firewall-Befehl möglicherweise nicht auf der Lockdown-Whitelist vorhanden ist, wenn Sie den Lockdown aktivieren.

sudo vim /etc/firewalld/firewalld.conf

Suchen Sie den Parameter Lockdown und ändern Sie seinen Wert von no (bedeutet aus) in yes (bedeutet ein).

Lockdown=yes

Um diese Einstellung dauerhaft zu machen, laden Sie firewalld neu.

sudo firewall-cmd --reload
Zusammenfassung

Firewalld ist ein benutzerfreundlicher 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 Kommentare haben, können Sie uns gerne über das Kommentarformular unten erreichen. Weitere Informationen finden Sie in der Firewalld-Handbuchseite (man firewalld) oder in der Firewalld-Dokumentation auf der Projektwebsite.