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 --state

firewall-cmd --get-active-zones — Zeigt aktive Zones und ihre Interfaces.

firewall-cmd --get-active-zones

firewall-cmd --get-default-zone — Zeigt die Default-Zone.

firewall-cmd --get-default-zone

firewall-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=public

firewall-cmd --list-all — Listet alle Einstellungen der Default-Zone.

firewall-cmd --list-all

firewall-cmd --zone=<zone> --list-all — Listet alle Einstellungen einer bestimmten Zone.

firewall-cmd --zone=public --list-all

firewall-cmd --get-zones — Listet alle verfügbaren Zones.

firewall-cmd --get-zones

Services

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=http

firewall-cmd --add-service=<service> --permanent — Erlaubt einen Service dauerhaft.

firewall-cmd --add-service=https --permanent

firewall-cmd --remove-service=<service> --permanent — Entfernt einen Service dauerhaft.

firewall-cmd --remove-service=ftp --permanent

firewall-cmd --list-services — Listet die aktuell erlaubten Services.

firewall-cmd --list-services

firewall-cmd --get-services — Listet alle verfügbaren vordefinierten Services.

firewall-cmd --get-services

firewall-cmd --info-service=<service> — Zeigt Details zu einem Service (Ports, Protokolle).

firewall-cmd --info-service=ssh

Ports

firewall-cmd --add-port=<port>/<proto> --permanent — Öffnet einen Port dauerhaft.

firewall-cmd --add-port=8080/tcp --permanent

firewall-cmd --add-port=<start>-<end>/<proto> --permanent — Öffnet einen Port-Bereich dauerhaft.

firewall-cmd --add-port=3000-3100/tcp --permanent

firewall-cmd --remove-port=<port>/<proto> --permanent — Schließt einen Port dauerhaft.

firewall-cmd --remove-port=8080/tcp --permanent

firewall-cmd --list-ports — Listet alle offenen Ports.

firewall-cmd --list-ports

Rich 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' --permanent

firewall-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' --permanent

firewall-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' --permanent

firewall-cmd --list-rich-rules — Listet alle Rich Rules.

firewall-cmd --list-rich-rules

firewall-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' --permanent

Masquerade & Forwarding

firewall-cmd --add-masquerade --permanent — Aktiviert Masquerading (NAT).

firewall-cmd --add-masquerade --permanent

firewall-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 --permanent

firewall-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 --permanent

firewall-cmd --query-masquerade — Prüft, ob Masquerading aktiv ist.

firewall-cmd --query-masquerade

Runtime 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 --reload

firewall-cmd --runtime-to-permanent — Speichert die aktuellen Runtime-Regeln als Permanent.

firewall-cmd --runtime-to-permanent

firewall-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-on

firewall-cmd --panic-off — Deaktiviert den Panic-Modus.

firewall-cmd --panic-off

firewall-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.

Verwandte Kommandos

  • age – moderne, einfache Datei-Verschlüsselung
  • clamav – Open-Source-Virenscanner
  • fail2ban – sperrt IPs nach fehlgeschlagenen Login-Versuchen