Einführung
Firewalld ist eine Firewall-Verwaltungslösung, die für viele Linux-Distributionen verfügbar ist. Sie dient als Schnittstelle zum vom Linux-Kernel bereitgestellten iptables-Paketfiltersystem. In dieser Anleitung erfahren Sie, wie Sie eine Firewall für Ihren Server konfigurieren. Wir zeigen Ihnen auch die Grundlagen der Verwaltung der Firewall mit dem Administrationswerkzeug firewall-cmd.
Firewalld-Grundlagen
FirewallD verwendet die Konzepte von Zonen und Diensten anstelle der Ketten und Regeln von iptables. Abhängig von den konfigurierten Zonen und Diensten können Sie steuern, welcher Datenverkehr zum und vom System zugelassen oder nicht zugelassen ist. FirewallD kann über das Befehlszeilenprogramm firewall-cmd konfiguriert und verwaltet werden.
Installieren und Aktivieren Ihrer Firewall für den Start beim Booten
Auf den meisten Linux-Distributionen ist firewallD bereits installiert. Wenn Sie es jedoch selbst installieren müssen, geben Sie die folgende Syntax ein:
|
1 |
sudo yum install firewalld |
Sie können den Dienst aktivieren und Ihren Server neu starten, sobald firewalld installiert ist:
|
1 2 |
sudo systemctl enable firewalld sudo reboot |
Starten Sie als Nächstes Ihren Server neu. Ihre Firewall wird aktiviert, wenn Sie den Server erfolgreich neu gestartet haben. Verwenden Sie danach den folgenden Befehl, um zu überprüfen, ob der Dienst aktiviert wurde:
|
1 |
sudo firewall-cmd --state |

Die Ausgabe zeigt, dass die Standard-Firewall-Einstellung funktioniert.
Überprüfen der Standardeinstellungen
Sie können die vom Server ausgewählte Zone mit diesem Befehl überprüfen:
|
1 |
firewall-cmd --get-default-zone |

Überprüfen Sie die aktive Zone, indem Sie Folgendes eingeben:
|
1 |
firewall-cmd --get-active-zones |

Geben Sie die Konfiguration der Standardzone aus, um die dem öffentlichen Bereich zugeordneten Regeln mit dieser Syntax zu erfahren:
|
1 |
sudo firewall-cmd --list-all |

Die Ausgabe zeigt an, dass diese Zone sowohl die Standard- als auch die aktive Zone ist. Sie zeigt auch, dass die Schnittstellen eth0 und eth1 dieser Zone zugewiesen sind.
Überprüfen alternativer Zonen
Zusätzlich zu den Standard- und aktiven Zonen gibt es weitere Zonen, die Sie erkunden können. Geben Sie diesen Befehl ein, um alle verfügbaren Zonen anzuzeigen:
|
1 |
firewall-cmd --get-zones |

Überprüfen Sie die einer Zone zugewiesene spezifische Konfiguration, indem Sie den Parameter –zone= im Befehl –list-all hinzufügen:
|
1 |
sudo firewall-cmd --zone=home --list-all |

Ändern der Schnittstellenzone
Sie können die Schnittstellenzone ganz einfach mit der Option –change-interface in Kombination mit der Option –change-interface ändern. Der folgende Befehl weist die Schnittstelle eth1 dem Arbeitsbereich zu:
|
1 |
sudo firewall-cmd --zone=work --change-interface=eth1 |
Sie können die Änderungen überprüfen, indem Sie Folgendes eingeben:
|
1 |
sudo firewall-cmd --get-active-zones |
Ändern der Standardzone
Um die Standardzone zu ändern, verwenden Sie –set-default-zone gefolgt von dem Namen der Zone, die Sie als Standard festlegen möchten. Um beispielsweise die Standardzone zu ändern, sollten Sie den folgenden Befehl ausführen:
|
1 |
sudo firewall-cmd --set-default-zone=home |
Als Nächstes können Sie die Änderungen überprüfen mit:
|
1 |
sudo firewall-cmd --get-default-zone |
Regeln für Ihre Anwendungen festlegen
Gehen wir die Grundlagen durch, die erforderlich sind, um Firewall-Ausnahmen für die Dienste zu definieren:
Hinzufügen eines Dienstes zu Ihren Zonen
Der einfachste Weg besteht darin, die benötigten Ports oder Dienste zu den von Ihnen verwendeten Zonen hinzuzufügen. Ebenso können Sie die Option –get-services verwenden, um alle verfügbaren Dienste anzuzeigen:
|
1 |
firewall-cmd --get-services |

Sie können den Dienst für eine Zone mit dem Parameter –add-service = aktivieren. Die Aktion zielt auf die Standardzone oder eine beliebige durch den Parameter –zone = definierte Zone ab. Standardmäßig wird nur die aktuelle Firewall-Sitzung konfiguriert. Sie können eine dauerhafte Firewall-Konfiguration einrichten, indem Sie das Flag –permanent aktivieren. Wenn Sie beispielsweise einen Webserver betreiben, der regulären HTTP-Verkehr bereitstellt, können Sie diesen Verkehr für Schnittstellen in unserer “public”-Zone für diese Sitzung zulassen, indem Sie Folgendes eingeben:
|
1 |
sudo firewall-cmd --zone=public --add-service=http |
Sie können –zone = weglassen, wenn Sie die Standardzone ändern möchten. Sie können den Erfolg des Vorgangs mit den Operationen –list-all oder –list-services überprüfen:
|
1 |
sudo firewall-cmd --zone=public --list-services |

Sobald Sie überprüft haben, dass alles wie erwartet funktioniert, möchten Sie wahrscheinlich die permanenten Firewall-Regeln ändern, damit Ihr Dienst auch nach einem Neustart verfügbar bleibt. Wir können die Änderung an unserer “public”-Zone dauerhaft vornehmen, indem wir folgende Syntax eingeben:
|
1 2 3 4 |
sudo firewall-cmd --zone=public --permanent --add-service=http Ausgabe: success |
Sie können überprüfen, ob dies erfolgreich war, indem Sie das Flag –permanent zur Operation –list-services hinzufügen. Sie müssen sudo für alle permanenten Operationen verwenden:
|
1 2 3 4 |
sudo firewall-cmd --zone=public --permanent --list-services Ausgabe: dhcpv6-client http ssh |
Ihre “public”-Zone lässt nun HTTP-Verkehr auf Port 80 zu. Sie können dies mit dem folgenden Befehl zur aktuellen Sitzung und dem dauerhaften Regelsatz hinzufügen:
|
1 2 3 |
sudo firewall-cmd --zone=public --add-service=https sudo firewall-cmd --zone=public --permanent --add-service=https |
Wenn es keine Dienste gibt, die Ihren Anforderungen entsprechen, haben Sie zwei hervorragende Möglichkeiten, diese Situation zu bewältigen:
- Öffnen eines Ports für Ihre Zonen
Der einfachste Weg, Unterstützung für Ihre spezielle Anwendung hinzuzufügen, besteht darin, die in jeder Zone verwendeten Ports zu öffnen. Es ist so einfach wie das Festlegen eines Ports oder Portbereichs und des entsprechenden Protokolls für die Ports, die Sie öffnen müssen. Wenn Ihre Anwendung beispielsweise auf Port 5000 läuft und TCP verwendet, können Sie sie für diese Sitzung mit dem Parameter –add-port = zur “public”-Zone hinzufügen. Protokolle können TCP oder UDP sein:
|
1 2 3 4 |
sudo firewall-cmd --zone=public --add-port=5000/tcp Ausgabe: success |
Um zu überprüfen, ob der Vorgang erfolgreich war, verwenden Sie die Operation –list-ports:
|
1 2 3 4 |
sudo firewall-cmd --zone=public --list-ports Ausgabe: 5000/tcp |
Sie können auch einen Bereich für die serielle Schnittstelle angeben, indem Sie die Start- und Endports im Bereich mit einem Bindestrich trennen. Wenn Ihre Anwendung beispielsweise die UDP-Ports 4990 bis 4999 verwendet, können Sie diese in “public” öffnen, indem Sie Folgendes schreiben:
|
1 |
sudo firewall-cmd --zone=public --add-port=4990-4999/udp |
Nach dem Testen möchten wir sie wahrscheinlich zur permanenten Firewall hinzufügen. Sie können dies tun, indem Sie Folgendes eingeben:
|
1 2 3 |
sudo firewall-cmd --zone=public --permanent --add-port=5000/tcp sudo firewall-cmd --zone=public --permanent --add-port=4990-4999/udp sudo firewall-cmd --zone=public --permanent --list-ports |

- Definieren eines Dienstes
Ein Dienst ist eine Sammlung von Ports mit einem zugehörigen Namen und einer Beschreibung. Dienste sind einfacher zu verwalten als Ports, erfordern jedoch ein wenig Anfangsaufwand. Der einfachste Weg für den Einstieg besteht darin, ein vorhandenes Skript (in / usr / lib / firewalld / services) in das Verzeichnis /etc/firewalld/services zu kopieren. Sie können beispielsweise die SSH-Dienstdefinition wie folgt kopieren, um sie in der Dienstdefinition “example” zu verwenden. Der Dateiname abzüglich der XML-Endung bestimmt den Dienstnamen in der Liste der Firewall-Dienste:
|
1 |
sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/example.xml |
An diesem Punkt können Sie die Definition in der kopierten Datei anpassen:
|
1 |
sudo vi /etc/firewalld/services/example.xml |
Zuerst enthält die Datei die von Ihnen kopierte SSH-Definition:
|
1 2 3 4 5 6 |
<?xml version="1.0" encoding="utf-8"?> <service> <short>SSH</short> <description>Sichere Shell (SSH) ist ein Protokoll für das Einloggen in und Ausführen von Befehlen auf entfernten Maschinen. Es bietet sichere verschlüsselte Kommunikation. Wenn Sie planen auf zuzugreifen Ihre Maschine aus der Ferne über SSH über eine durch eine Firewall geschützte Schnittstelle, aktivieren Sie diese Option. Sie benötigen das openssh-Server-Paket installiert damit diese Option nützlich sein kann.</description> <port protocol="tcp" port="22"/> </service> |
Der größte Teil dieser Definition besteht aus Metadaten. Sie müssen den Kurznamen des Dienstes in den <short>-Tags ändern. Dies ist ein lesbarer Dienstname. Stellen Sie sich vor, für unseren “example”-Dienst müssen wir Port 7777 für TCP und 8888 für UDP öffnen. Sie können die bestehende Definition ändern, indem Sie durch Drücken von i in den INSERT-Modus wechseln:
|
1 2 3 4 5 6 7 |
<?xml version="1.0" encoding="utf-8"?> <service> <short>Beispiel-dienst</short> <description>Dies ist nur ein Beispiel-dienst. Er sollte wahrscheinlich 'nicht auf einem realen System verwendet werden.</description> <port protocol="tcp" port="7777"/> <port protocol="udp" port="8888"/> </service> |
Next, press ESC and type: x to save and close the file. Then, type the command below to restart your firewall in order to have access to your new service;
|
1 |
sudo firewall-cmd --reload |
Verwenden Sie danach den folgenden Befehl, um eine Liste der verfügbaren Dienste anzuzeigen:
|
1 |
firewall-cmd --get-services |

Dieser Dienst ist nun in Ihrer Zone verfügbar.
Erstellen Ihrer Zonen
Während die vordefinierten Zonen für die meisten Benutzer wahrscheinlich ausreichen, kann es nützlich sein, eigene Zonen zu definieren, die deren Funktion genauer beschreiben.
Wenn Sie eine Zone hinzufügen, fügen Sie sie zu Ihren permanenten Firewall-Einstellungen hinzu. Anschließend können Sie die Firewall neu laden, um die Einstellungen in Ihre Sitzung zu übernehmen. Sie können beispielsweise die beiden zuvor besprochenen Zonen erstellen, indem Sie Folgendes eingeben:
|
1 2 |
sudo firewall-cmd --permanent --new-zone=publicweb sudo firewall-cmd --permanent --new-zone=privateDNS |
Sie können mit diesem Befehl bestätigen, dass sie in Ihrer permanenten Konfiguration vorhanden sind:
|
1 |
sudo firewall-cmd --permanent --get-zones |

Laden Sie die Firewall neu, um diese neuen Zonen in die aktive Konfiguration zu übernehmen:
|
1 2 3 4 5 |
sudo firewall-cmd --reload firewall-cmd --get-zones Ausgabe: block dmz drop external home internal privateDNS public publicweb trusted work |
Jetzt können Sie Ihren Zonen die entsprechenden Dienste und Ports zuweisen. Für die Zone “publicweb” möchten Sie beispielsweise die Dienste SSH, HTTP und HTTPS hinzufügen:
|
1 2 3 |
sudo firewall-cmd --zone=publicweb --add-service=ssh sudo firewall-cmd --zone=publicweb --add-service=http sudo firewall-cmd --zone=publicweb --add-service=https |

Sie können Ihrer Zone „privateDNS“ auch den DNS-Dienst mit diesem Befehl hinzufügen:
|
1 2 |
sudo firewall-cmd --zone=privateDNS --add-service=dns sudo firewall-cmd --zone=privateDNS --list-all |

Als Nächstes können Sie Ihre Schnittstellen in diese neuen Zonen ändern, um sie zu testen:
|
1 2 3 |
sudo firewall-cmd --zone=publicweb --change-interface=eth0 sudo firewall-cmd --zone=privateDNS --change-interface=eth1 |
Testen Sie die Konfiguration, um zu sehen, ob sie funktioniert. Wenn diese Werte für Sie funktionieren, müssen Sie dieselben Regeln zur permanenten Konfiguration hinzufügen. Sie können dies tun, indem Sie die Regeln mit dem Indikator —permanent erneut anwenden:
|
1 2 3 4 5 6 7 |
sudo firewall-cmd --zone=publicweb --permanent --add-service=ssh sudo firewall-cmd --zone=publicweb --permanent --add-service=http sudo firewall-cmd --zone=publicweb --permanent --add-service=https sudo firewall-cmd --zone=privateDNS --permanent --add-service=dns |
Nachdem Sie diese Regeln dauerhaft angewendet haben, können Sie Ihr Netzwerk neu starten und Ihren Firewall-Dienst neu laden:
|
1 2 3 |
sudo systemctl restart network sudo systemctl reload firewalld |
Überprüfen Sie, ob die Zonen korrekt zugewiesen wurden:
|
1 |
firewall-cmd --get-active-zones |

Stellen Sie außerdem sicher, dass beide Zonen den korrekten Dienst haben:
|
1 2 3 4 |
sudo firewall-cmd --zone=publicweb --list-services Ausgabe: http https ssh |
|
1 2 3 4 5 |
sudo firewall-cmd --zone=privateDNS --list-services Ausgabe: dns |
Wenn Sie eine Ihrer Zonen als Standard für andere Schnittstellen festlegen möchten, müssen Sie dieses Verhalten mit dem Parameter –set-default-zone= über diesen Befehl konfigurieren:
|
1 |
sudo firewall-cmd --set-default-zone=publicweb |
Fazit
An diesem Punkt haben Sie Ihre eigenen Zonen erfolgreich erstellt. Sie sollten nun ein grundlegendes Verständnis für die Verwaltung des firewalld-Dienstes auf Ihrem CentOS-System für den täglichen Gebrauch haben. Ein gutes Verständnis des firewalld-Dienstes ermöglicht es Ihnen, seine Leistungsfähigkeit und Flexibilität voll auszuschöpfen.
Viel Spaß beim Computing!


Kommentare
Noch keine Kommentare. Schreiben Sie den ersten.