Eine richtig konfigurierte Firewall ist einer der wichtigsten Aspekte der gesamten Systemsicherheit.
FirewallDist eine vollständige Firewall-Lösung, die die iptables-Regeln des Systems verwaltet und eine D-Bus-Schnittstelle für deren Betrieb bereitstellt. Beginnend mit CentOS 7 ersetzt FirewallD iptables als standardmäßiges Firewall-Verwaltungstool.
In diesem Tutorial zeigen wir Ihnen, wie Sie eine Firewall mit FirewallD auf Ihrem CentOS 7-System einrichten und erklären Ihnen die grundlegenden FirewallD-Konzepte.
Voraussetzungen #
Bevor Sie mit diesem Tutorial beginnen, stellen Sie sicher, dass Sie mit einem Benutzerkonto mit sudo-Berechtigungen oder mit dem Root-Benutzer bei Ihrem Server angemeldet sind. Die bewährte Methode besteht darin, Verwaltungsbefehle als sudo-Benutzer statt als root auszuführen. Wenn Sie keinen sudo-Benutzer auf Ihrem CentOS-System haben, können Sie einen erstellen, indem Sie diesen Anweisungen folgen.
Grundlegende Firewalld-Konzepte #
FirewallD verwendet die Konzepte von Zonen und Diensten anstelle von iptables-Ketten und -Regeln. Basierend auf den Zonen und Diensten, die Sie konfigurieren, können Sie steuern, welcher Datenverkehr zum und vom System zugelassen oder nicht zugelassen wird.
FirewallD kann mit firewall-cmd
konfiguriert und verwaltet werden Befehlszeilenprogramm.
Firewalld-Zonen #
Zonen sind vordefinierte Regelsätze, die angeben, welcher Datenverkehr basierend auf der Vertrauensstufe in den Netzwerken, mit denen Ihr Computer verbunden ist, zugelassen werden soll. Sie können einer Zone Netzwerkschnittstellen und -quellen zuweisen.
Unten sind die von FirewallD bereitgestellten Zonen, sortiert nach der Vertrauensstufe der Zone von nicht vertrauenswürdig bis vertrauenswürdig:
- fallen :Alle eingehenden Verbindungen werden ohne Benachrichtigung getrennt. Nur ausgehende Verbindungen sind erlaubt.
- blockieren :Alle eingehenden Verbindungen werden mit einem
icmp-host-prohibited
abgewiesen Nachricht fürIPv4
undicmp6-adm-prohibited
für IPv6n. Nur ausgehende Verbindungen sind erlaubt. - öffentlich :Zur Verwendung in nicht vertrauenswürdigen öffentlichen Bereichen. Sie vertrauen anderen Computern im Netzwerk nicht, aber Sie können 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 erlaubt.
- 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 erlaubt.
- dmz :Wird für Computer in Ihrer entmilitarisierten Zone verwendet, die eingeschränkten Zugriff auf den Rest Ihres Netzwerks haben. Nur ausgewählte eingehende Verbindungen sind erlaubt.
- arbeiten :Wird für Arbeitsmaschinen verwendet. Anderen Computern im Netzwerk wird im Allgemeinen vertraut. Nur ausgewählte eingehende Verbindungen sind erlaubt.
- Zuhause :Wird für Heimmaschinen verwendet. Anderen Computern im Netzwerk wird im Allgemeinen vertraut. Nur ausgewählte eingehende Verbindungen sind erlaubt.
- 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 notwendigen Einstellungen definieren, um eingehenden Datenverkehr für einen bestimmten Dienst zuzulassen.
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 bei Neustarts nicht bestehen. Wenn der Firewalld-Dienst startet, lädt er die permanente Konfiguration, die zur Laufzeitkonfiguration wird.
Standardmäßig, wenn Sie Änderungen an der Firewalld-Konfiguration mit firewall-cmd
vornehmen werden die Änderungen auf die Laufzeitkonfiguration angewendet. Um die Änderungen dauerhaft zu machen, müssen Sie den --permanent
verwenden Option.
Installieren und Aktivieren von FirewallD #
-
Firewalld wird standardmäßig auf CentOS 7 installiert, aber wenn es nicht auf Ihrem System installiert ist, können Sie das Paket installieren, indem Sie Folgendes eingeben:
sudo yum install firewalld
-
Der Firewalld-Dienst ist standardmäßig deaktiviert. Sie können den Firewall-Status überprüfen mit:
sudo firewall-cmd --state
Wenn Sie gerade erst installiert oder noch nie zuvor aktiviert haben, wird der Befehl
not running
ausgeben . Andernfalls sehen Sierunning
. -
Um den FirewallD-Dienst zu starten und beim Booten zu aktivieren, geben Sie Folgendes ein:
sudo systemctl start firewalld
sudo systemctl enable firewalld
Arbeiten mit Firewalld-Zonen #
Nachdem Sie den FirewallD-Dienst zum ersten Mal aktiviert haben, wird die Datei public
Zone ist als Standardzone festgelegt. 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
Standardmäßig wird allen Netzwerkschnittstellen die Standardzone zugewiesen. Um zu überprüfen, welche Zonen von Ihrer/Ihren Netzwerkschnittstelle(n) verwendet werden, geben Sie Folgendes ein:
sudo firewall-cmd --get-active-zones
public
interfaces: eth0 eth1
Die obige Ausgabe sagt uns, dass beide Schnittstellen eth0
und eth1
sind der öffentlichen Zone zugeordnet.
Sie können die Zonenkonfigurationseinstellungen ausdrucken mit:
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 können wir sehen, dass die öffentliche Zone aktiv und als Standard festgelegt ist und sowohl von eth0
verwendet wird und eth1
Schnittstellen. Außerdem sind die Verbindungen zum DHCP-Client und SSH erlaubt.
Wenn Sie die Konfigurationen aller verfügbaren Zonen überprüfen möchten, geben Sie Folgendes ein:
sudo firewall-cmd --list-all-zones
Der Befehl druckt eine riesige Liste mit den Einstellungen aller verfügbaren Zonen.
Ändern der Zone einer Schnittstelle #
Sie können die Schnittstellenzone einfach ändern, indem Sie --zone
verwenden Option in Kombination mit --change-interface
Möglichkeit. Der folgende Befehl weist den eth1
zu Schnittstelle zur Arbeitszone:
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: eth1
public
interfaces: eth0
Ändern der Standardzone #
Um die Standardzone zu ändern, verwenden Sie --set-default-zone
Option gefolgt vom Namen der Zone, die Sie als Standard festlegen möchten.
Um beispielsweise die Standardzone auf home zu ändern, sollten Sie den folgenden Befehl ausführen:
sudo firewall-cmd --set-default-zone=home
Überprüfen Sie die Änderungen mit:
sudo firewall-cmd --get-default-zone
home
Öffnen eines Ports oder Dienstes #
Mit FirewallD können Sie Datenverkehr für bestimmte Ports basierend auf vordefinierten Regeln, die Dienste genannt werden, zulassen.
Um eine Liste aller standardmäßig verfügbaren Dienste zu erhalten, geben Sie Folgendes ein:
sudo firewall-cmd --get-services
Weitere Informationen zu jedem Dienst finden Sie, indem Sie die zugehörige XML-Datei in /usr/lib/firewalld/services
öffnen Verzeichnis. Der HTTP-Dienst ist beispielsweise wie folgt 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>
Um eingehenden HTTP-Datenverkehr (Port 80) für Schnittstellen in der öffentlichen Zone nur für die aktuelle Sitzung (Laufzeitkonfiguration) zuzulassen, geben Sie Folgendes ein:
sudo firewall-cmd --zone=public --add-service=http
Wenn Sie die Standardzone ändern, können Sie --zone
weglassen Möglichkeit.
Um zu überprüfen, ob der Dienst erfolgreich hinzugefügt wurde, verwenden Sie --list-services
Möglichkeit:
sudo firewall-cmd --zone=public --list-services
ssh dhcpv6-client http
Wenn Sie den Port 80 nach einem Neustart offen halten möchten, müssen Sie denselben Befehl noch einmal eingeben, diesmal jedoch mit dem --permanent
Möglichkeit:
sudo firewall-cmd --permanent --zone=public --add-service=http
Verwenden Sie die --list-services
zusammen mit dem --permanent
Option zum Überprüfen Ihrer Änderungen:
sudo firewall-cmd --permanent --zone=public --list-services
ssh dhcpv6-client http
Die Syntax zum Entfernen eines Dienstes ist dieselbe wie beim Hinzufügen eines Dienstes. Verwenden Sie einfach --remove-service
anstelle von --add-service
Möglichkeit:
sudo firewall-cmd --zone=public --remove-service=http --permanent
Der obige Befehl entfernt den HTTP-Dienst aus der permanenten Konfiguration der öffentlichen Zone.
Was ist, wenn Sie eine Anwendung wie Plex Media Server ausführen, für die kein geeigneter Dienst verfügbar ist?
In solchen Situationen haben Sie zwei Möglichkeiten. Sie können entweder die entsprechenden Ports öffnen oder einen neuen FirewallD-Dienst definieren.
Zum Beispiel lauscht der Plex Server auf Port 32400 und verwendet TCP, um den Port in der öffentlichen Zone für die aktuelle Sitzung zu öffnen, verwenden Sie den --add-port=
Möglichkeit:
sudo firewall-cmd --zone=public --add-port=32400/tcp
Protokolle können entweder tcp
sein oder udp
.
Um zu überprüfen, ob der Port erfolgreich hinzugefügt wurde, verwenden Sie --list-ports
Möglichkeit:
sudo firewall-cmd --zone=public --list-ports
32400/tcp
Um den Port 32400
beizubehalten nach einem Neustart öffnen, fügen Sie die Regel zu den permanenten Einstellungen hinzu, indem Sie denselben Befehl mit --permanent
ausführen Option.
Die Syntax zum Entfernen eines Ports ist dieselbe wie beim Hinzufügen eines Ports. Verwenden Sie einfach --remove-port
anstelle von --add-port
Option.
sudo firewall-cmd --zone=public --remove-port=32400/tcp
Erstellen eines neuen FirewallD-Dienstes #
Wie bereits erwähnt, sind die Standarddienste in /usr/lib/firewalld/services
gespeichert Verzeichnis. Der einfachste Weg, einen neuen Dienst zu erstellen, besteht darin, eine vorhandene Dienstdatei nach /etc/firewalld/services
zu kopieren Verzeichnis, das der Speicherort für vom Benutzer erstellte Dienste ist, und die Dateieinstellungen ändern.
Um beispielsweise eine Dienstdefinition für den Plex Media Server zu erstellen, können wir 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 von <short>
und <description>
Stichworte. Das wichtigste Tag, das Sie ändern müssen, ist der 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 plexmediaserver
verwenden Service in Ihren Zonen wie jeder andere Service..
Weiterleitungsport mit Firewalld #
Um Datenverkehr von einem Port zu einem anderen Port oder einer anderen Adresse weiterzuleiten, aktivieren Sie zuerst das Masquerading für die gewünschte Zone mit --add-masquerade
schalten. Zum Beispiel, um Masquerading für external
zu aktivieren Zonentyp:
sudo firewall-cmd --zone=external --add-masquerade
- Weiterleiten von Datenverkehr von einem Port zu einem anderen auf demselben Server
Im folgenden Beispiel leiten wir den Datenverkehr von Port 80
weiter um 8080
zu portieren auf demselben Server:
sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080
- Traffic an einen anderen Server weiterleiten
Im folgenden Beispiel leiten wir den Datenverkehr von Port 80
weiter um 80
zu portieren auf einem Server mit IP 10.10.10.2
:
sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toaddr=10.10.10.2
- Verkehr an einen anderen Server an einem anderen Port weiterleiten
Im folgenden Beispiel leiten wir den Datenverkehr von Port 80
weiter um 8080
zu portieren auf einem Server mit IP 10.10.10.2
:
sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=10.10.10.2
Wenn Sie die Weiterleitung dauerhaft machen möchten, hängen Sie einfach den --permanent
an Option.
Erstellen eines Regelsatzes mit FirewallD #
Im folgenden Beispiel zeigen wir, wie Sie Ihre Firewall konfigurieren, wenn Sie einen Webserver betreiben. Wir gehen davon aus, dass Ihr Server nur eine Schnittstelle eth0
hat , und eingehenden Datenverkehr nur über SSH-, HTTP- und HTTPS-Ports zulassen möchten.
-
Ändern Sie die Standardzone auf dmz
Wir werden die dmz (demilitarisierte) Zone verwenden, da sie standardmäßig nur SSH-Verkehr zulässt. Um die Standardzone auf dmz zu ändern und sie dem
eth0
zuzuweisen Schnittstelle, führen Sie die folgenden Befehle aus:sudo firewall-cmd --set-default-zone=dmz
sudo firewall-cmd --zone=dmz --add-interface=eth0
-
HTTP- und HTTPS-Ports öffnen:
Um HTTP- und HTTPS-Ports zu öffnen, fügen Sie permanente Dienstregeln zur dmz-Zone hinzu:
sudo firewall-cmd --permanent --zone=dmz --add-service=http
sudo firewall-cmd --permanent --zone=dmz --add-service=https
Machen Sie die Änderungen sofort wirksam, indem Sie die Firewall neu laden:
sudo firewall-cmd --reload
-
Überprüfen Sie die Änderungen
Geben Sie Folgendes ein, um die Konfigurationseinstellungen der dmz-Zone zu überprüfen:
sudo firewall-cmd --zone=dmz --list-all
dmz (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: ssh http https ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
Die obige Ausgabe sagt uns, dass dmz die Standardzone ist und auf
eth0
angewendet wird Schnittstelle und ssh (22) http (80) und https (443) Ports sind offen.