So konfigurieren Sie die Firewall mit FirewallD

Firewalld ist ein Firewall-Management-Tool, das als Front-End für das Netfilter-Framework des Linux-Kernels fungiert. Es handelt sich um eine leistungsstarke zonenbasierte Firewall, die den Netzwerkverkehr überwacht und eine Reihe definierter Regeln anwendet, um den ein- und ausgehenden Datenverkehr zu kontrollieren.

Firewalld ist in Python geschrieben und Teil von systemd. Es unterstützt sowohl IPv4- als auch IPv6-Netzwerke.

Der Hauptvorteil besteht darin, dass Änderungen ohne Neustart des Dienstes durchgeführt werden können und mit D-Bus-Schnittstellenkonfigurationen einfach verwaltet werden können.

In diesem Tutorial lernen wir, wie man Firewalld unter Linux konfigurieren und seine Grundkonzepte.

Grundlegendes Konzept

Firewalld besteht aus zwei Schichten mit dem Namen Ader und D-Bus Schicht. Die Kernschicht übernimmt die Konfiguration und Back-Ends. Die D-Bus-Schicht ist für das Ändern und Erstellen der Firewall-Konfiguration verantwortlich.

Firewalld unterstützt Zonen und Dienstleistungen. Zone sind vordefinierte Regeln, die basierend auf der Vertrauensstufe der mit dem Server verbundenen Netzwerkschnittstellen regeln, welche Art von Datenverkehr zum Server zugelassen werden soll. Dies bedeutet, dass Sie einer Zone eine Netzwerkschnittstelle zuweisen können. Services ermöglicht die Konfiguration von Ports, Modulen und Zieladressen.

Firewall-cmd ist das Befehlszeilentool zum Verwalten von Laufzeit- und permanenten Konfigurationen.

Vordefinierte Firewall-Zonen

Der Standardzonen werden im Verzeichnis mit dem Namen /usr/lib/firewalld/zones/ gespeichert. Hier sind einige der vordefinierten Zonen, die Firewalld nach verschiedenen Vertrauensstufen bereitstellt – von vertrauenswürdig bis nicht vertrauenswürdig.

Vertrauenswürdige: Diese Zone akzeptiert alle Verbindungen und vertraut allen Computern im Netzwerk.

Allgemein: Angestellt in nicht vertrauenswürdigen öffentlichen Bereichen. Auf anderen Computern besteht nur minimales Vertrauen, aber ausgewählte eingehende Verbindungen können dennoch zugelassen werden.

fallen: Der gesamte eingehende oder eingehende Datenverkehr wird verworfen. Nur ausgehender Datenverkehr ist zulässig.

Extern: Wird in externen Netzwerken implementiert, wenn Ihr System als Router mit aktivierter NAT-Masquerading fungiert. Nur die ausgewählten eingehenden Verbindungen sind zulässig.

Intern: Wird nur in internen Netzwerken implementiert, wobei Ihr System als Router mit aktiviertem NAT-Masquerading fungiert. Anderen PCs wird vertraut und nur einigen wenigen eingehenden Verbindungen wird der Zugriff gewährt.

Block: Die Blockzone weist alle eingehenden Verbindungen mit einer icmp-host-verbotenen Nachricht für IPv4 und icmp6-adm-verboten für IPv6n zurück. Hier sind nur die ausgehenden Verbindungen erlaubt.

DMZ: Wird für Systeme oder PCs in einer demilitarisierten Zone (DMZ) mit eingeschränktem Zugriff auf die restlichen Systeme in Ihrem Computernetzwerk verwendet. Standardmäßig lässt es nur SSH-Datenverkehr zu.

arbeiten: Der Arbeitsbereich ist für Arbeitssysteme oder PCs implementiert. Es gibt eine allgemeine Vertrauensstufe für alle anderen Computer im Netzwerk und nur ausgewählte eingehende Verbindungen sind zulässig.

Heimat: Die Home-Zone wird von Home-Systemen verwendet, und ebenso wie die Work-Zone wird allen PCs im Allgemeinen vertraut und nur ausgewählte eingehende Verbindungen werden zugelassen.

Firewall-Laufzeit und permanente Einstellungen

Die eigentliche laufende Konfiguration ist die Laufzeitkonfiguration. Es ist vorübergehend und überlebt einen Neustart nicht. Beim Neustart des Servers lädt Firewalld die permanente Konfiguration, die später in die Laufzeitkonfiguration umgewandelt wird.

Wenn Änderungen an der Firewalld-Konfiguration vorgenommen werden, werden diese direkt auf die Laufzeitkonfiguration angewendet. Um die Änderungen beizubehalten, rufen Sie die --permanent Möglichkeit.

Installieren und Aktivieren von Firewalld

Firewalld ist standardmäßig auf Red Hat, CentOS, Fedora, Suse-Linux. Unter Debian/Ubuntu ist es im Paket-Repository verfügbar.

Redhat/CentOS

Wenn Firewalld nicht installiert ist, installieren Sie es, indem Sie den folgenden Befehl ausführen:

$ sudo yum install firewalld

Debian/Ubuntu

$ sudo apt install firewalld

Nach der Installation können Sie den Status überprüfen:

$ sudo systemctl status firewalld

Die Ausgabe zeigt aktiv (läuft) an, wenn Firewalld aktiv ist.

Alternativ können Sie den Ausführungsstatus bestätigen, indem Sie:

$ sudo firewall-cmd state

Nach der Installation starten und aktivieren Sie Firewalld, indem Sie die folgenden Befehle ausführen:

$ sudo systemctl start firewalld

Aktivieren Sie Firewalld beim Systemstart, geben Sie Folgendes ein:

$ sudo systemctl enable firewalld

Geben Sie Folgendes ein, um Firewalld vorübergehend zu stoppen:

$ sudo systemctl stop firewalld

Geben Sie Folgendes ein, um das Starten von Firewalld beim Booten zu deaktivieren:

$ sudo systemctl disable firewalld

Umgang mit Firewall-Zonen

Sehen wir uns an, wie mit Firewall-Zonen umgegangen wird.

1. Standardmäßig ist die öffentliche Zone die standardmäßige Firewalld-Zone. Um dies zu bestätigen, führen Sie den Befehl aus:

$ sudo firewall-cmd --get-default-zone

Ausgabe:

public

2. Um einen Überblick über alle Zonen zu erhalten, führen Sie den Befehl aus:

$ sudo firewall-cmd --get-zones

Dadurch werden alle Zonen aufgelistet.

Ausgabe:

block dmz drop external home internal public trusted work

3. Netzwerkschnittstellen sind normalerweise standardmäßig mit der Standardzone verbunden. Führen Sie den folgenden Befehl aus, um die von Ihren Netzwerkschnittstellen verwendeten Zonen zu überprüfen.

$ sudo firewall-cmd --get-active-zones

In diesem Fall habe ich eine aktive Netzwerkschnittstelle – enp0s3 – die der Standardzone zugewiesen ist.

Auflisten von Firewall-Zonen, die einer Schnittstelle zugewiesen sind

4. Um die gesamte Konfiguration einer Zone anzuzeigen,

Geben Sie Folgendes ein, um die Konfiguration der öffentlichen Zone anzuzeigen:

$ sudo firewall-cmd --zone=public --list-all

Geben Sie Folgendes ein, um eine Übersicht über die Standardzone anzuzeigen:

$ sudo firewall-cmd --list-all

5. Geben Sie Folgendes ein, um die Konfiguration aller Firewalld-Zonen aufzulisten:

$ sudo firewall-cmd --list-all-zones

Ändern Sie die Standardzone

Die allen Netzwerkschnittstellen zugewiesene Standardzone ist public. Sie können es auf eine andere Zone einstellen.

6. Geben Sie Folgendes ein, um die Standardzone in eine andere Zone zu ändern:

$ sudo firewall-cmd --set-default-zone=trusted

Hier haben wir die Standardzone geändert zu trusted Zone.

Ändern Sie die einer Schnittstelle zugewiesene Zone

Um die Zone einer Netzwerkschnittstelle zu einer anderen zu ändern, verwenden Sie die --zone Möglichkeit.

7. Um die Zone der Schnittstelle zu ändern enp0s3 zu trusted, Typ:

$ sudo firewall-cmd --zone=home --change-interface=enp0s3

Firewall-Dienste

Firewalld-Dienstdateien befinden sich im /usr/lib/firewalld/services Pfad im XML-Dateiformat. Es gibt Hunderte von ihnen und verwenden Sie den Befehl ls, um sie aufzulisten.

$ ls /usr/lib/firewalld/services

Für example die MongoDB-Dienstdatei möchte:

$ sudo vim /usr/lib/firewalld/services/mongodb.xml

MongoDB-XML-DienstdateiMongoDB-XML-Dienstdatei

Standardmäßig sind dhcp-client- und ssh-Dienste auf der Firewall zugelassen. Beachten Sie in der Ausgabe, dass auch https erlaubt wurde.

Um einen neuen Firewalld-Dienst zu erstellen, kopieren Sie einfach eine vorhandene Dienstdatei und geben Sie einen neuen Dienstnamen ein . Definieren Sie dann diese XML-Datei.

Eine der am häufigsten verwendeten Funktionen der Firewall ist das Öffnen von Ports und das Durchlassen zum Server. Firewalld verfügt über vordefinierte Dienste.

8. Um alle Dienste anzuzeigen, geben Sie Folgendes ein:

$ sudo firewall-cmd --get-services

9. Eingehenden Datenverkehr zulassen

Geben Sie Folgendes ein, um eingehenden Datenverkehr für den mssql-Dienst zuzulassen:

$ sudo firewall-cmd --zone=public --add-service=mssql

10. So überprüfen Sie die hinzugefügten Dienste:

$ sudo firewall-cmd --zone=public --list-services

Ausgabe:

dhcpv6-client mssql ssh

11. Um die Änderung auch nach einem Neustart beizubehalten, rufen Sie die --permanent Option wie folgt.

$ sudo firewall-cmd --zone=public --add-service=https --permanent

12. Damit die Änderungen wirksam werden, laden Sie die Firewall neu.

$ sudo firewall-cmd --reload

13. Um einen Dienst von der Firewall zu entfernen, verwenden Sie die --remove Möglichkeit

$ sudo firewall-cmd --zone=public --remove-service=https --permanent

Entfernen eines Dienstes aus der Firewalld-KonfigurationEntfernen eines Dienstes aus der Firewalld-Konfiguration

Der obige Befehl entfernt die HTTPS-Dienste dauerhaft aus der öffentlichen Zone.

14. So öffnen Sie den Port auf der Firewalld

Zum Beispiel ist der Xrdp-Dienst , der es einem Benutzer ermöglicht, eine Remote-Verbindung zum Desktop eines Remote-Systems herzustellen, dem TCP-Port 3389 zugeordnet.

Geben Sie Folgendes ein, um den Port in der öffentlichen Zone zu öffnen:

$ sudo firewall-cmd --zone=public --add-port=3389/tcp

Einen Port über die Firewalld-Konfiguration zulassenÖffnen Sie einen Port

Vergessen Sie nicht, Firewalld neu zu laden, damit die Änderungen wirksam werden.

Portweiterleitung mit Firewalld

fünfzehn. So aktivieren Sie die Maskierung für die öffentliche Zone

Um Datenverkehr von einem Port zum nächsten oder zu einer Adresse weiterzuleiten, aktivieren oder aktivieren Sie zuerst die Maskierung für die bevorzugte Zone, indem Sie die --add-masquerade Möglichkeit.

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

16. Weiterleiten des Datenverkehrs von einem Port zu einem anderen auf demselben Server

Firewalld so zu konfigurieren, dass eingehender Datenverkehr, der einen bestimmten Port erreicht, an einen anderen Port auf demselben Server umgeleitet wird.

Geben Sie Folgendes ein, um Datenverkehr, der Port 80 erreicht, an Port 6000 in der öffentlichen Zone weiterzuleiten:

$ sudo firewall-cmd --zone=public--add-forward-port=port=80:proto=tcp:toport=6000

17. Weiterleiten des Datenverkehrs an einen anderen Port auf einem anderen Server

Alternativ kann Verkehr von einem Port zu einem anderen Port umgeleitet werden, der sich auf einem anderen Server befindet.

Geben Sie Folgendes ein, um den Datenverkehr über Port 80 zu Port 8080 auf einem anderen Server mit der IP-Adresse 192.168.10.10 umzuleiten:

$ sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.10.10

Legen Sie Regeln fest, um eingehenden Datenverkehr zu verwalten

Um eingehenden Verkehr von einer bestimmten Quelle zuzulassen, verwenden Sie --add-source Möglichkeit.

Geben Sie Folgendes ein, um den gesamten eingehenden Datenverkehr von 192.168.10.0/24 in der vertrauenswürdigen Zone zuzulassen:

$ sudo firewall-cmd --zone=trusted --add-source=192.168.10.0/24 --permanent

Erstellen Sie eine neue Zone

Sie können Ihre eigenen Zonen erstellen und einen Regelsatz hinzufügen. In den meisten Fällen sind die vordefinierten Zonen ausreichend. Lassen Sie uns eine neue Zone für einen Webserver erstellen und bestimmte Dienste/Schnittstellen zulassen.

Erstellen Sie eine neue Zone namens webzone:

$ sudo firewall-cmd --permanent --new-zone=webzone

Überprüfen Sie dies, indem Sie die permanenten Zonen auflisten. Geben Sie Folgendes ein:

$ sudo firewall-cmd --permanent --get-zones

Ausgabe:

block dmz drop external home internal public trusted webzone work

Geben Sie Folgendes ein, um in die aktive Konfiguration einzusteigen:

$ sudo firewall-cmd --reload

Um den ssh-, http-, https-Dienst zu öffnen und die Schnittstelle in der Webzone zuzuweisen, führen Sie die folgenden Befehle aus:

$ sudo firewall-cmd --zone=webzone --add-service=ssh
$ sudo firewall-cmd --zone=webzone --add-service=http
$ sudo firewall-cmd --zone=webzone --add-service=https
$ sudo firewall-cmd --zone=webzone --add-interface=eth0

Geben Sie Folgendes ein, um die Konfiguration von Webzone anzuzeigen:

$ sudo firewall-cmd --zone=webzone --list-all

Ausgabe:

webzone
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: http https ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

Reiche Regeln

Rich Rule hilft, komplexere Firewall-Regeln festzulegen.

Um beispielsweise den Zugriff für die Quelladressen-IP-Adresse und den spezifischen Port zu aktivieren, geben Sie Folgendes ein:

$ sudo firewall-cmd --add-rich-rule="rule family="ipv4" source address="23.92.31.51/32" port port=21 protocol="tcp" accept"

Zusammenfassung

In diesem Tutorial haben wir gelernt, wie man Firewalld unter Linux und seine grundlegenden Konzepte konfiguriert.

Wenn Sie Feedback und Vorschläge haben, kommentieren Sie bitte unten.