So konfigurieren und verwalten Sie die Firewall unter CentOS 8

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 #

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ür IPv4 und icmp6-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-cmdvornehmen, 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:

  1. Ändern Sie die Laufzeitkonfiguration und machen Sie sie dauerhaft:

    sudo firewall-cmd <options>sudo firewall-cmd --runtime-to-permanent
  2. Ä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 firewalldsudo 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 homezu ä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:

  1. Erstellen Sie die Zone:

    sudo firewall-cmd --new-zone=memcached --permanent
  2. Hinzufügen der Regeln zur Zone:

    sudo firewall-cmd --zone=memcached --add-port=11211/udp --permanentsudo firewall-cmd --zone=memcached --add-port=11211/tcp --permanentsudo firewall-cmd --zone=memcached --add-source=192.168.100.30/32 --permanent
  3. 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:

/usr/lib/firewalld/services/http.xml
<?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
Wenn Sie die Standardzone ändern, können Sie die Option --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.

/etc/firewalld/services/plexmediaserver.xml
<?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.



+