Eine Firewall ist eine Methode zur Überwachung und Filterung des eingehenden und ausgehenden Netzwerkverkehrs. Es funktioniert, indem eine Reihe von Sicherheitsregeln definiert wird, die bestimmen, ob bestimmter Datenverkehr zugelassen oder blockiert werden soll. Eine richtig konfigurierte Firewall ist einer der wichtigsten Aspekte der Gesamtsystemsicherheit.
CentOS 8 wird mit einem Firewall-Daemon namens firewalld ausgeliefert. Es handelt sich um eine Komplettlösung mit einer D-Bus-Schnittstelle, mit der Sie die Firewall des Systems dynamisch verwalten können.
In diesem Tutorial erfahren Sie, wie Sie die Firewall unter CentOS 8 konfigurieren und verwalten. Wir erklären auch die grundlegenden FirewallD-Konzepte.
- Voraussetzungen #
- Grundlegende Firewalld-Konzepte #
- Firewalld-Zonen #
- Firewall-Dienste #
- Firewalld Laufzeit- und permanente Einstellungen #
- Aktivieren von FirewallD #
- Firewalld Zones #
- Ändern des Zonenziels #
- Zuweisen einer Schnittstelle zu einer anderen Zone #
- Ändern der Standardzone #
- Erstellen neuer Zonen #
- Firewalld Services #
- Erstellen eines neuen FirewallD-Dienstes #
- Öffnen von Ports und Quell-IPs #
- Öffnen einer Quell-IP #
- Öffnen eines Quellports #
- Ports weiterleiten #
- Leiten Sie den Datenverkehr von einem Port zu einem anderen unter der IP-Adresse weiter #
- Leiten Sie den Datenverkehr an eine andere IP-Adresse weiter #
- Leiten Sie den Datenverkehr an einen anderen Server an einem anderen Port weiter #
- Fazit #
Voraussetzungen #
Um den Firewall-Dienst zu konfigurieren, müssen Sie als root oder Benutzer mit Sudo-Rechten angemeldet sein.
Grundlegende Firewalld-Konzepte #
firewalld verwendet die Konzepte von Zonen und Diensten. Basierend auf den Zonen und Diensten, die Sie konfigurieren, können Sie steuern, welcher Datenverkehr zum und vom System zugelassen oder blockiert wird.
Firewalld kann mit dem Befehlszeilenprogramm firewall-cmd
konfiguriert und verwaltet werden.
In CentOS 8 wird iptables durch nftables als Standard-Firewall-Backend für den firewalld-Daemon ersetzt.
Firewalld-Zonen #
Zonen sind vordefinierte Regelsätze, die den Vertrauensgrad der Netzwerke angeben, mit denen Ihr Computer verbunden ist. Sie können einer Zone Netzwerkschnittstellen und Quellen zuweisen.
Nachfolgend sind die von FirewallD bereitgestellten Zonen nach der Vertrauensstufe der Zone von nicht vertrauenswürdig zu vertrauenswürdig geordnet:
- tropfen: Alle eingehenden Verbindungen werden ohne Benachrichtigung gelöscht. Es sind nur ausgehende Verbindungen zulässig.
- blockieren: Alle eingehenden Verbindungen werden mit einer
icmp-host-prohibited
-Nachricht fürIPv4
undicmp6-adm-prohibited
für IPv6n abgelehnt. Nur ausgehende Verbindungen sind zulässig. - public: Zur Verwendung in nicht vertrauenswürdigen öffentlichen Bereichen. Sie vertrauen anderen Computern im Netzwerk nicht, können jedoch ausgewählte eingehende Verbindungen zulassen.
- extern: Zur Verwendung in externen Netzwerken mit aktiviertem NAT-Masquerading, wenn Ihr System als Gateway oder Router fungiert. Nur ausgewählte eingehende Verbindungen sind zulässig.
- intern: Zur Verwendung in internen Netzwerken, wenn Ihr System als Gateway oder Router fungiert. Anderen Systemen im Netzwerk wird im Allgemeinen vertraut. Nur ausgewählte eingehende Verbindungen sind zulässig.
- dmz: Wird für Computer in Ihrer entmilitarisierten Zone verwendet, die nur eingeschränkten Zugriff auf den Rest Ihres Netzwerks haben. Nur ausgewählte eingehende Verbindungen sind zulässig.
- arbeit: Verwendet für arbeit maschinen. Anderen Computern im Netzwerk wird im Allgemeinen vertraut. Nur ausgewählte eingehende Verbindungen sind zulässig.
- home: Verwendet für home maschinen. Anderen Computern im Netzwerk wird im Allgemeinen vertraut. Nur ausgewählte eingehende Verbindungen sind zulässig.
- vertrauenswürdig: Alle Netzwerkverbindungen werden akzeptiert. Vertrauen Sie allen Computern im Netzwerk.
Firewall-Dienste #
Firewalld-Dienste sind vordefinierte Regeln, die innerhalb einer Zone gelten und die erforderlichen Einstellungen definieren, um eingehenden Datenverkehr für einen bestimmten Dienst zuzulassen. Mit den Diensten können Sie problemlos mehrere Aufgaben in einem einzigen Schritt ausführen.
Der Dienst kann beispielsweise Definitionen zum Öffnen von Ports, zum Weiterleiten von Datenverkehr und mehr enthalten.
Firewalld Laufzeit- und permanente Einstellungen #
Firewalld verwendet zwei getrennte Konfigurationssätze, Laufzeit und permanente Konfiguration.
Die Laufzeitkonfiguration ist die tatsächlich ausgeführte Konfiguration und bleibt beim Neustart nicht bestehen. Wenn der firewalld-Daemon gestartet wird, lädt er die permanente Konfiguration, die zur Laufzeitkonfiguration wird.
Wenn Sie Änderungen an der Firewalld-Konfiguration mit dem Dienstprogramm firewall-cmd
vornehmen, werden die Änderungen standardmäßig auf die Laufzeitkonfiguration angewendet. Um die Änderungen dauerhaft vorzunehmen, hängen Sie die Option --permanent
an den Befehl an.
Um die Änderungen in beiden Konfigurationssätzen zu übernehmen, können Sie eine der beiden folgenden Methoden verwenden:
-
Ändern Sie die Laufzeitkonfiguration und machen Sie sie dauerhaft:
sudo firewall-cmd <options>
sudo firewall-cmd --runtime-to-permanent
-
Ändern Sie die permanente Konfiguration und laden Sie den Firewalld-Daemon neu:
sudo firewall-cmd --permanent <options>
sudo firewall-cmd --reload
Aktivieren von FirewallD #
Unter CentOS 8 ist firewalld standardmäßig installiert und aktiviert. Wenn es aus irgendeinem Grund nicht auf Ihrem System installiert ist, können Sie den Daemon installieren und starten, indem Sie Folgendes eingeben:
sudo dnf install firewalld
sudo systemctl enable firewalld --now
Sie können den Status des Firewall-Dienstes überprüfen mit:
sudo firewall-cmd --state
Wenn die Firewall aktiviert ist, sollte der Befehl running
ausgeben. Andernfalls sehen Sie not running
.
Firewalld Zones #
Wenn Sie es nicht geändert haben, wird die Standardzone auf public
gesetzt, und alle Netzwerkschnittstellen werden dieser Zone zugewiesen.
Die Standardzone wird für alles verwendet, was nicht explizit einer anderen Zone zugewiesen ist.
Sie können die Standardzone anzeigen, indem Sie Folgendes eingeben:
sudo firewall-cmd --get-default-zone
public
Um eine Liste aller verfügbaren Zonen zu erhalten, geben Sie Folgendes ein:
sudo firewall-cmd --get-zones
block dmz drop external home internal public trusted work
Um die aktiven Zonen und die ihnen zugewiesenen Netzwerkschnittstellen anzuzeigen:
sudo firewall-cmd --get-active-zones
Die folgende Ausgabe zeigt, dass die Schnittstellen eth0
und eth1
der Zone public
zugeordnet sind:
public interfaces: eth0 eth1
Sie können die Zonenkonfigurationseinstellungen mit drucken:
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:
Aus der obigen Ausgabe geht hervor, dass die öffentliche Zone aktiv ist und das Standardziel REJECT
verwendet. Die Ausgabe zeigt auch, dass die Zone von den Schnittstellen eth0
und eth1
verwendet wird und DHCP-Client- und SSH-Datenverkehr zulässt.
Wenn Sie die Konfigurationen aller verfügbaren Zonen überprüfen möchten, geben Sie:
sudo firewall-cmd --list-all-zones
Der Befehl druckt eine riesige Liste mit den Einstellungen aller verfügbaren Zone.
Ändern des Zonenziels #
Das Ziel definiert das Standardverhalten der Zone für den eingehenden Datenverkehr, der nicht angegeben ist. Es kann auf eine der folgenden Optionen eingestellt werden: default
, ACCEPT
, REJECT
, und DROP
.
Um das Ziel der Zone festzulegen, geben Sie die Zone mit der Option --zone
und das Ziel mit der Option --set-target
an.
Um beispielsweise das Ziel der public
-Zone in DROP
zu ändern, würden Sie Folgendes ausführen:
sudo firewall-cmd --zone=public --set-target=DROP
Zuweisen einer Schnittstelle zu einer anderen Zone #
Sie können bestimmte Regelsätze für verschiedene Zonen erstellen und ihnen verschiedene Schnittstellen zuweisen. Dies ist besonders nützlich, wenn Sie mehrere Schnittstellen auf Ihrem Computer haben.
Um eine Schnittstelle einer anderen Zone zuzuweisen, geben Sie die Zone mit der Option --zone
und die Schnittstelle mit der Option --change-interface
an.
Der folgende Befehl weist beispielsweise die eth1
-Schnittstelle der work
-Zone zu:
sudo firewall-cmd --zone=work --change-interface=eth1
Überprüfen Sie die Änderungen, indem Sie Folgendes eingeben:
sudo firewall-cmd --get-active-zones
work interfaces: eth1public interfaces: eth0
Ändern der Standardzone #
Um die Standardzone zu ändern, verwenden Sie die Option --set-default-zone
gefolgt vom Namen der Zone, die Sie als Standard festlegen möchten.
Um beispielsweise die Standardzone auf home
zu ändern, führen Sie den folgenden Befehl aus:
sudo firewall-cmd --set-default-zone=home
Überprüfen Sie die Änderungen mit:
sudo firewall-cmd --get-default-zone
home
Erstellen neuer Zonen #
Mit Firewalld können Sie auch eigene Zonen erstellen. Dies ist praktisch, wenn Sie Regeln pro Anwendung erstellen möchten.
Im folgenden Beispiel erstellen wir eine neue Zone mit dem Namen memcached
, öffnen den Port 11211
und erlauben den Zugriff nur von der IP-Adresse 192.168.100.30
:
-
Erstellen Sie die Zone:
sudo firewall-cmd --new-zone=memcached --permanent
-
Hinzufügen der Regeln zur Zone:
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
-
Laden Sie den Firewalld-Daemon neu, um die Änderungen zu aktivieren:
sudo firewall-cmd --reload
Firewalld Services #
Mit firewalld können Sie Datenverkehr für bestimmte Ports und / oder Quellen basierend auf vordefinierten Regeln zulassen, die als Dienste bezeichnet werden.
Um eine Liste aller standardmäßig verfügbaren Dienste zu erhalten, geben Sie:
sudo firewall-cmd --get-services
Weitere Informationen zu den einzelnen Diensten finden Sie, indem Sie das zugehörige öffnen .xml-Datei im Verzeichnis /usr/lib/firewalld/services
. Der HTTP-Dienst ist beispielsweise folgendermaßen definiert:
<?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>
So lassen Sie eingehenden HTTP-Datenverkehr (Port 80) für Schnittstellen in der öffentlichen Zone nur für den aktuellen Sitzungstyp (Laufzeitkonfiguration) zu:
sudo firewall-cmd --zone=public --add-service=http
--zone
weglassen. Um zu überprüfen, ob der Dienst erfolgreich hinzugefügt wurde, verwenden Sie die Option --list-services
:
sudo firewall-cmd --zone=public --list-services
ssh dhcpv6-client http
Um den Port 80 nach einem Neustart offen zu halten, führen Sie denselben Befehl erneut mit der Option --permanent
aus, oder führen Sie Folgendes aus:
sudo firewall-cmd --runtime-to-permanent
Verwenden Sie die Option --list-services
zusammen mit der Option --permanent
, um Ihre Änderungen zu überprüfen:
sudo firewall-cmd --permanent --zone=public --list-services
ssh dhcpv6-client http
Die Syntax zum Entfernen des Dienstes ist dieselbe wie beim Hinzufügen eines Dienstes. Verwenden Sie einfach --remove-service
anstelle des --add-service
Flags:
sudo firewall-cmd --zone=public --remove-service=http --permanent
Der obige Befehl entfernt den Dienst http
aus der permanenten Konfiguration der öffentlichen Zone.
Erstellen eines neuen FirewallD-Dienstes #
Wie bereits erwähnt, werden die Standarddienste im Verzeichnis /usr/lib/firewalld/services
gespeichert. Der einfachste Weg, einen neuen Dienst zu erstellen, besteht darin, eine vorhandene Dienstdatei in das Verzeichnis /etc/firewalld/services
zu kopieren, das der Speicherort für vom Benutzer erstellte Dienste ist, und die Dateieinstellungen zu ändern.
Um beispielsweise eine Dienstdefinition für den Plex Media Server zu erstellen, können Sie die SSH-Dienstdatei verwenden:
sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/plexmediaserver.xml
Öffnen Sie die neu erstellte plexmediaserver.xml
-Datei und ändern Sie den Kurznamen und die Beschreibung für den Dienst innerhalb der Tags <short>
und <description>
. Das wichtigste Tag, das Sie ändern müssen, ist das port
-Tag, das die Portnummer und das Protokoll definiert, die Sie öffnen möchten.
Im folgenden Beispiel öffnen wir die Ports 1900
UDP und 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>
Speichern Sie die Datei und laden Sie den FirewallD-Dienst neu:
sudo firewall-cmd --reload
Sie können jetzt den Dienst plexmediaserver
in Ihren Zonen wie jeden anderen Dienst verwenden.
Öffnen von Ports und Quell-IPs #
Mit Firewalld können Sie außerdem schnell den gesamten Datenverkehr von einer vertrauenswürdigen IP-Adresse oder an einem bestimmten Port aktivieren, ohne eine Dienstdefinition zu erstellen.
Öffnen einer Quell-IP #
Um den gesamten eingehenden Datenverkehr von einer bestimmten IP-Adresse (oder einem bestimmten Bereich) zuzulassen, geben Sie die Zone mit der Option --zone
und die Quell-IP mit der Option --add-source
an.
Um beispielsweise den gesamten eingehenden Datenverkehr von 192.168.1.10 in der public
-Zone zuzulassen, führen Sie:
sudo firewall-cmd --zone=public --add-source=192.168.1.10
Machen Sie die neue Regel persistent:
sudo firewall-cmd --runtime-to-permanent
Überprüfen Sie die Änderungen mit dem folgenden Befehl:
sudo firewall-cmd --zone=public --list-sources
192.168.1.10
Die Syntax zum Entfernen einer Quell-IP ist dieselbe wie beim Hinzufügen einer. Verwenden Sie einfach --remove-source
anstelle der Option --add-source
:
sudo firewall-cmd --zone=public --remove-source=192.168.1.10
Öffnen eines Quellports #
Um den gesamten eingehenden Datenverkehr an einem bestimmten Port zuzulassen, geben Sie die Zone mit der Option --zone
und den Port und das Protokoll mit der Option --add-port
an.
Um beispielsweise Port 8080
in der öffentlichen Zone für die aktuelle Sitzung zu öffnen, können Sie Folgendes ausführen:
sudo firewall-cmd --zone=public --add-port=8080/tcp
Das Protokoll kann entweder tcp
, udp
, sctp
, oder dccp
.
Überprüfen Sie die Änderungen:
sudo firewall-cmd --zone=public --list-ports
8080
Um den Port nach einem Neustart offen zu halten, fügen Sie die Regel den permanenten Einstellungen hinzu, indem Sie denselben Befehl mit dem Flag --permanent
ausführen oder indem Sie Folgendes ausführen:
sudo firewall-cmd --runtime-to-permanent
Die Syntax zum Entfernen eines Ports ist dieselbe wie beim Hinzufügen eines Ports. Verwenden Sie einfach --remove-port
anstelle der Option --add-port
.
sudo firewall-cmd --zone=public --remove-port=8080/tcp
Ports weiterleiten #
Um Datenverkehr von einem Port zu einem anderen Port weiterzuleiten, aktivieren Sie zunächst das Maskieren für die gewünschte Zone mit der Option --add-masquerade
. Um beispielsweise die Maskierung für die external
-Zone zu aktivieren, geben Sie Folgendes ein:
sudo firewall-cmd --zone=external --add-masquerade
Leiten Sie den Datenverkehr von einem Port zu einem anderen unter der IP-Adresse weiter #
Im folgenden Beispiel leiten wir den Datenverkehr von Port 80
zu Port 8080
auf demselben Server weiter:
sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080
Leiten Sie den Datenverkehr an eine andere IP-Adresse weiter #
Im folgenden Beispiel leiten wir den Datenverkehr von Port 80
an Port 80
auf einem Server mit IP weiter 10.10.10.2
:
sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toaddr=10.10.10.2
Leiten Sie den Datenverkehr an einen anderen Server an einem anderen Port weiter #
Im folgenden Beispiel leiten wir den Datenverkehr von Port 80
an Port 8080
auf einem Server mit IP 10.10.10.2
weiter:
sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=10.10.10.2
Um die Vorwärtsregel persistent zu machen, verwenden Sie:
sudo firewall-cmd --runtime-to-permanent
Fazit #
Sie haben gelernt, wie Sie den Firewalld-Dienst auf Ihrem CentOS 8-System konfigurieren und verwalten.
Stellen Sie sicher, dass Sie alle eingehenden Verbindungen zulassen, die für das ordnungsgemäße Funktionieren Ihres Systems erforderlich sind, und beschränken Sie alle unnötigen Verbindungen.