firewalld — Dynamische Firewall-Verwaltung unter Linux
Praxis-Guide zu firewalld — Zones, Services, Ports und Rich Rules mit firewall-cmd, Runtime- und Permanent-Regeln für RHEL, Fedora und CentOS.
firewalld ist der dynamische Firewall-Daemon von RHEL, Fedora und CentOS und wird über das Kommando firewall-cmd gesteuert. Unter der Haube setzt er auf nftables (früher iptables) auf und organisiert Regeln in Zones – Vertrauensstufen wie public oder trusted, denen du Interfaces, Services und Ports zuweist. Entscheidend ist der Unterschied zwischen Runtime und Permanent: Änderungen ohne --permanent gelten sofort, gehen aber bei --reload oder einem Reboot verloren. Dieser Guide zeigt dir die wichtigsten Befehle für den Alltag, vom Zonen-Status über Services und Ports bis zu Rich Rules und NAT.
Status & Zones
firewall-cmd --state — Prüft, ob firewalld läuft.
firewall-cmd --statefirewall-cmd --get-active-zones — Zeigt aktive Zones und ihre Interfaces.
firewall-cmd --get-active-zonesfirewall-cmd --get-default-zone — Zeigt die Default-Zone.
firewall-cmd --get-default-zonefirewall-cmd --set-default-zone=<zone> — Ändert die Default-Zone. Wirkt auf jedes Interface ohne explizite Zone, daher vor dem Umstellen die aktuelle Default-Zone prüfen.
firewall-cmd --set-default-zone=publicfirewall-cmd --list-all — Listet alle Einstellungen der Default-Zone.
firewall-cmd --list-allfirewall-cmd --zone=<zone> --list-all — Listet alle Einstellungen einer bestimmten Zone.
firewall-cmd --zone=public --list-allfirewall-cmd --get-zones — Listet alle verfügbaren Zones.
firewall-cmd --get-zonesServices
firewall-cmd --add-service=<service> — Erlaubt einen Service. Nur Runtime: geht bei --reload oder Reboot verloren. Die Zone trusted und freizügige --add-service-Regeln mit Bedacht einsetzen.
firewall-cmd --add-service=httpfirewall-cmd --add-service=<service> --permanent — Erlaubt einen Service dauerhaft.
firewall-cmd --add-service=https --permanentfirewall-cmd --remove-service=<service> --permanent — Entfernt einen Service dauerhaft.
firewall-cmd --remove-service=ftp --permanentfirewall-cmd --list-services — Listet die aktuell erlaubten Services.
firewall-cmd --list-servicesfirewall-cmd --get-services — Listet alle verfügbaren vordefinierten Services.
firewall-cmd --get-servicesfirewall-cmd --info-service=<service> — Zeigt Details zu einem Service (Ports, Protokolle).
firewall-cmd --info-service=sshPorts
firewall-cmd --add-port=<port>/<proto> --permanent — Öffnet einen Port dauerhaft.
firewall-cmd --add-port=8080/tcp --permanentfirewall-cmd --add-port=<start>-<end>/<proto> --permanent — Öffnet einen Port-Bereich dauerhaft.
firewall-cmd --add-port=3000-3100/tcp --permanentfirewall-cmd --remove-port=<port>/<proto> --permanent — Schließt einen Port dauerhaft.
firewall-cmd --remove-port=8080/tcp --permanentfirewall-cmd --list-ports — Listet alle offenen Ports.
firewall-cmd --list-portsRich Rules
firewall-cmd --add-rich-rule='rule family=ipv4 source address=<ip> accept' --permanent — Erlaubt sämtlichen Traffic von einer bestimmten IP.
firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.0.0.5 accept' --permanentfirewall-cmd --add-rich-rule='rule family=ipv4 source address=<ip> drop' --permanent — Blockiert sämtlichen Traffic von einer bestimmten IP.
firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.1.100 drop' --permanentfirewall-cmd --add-rich-rule='rule family=ipv4 source address=<ip> port port=<port> protocol=tcp accept' --permanent — Erlaubt einer bestimmten IP den Zugriff auf einen Port.
firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.0.0.0/24 port port=3306 protocol=tcp accept' --permanentfirewall-cmd --list-rich-rules — Listet alle Rich Rules.
firewall-cmd --list-rich-rulesfirewall-cmd --remove-rich-rule='<rule>' --permanent — Entfernt eine Rich Rule.
firewall-cmd --remove-rich-rule='rule family=ipv4 source address=10.0.0.5 accept' --permanentMasquerade & Forwarding
firewall-cmd --add-masquerade --permanent — Aktiviert Masquerading (NAT).
firewall-cmd --add-masquerade --permanentfirewall-cmd --add-forward-port=port=<src>:proto=tcp:toport=<dest> --permanent — Leitet einen lokalen Port auf einen anderen lokalen Port weiter.
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 --permanentfirewall-cmd --add-forward-port=port=<src>:proto=tcp:toaddr=<ip>:toport=<dest> --permanent — Leitet einen Port an einen entfernten Host weiter.
firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.1.10:toport=8080 --permanentfirewall-cmd --query-masquerade — Prüft, ob Masquerading aktiv ist.
firewall-cmd --query-masqueradeRuntime vs. Permanent
firewall-cmd --reload — Lädt die Firewall neu und wendet die Permanent-Regeln an. Nicht persistierte Runtime-Änderungen gehen dabei verloren – wer dauerhafte Regeln will, kombiniert --permanent mit einem anschließenden --reload.
firewall-cmd --reloadfirewall-cmd --runtime-to-permanent — Speichert die aktuellen Runtime-Regeln als Permanent.
firewall-cmd --runtime-to-permanentfirewall-cmd --panic-on — Aktiviert den Panic-Modus (blockiert sämtlichen Traffic). Kappt sofort auch bestehende Verbindungen – auf einem Remote-Server sperrst du damit deine eigene SSH-Sitzung aus.
firewall-cmd --panic-onfirewall-cmd --panic-off — Deaktiviert den Panic-Modus.
firewall-cmd --panic-offfirewall-cmd --complete-reload — Vollständiger Reload, der alle Runtime-Regeln verwirft.
firewall-cmd --complete-reload Fazit
firewalld nimmt dir die nftables-Syntax ab und macht aus Firewall-Verwaltung ein Spiel mit Zones, Services und Ports. Die häufigste Stolperfalle bleibt der Unterschied zwischen Runtime und Permanent: Teste eine Regel ruhig erst zur Laufzeit, schreibe sie aber mit --permanent fest und lade die Firewall neu, sobald sie sitzt – sonst ist sie nach dem nächsten Reboot weg.
Weiterführende Links
- firewalld – offizielle Dokumentation – Konzepte, Zones und Beispiele (englisch)
- firewall-cmd(1) – Manpage – alle Optionen im Überblick (englisch)