Wie man firewalld auf Rocky Linux verwaltet: Zonen, Dienste und Ports
Rocky Linux verwendet firewalld als seinen Standard-Dienst für die Firewall-Verwaltung, und der Befehl firewall-cmd verwaltet Zonen, Dienste, Ports und Rich Rules. Auf einem Remote-Server ist der sicherste Arbeitsablauf, eine Änderung in der Laufzeitkonfiguration zu testen, während die aktuelle SSH-Sitzung offen bleibt, eine neue Verbindung zu überprüfen und die Regel erst danach dauerhaft zu speichern.
Diese Anleitung erklärt die Befehle, die für die routinemäßige Rocky Linux-Firewall-Verwaltung benötigt werden, und die Überprüfungen, die helfen, ein versehentliches Ausschließen zu verhindern.
Firewalld-Status und aktive Zonen überprüfen
sudo firewall-cmd --state
sudo systemctl status firewalld
sudo firewall-cmd --get-active-zones
sudo firewall-cmd --get-default-zone
Eine Firewalld-Zone ist eine Sammlung von Regeln, die mit einem Vertrauenslevel verknüpft sind. Einer Zone kann ein Netzwerkinterface, eine NetworkManager-Verbindung oder eine Quelladresse zugewiesen werden. Überprüfen Sie die aktiven Zonen, bevor Sie Änderungen vornehmen, da das Weglassen von --zone die Standardzone anstelle der Zone ändern kann, die den Verkehr behandelt, den Sie steuern möchten.
Wenn ein Interface nicht dort erscheint, wo Sie es erwarten, überprüfen Sie die aktive NetworkManager-Verbindung, bevor Sie Regeln hinzufügen. Eine korrekte Regel in der falschen Zone erlaubt den beabsichtigten Verkehr nicht.
Starten Sie firewalld und aktivieren Sie es beim Booten
sudo systemctl enable --now firewalld
Überprüfen Sie sowohl die Boot-Einstellung als auch den aktuellen Dienstzustand:
systemctl is-enabled firewalld
systemctl is-active firewalld
Deaktivieren Sie nicht die gesamte Firewall auf einem Produktionsserver nur, um eine Anwendung erreichbar zu machen. Erlauben Sie nur den erforderlichen Dienst, Port, das Protokoll und die Quelle. In einer Cloud-Umgebung denken Sie daran, dass eine Sicherheitsgruppe, eine Netzwerkzugriffskontrollliste oder die Firewall des Anbieters den Verkehr unabhängig von firewalld blockieren kann.
Verstehen Sie Laufzeit- und Permanenteinstellungen
| Konfiguration | Wann sie wirksam wird | Verhalten |
|---|---|---|
| Laufzeit | Unmittelbar nach Ausführung des Befehls | Nützlich zum Testen, aber Änderungen können nach einem Reload, Neustart des Dienstes oder einem Reboot verschwinden. |
| Permanent | Mit --permanent gespeichert und durch einen Reload aktiviert |
Übersteht einen Neustart, aber viele dauerhafte Änderungen wirken sich nicht sofort auf die aktuelle Laufzeitkonfiguration aus. |
Für einen Remote-Server fügen Sie die Regel zuerst zur Laufzeitkonfiguration hinzu. Testen Sie die Anwendung und öffnen Sie eine zweite SSH-Verbindung, bevor Sie die funktionierende Laufzeitkonfiguration in die dauerhafte Konfiguration kopieren.
sudo firewall-cmd --zone=public --add-service=http
sudo firewall-cmd --zone=public --query-service=http
sudo firewall-cmd --runtime-to-permanent
Wenn Sie stattdessen eine Änderung mit --permanent vornehmen, überprüfen Sie sie und laden Sie firewalld neu, um sie zu aktivieren:
sudo firewall-cmd --reload
Ein Reload ersetzt die Laufzeitkonfiguration durch die dauerhafte Konfiguration. Nicht gespeicherte Änderungen, die nur zur Laufzeit bestehen, gehen daher verloren.
Vordefinierte Dienste zulassen und entfernen
Verfügbare Dienstdefinitionen auflisten
firewall-cmd --get-services
firewall-cmd --info-service=http
Wenn firewalld bereits einen Standarddienst wie HTTP, HTTPS oder SSH definiert, kommuniziert die Verwendung des Dienstnamens im Allgemeinen den Zweck klarer als das Öffnen einzelner Ports. Eine Dienstdefinition kann auch mehr als einen Port, ein Protokoll oder einen Helfer umfassen.
Einen Dienst in der Laufzeitkonfiguration zulassen
sudo firewall-cmd --zone=public --add-service=http
sudo firewall-cmd --zone=public --add-service=https
Das Öffnen der Firewall startet den Webserver nicht. Stellen Sie sicher, dass die Anwendung läuft und auf der erwarteten Adresse und dem erwarteten Port lauscht:
ss -lntup
Einen erlaubten Dienst entfernen
sudo firewall-cmd --zone=public --remove-service=http
Bevor Sie den SSH-Zugang auf einem entfernten Rechner entfernen, stellen Sie sicher, dass eine andere getestete Zugriffsregel und eine Out-of-Band-Konsole verfügbar sind. Halten Sie die bestehende SSH-Sitzung geöffnet, bis eine neue Verbindung erfolgreich ist.
Benutzerdefinierte Ports verwalten
Erlauben Sie einen TCP- oder UDP-Port
sudo firewall-cmd --zone=public --add-port=8443/tcp
sudo firewall-cmd --zone=public --add-port=5000/udp
TCP und UDP erfordern separate Regeln. Überprüfen Sie die Dokumentation der Anwendung und öffnen Sie nur das Protokoll und den Port, den sie tatsächlich verwendet.
Erlauben Sie einen Portbereich
sudo firewall-cmd --zone=public --add-port=6000-6010/tcp
Bevor Sie einen breiten Bereich öffnen, bestätigen Sie den genauen Bereich, den die Anwendung benötigt. Beschränken Sie gegebenenfalls den Zugriff auch auf bekannte Quelladressen oder ein dediziertes Verwaltungsnetz.
Ports entfernen und auflisten
sudo firewall-cmd --zone=public --remove-port=8443/tcp
sudo firewall-cmd --zone=public --list-ports
Überprüfen Sie die aktuellen Regeln
sudo firewall-cmd --zone=public --list-all
sudo firewall-cmd --list-all-zones
sudo firewall-cmd --permanent --zone=public --list-all
Der erste Befehl zeigt die Laufzeitregeln für die angegebene Zone, während der letzte Befehl ihre permanenten Regeln anzeigt. Wenn die Ergebnisse unterschiedlich sind, kann sich der Server nach dem nächsten Neuladen oder Neustart anders verhalten. Vergleichen Sie beide Konfigurationen, bevor Sie eine Wartungsänderung abschließen.
Zugriff auf eine Quelladresse einschränken
Erstellen Sie eine Rich-Regel für eine SSH-Quelle
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.0.2.10/32" service name="ssh" accept'
192.0.2.10 ist eine Dokumentationsadresse, nicht eine Adresse, die in eine Produktionsregel kopiert werden sollte. Ersetzen Sie sie durch die feste öffentliche IP-Adresse des Administrators oder ein vertrauenswürdiges internes Netzwerk. Verwenden Sie für IPv6 eine entsprechende IPv6-Quelle und Familie, anstatt das IPv4-Beispiel zu kopieren.
Vor dem Entfernen des allgemeinen SSH-Zugriffs testen
Nach dem Hinzufügen der quellspezifischen Regel halten Sie die aktuelle Sitzung offen und stellen eine neue SSH-Verbindung von der erlaubten Adresse her. Überprüfen Sie den Konsolen-Wiederherstellungszugang, bevor Sie die allgemeinere SSH-Dienstregel entfernen.
sudo firewall-cmd --zone=public --list-rich-rules
sudo firewall-cmd --zone=public --remove-service=ssh
Eine Quellbeschränkung kann Sie aussperren, wenn sich die öffentliche Adresse des Administrators ändert. Verwenden Sie eine feste Adresse, ein VPN oder ein dediziertes Management-Netzwerk, wenn ein stabiler quellbasierter Zugriff erforderlich ist.
Einen NetworkManager-Verbindung mit einer Zone verknüpfen
nmcli connection show --active
firewall-cmd --get-active-zones
Die Zuweisung einer Zone zu einem NetworkManager-Verbindungsprofil hält die Netzwerkkonfiguration und die Zuordnung der firewalld-Zone zusammen. Ersetzen Sie den Beispielsverbindungsnamen durch den genauen Namen, der von nmcli angezeigt wird.
sudo nmcli connection modify 'System eth0' connection.zone public
sudo nmcli connection up 'System eth0'
Das Reaktivieren einer Netzwerkverbindung kann den Fernzugriff unterbrechen. Führen Sie diese Änderung während eines Wartungsfensters mit vorhandener Konsolenzugriffsmöglichkeit durch, insbesondere wenn das Profil die primäre Route des Servers bereitstellt.
Blockierte Verbindungen in einer sinnvollen Reihenfolge beheben
- Führen Sie
systemctl is-active firewalldaus, um zu bestätigen, dass firewalld aktiv ist. - Verwenden Sie
firewall-cmd --get-active-zones, um die Zone zu finden, die mit dem relevanten Interface oder der Quelle verbunden ist. - Vergleichen Sie die Laufzeit- und die permanente
--list-all-Ausgabe für diese Zone. - Führen Sie
ss -lntupaus, um zu bestätigen, dass die Anwendung auf der erwarteten Adresse, dem Port und dem Protokoll horcht. - Überprüfen Sie Cloud-Sicherheitsgruppen, Provider-Firewalls, Router-Zugriffskontrolllisten und NAT-Regeln.
- Überprüfen Sie SELinux-Verweigerungen und die Protokolle der Anwendung.
Ein offener Port in firewalld garantiert keine erfolgreiche Verbindung. Die Anwendung muss laufen und auf einer erreichbaren Adresse lauschen, und jede andere Firewall- oder Routing-Schicht auf dem Weg muss den Datenverkehr ebenfalls zulassen.
Häufig gestellte Fragen
Warum nimmt eine mit --permanent hinzugefügte Regel nicht sofort Wirkung?
Eine permanente Regel wird für die zukünftige Nutzung gespeichert und wird normalerweise nach firewall-cmd --reload aktiv. Auf einem entfernten Server testen Sie zuerst die entsprechende Laufzeitregel, bestätigen Sie den Zugriff und speichern Sie sie dann mit --runtime-to-permanent.
Warum ist ein Dienst nicht erreichbar, obwohl sein Port offen ist?
Überprüfen Sie die aktive Zone, die lauschende Adresse und das Protokoll der Anwendung, Upstream-Cloud- oder Netzwerk-Firewalls, NAT und SELinux. Firewalld steuert nur eine Schicht des Verbindungswegs.
Sollte ich eine Serviceregel oder eine Portregel verwenden?
Verwenden Sie einen vordefinierten Dienst, wenn er die Anwendung genau darstellt, da die Regel leichter zu verstehen ist und alle erforderlichen Protokolle enthalten kann. Verwenden Sie einen expliziten Port und ein Protokoll für eine benutzerdefinierte Anwendung oder einen nicht standardmäßigen Port.
Ist es sicher, firewalld zur Fehlerbehebung zu stoppen?
Das Stoppen der gesamten Firewall kann jeden lauschenden Dienst sichtbar machen und ist auf einem Produktionsserver unsicher. Überprüfen Sie die aktive Zone, Protokolle und aktuellen Regeln und nehmen Sie dann die kleinste temporäre Laufzeitänderung vor, die für einen kontrollierten Test erforderlich ist.
Zusammenfassung
Ein sicherer Rocky Linux firewalld-Workflow beginnt damit, die aktive Zone zu identifizieren, die kleinste erforderliche Laufzeitsregel zu testen und sie erst zu speichern, nachdem die Verbindung funktioniert. Bevorzugen Sie benannte Dienste für Standardanwendungen, geben Sie für benutzerdefinierte Dienste sowohl den Port als auch das Protokoll an und vergleichen Sie Laufzeit- mit Permanentregeln, bevor Sie abschließen.
Für die Remote-SSH-Verwaltung bewahren Sie die aktuelle Sitzung und einen Konsolen-Wiederherstellungspfad auf, bis eine zweite Verbindung erfolgreich ist. Diese Vorsichtsmaßnahme ist wichtiger als jede einzelne firewall-cmd-Option.




