firewall-cmd: Advanced CLI Control (Artikel 092)
Der tiefe Einstieg in das firewall-cmd Werkzeug. Beherrschung von Direct Rules, Lockdown-Mechanismen und detailliertem Logging für Sicherheitsanalysen.
# firewall-cmd Masterclass: Präzision an der Frontline
TL;DR / Management Summary Während die Grundlagen von firewalld (Zonen und Services) schnell erlernt sind, bietet das Tool firewall-cmd für Senior Admins weit mächtigere Funktionen. In diesem Modul schauen wir uns die “Direct Interface” Regeln an (für rohe Iptables-Kommandos), den Lockdown-Modus (um zu verhindern, dass lokale Applikationen die Firewall manipulieren) und wie wir Logging-Regeln so verfeinern, dass sie für SIEM-Systeme nutzbar sind.
# 1. Einführung & Konzepte
Hinter der Zonen-Abstraktion.
firewalld ist ein Dämon, der DBus nutzt. Das CLI-Tool firewall-cmd kommuniziert mit diesem Dämon.
# Die Steuerungs-Ebenen (Mermaid)
graph TD
A[Admin / Scripts] -->|firewall-cmd| B[firewalld DBus API]
B --> C[Internal Config Manager]
C -->|High Level| D[Zonen / Services / Rich Rules]
C -->|Low Level| E[Direct Rules - Raw nftables]
D --> F[Kernel: nftables]
E --> F
# 2. Direct Rules: Der “Raw” Modus
Wenn die Abstraktion nicht reicht.
Manchmal müssen Sie Regeln schreiben, die nicht ins Zonen-Modell passen (z.B. spezielle NAT-Szenarien).
# Beispiel: Eine rohe Iptables-Regel einfügen
sudo firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -p tcp --dport 22 -j ACCEPT
Empfehlung: Nutzen Sie Direct Rules nur als letzten Ausweg. Rich Rules (siehe Artikel 091) sind fast immer die bessere, weil besser integrierte Wahl.
# 3. Lockdown Modus: Sicherheit für den Admin
Wer darf Regeln ändern?
Standardmäßig dürfen Prozesse, die als root laufen, die Firewall via DBus ändern (z.B. Libvirt). In hochsicheren Umgebungen wollen wir das unterbinden.
# Lockdown aktivieren
sudo firewall-cmd --lockdown-on
Jetzt können keine Änderungen mehr vorgenommen werden – außer durch Applikationen, die explizit in der Whitelist (/etc/firewalld/lockdown-whitelist.xml) stehen.
# 4. Day-2 Operations: Logging & Audit
Den Traffic sichtbar machen.
Standardmäßig loggt firewalld abgewiesene Pakete nicht sehr detailliert.
# Den Log-Level erhöhen
# Ändert den Log-Typ für abgewiesene Pakete
sudo firewall-cmd --set-log-denied=all
Mögliche Werte: all, unicast, broadcast, multicast, off. Die Logs landen im Kernel-Log (Journald/Dmesg).
# 5. Troubleshooting & “War Stories”
Debugging auf Experten-Niveau.
# Story 1: “Die versteckte Regel”
Symptom: Ein Paket wird abgewiesen, obwohl firewall-cmd --list-all den Port als offen anzeigt.
Ursache: Es existiert eine Direct-Rule oder eine Rich-Rule in einer anderen Zone mit höherer Priorität, die ein reject ausführt.
Lösung: Schauen Sie sich die rohen nftables-Regeln an, um zu sehen, was wirklich im Kernel passiert:
sudo nft list ruleset | grep <port>
# Story 2: “Panic Mode im falschen Moment”
Symptom: Der Admin führt firewall-cmd --panic-on über eine SSH-Sitzung aus. Die Verbindung bricht sofort ab, der Server ist komplett isoliert.
Ursache: Panic Mode schaltet jeglichen Traffic ab (Inbound & Outbound).
Lösung: Nur über physische Konsole oder Cloud-Konsole rettbar: firewall-cmd --panic-off.
# 6. Fazit & Empfehlung
- Automation: Nutzen Sie
--permanentkonsequent in Ihren Deployment-Skripten. - Audit: Überwachen Sie Änderungen an der Firewall mit
auditdauf dem Pfad/etc/firewalld/. - Sauberkeit: Löschen Sie ungenutzte Zonen und Services, um die Komplexität gering zu halten.
# Anhang: Cheatsheet
| Aufgabe | Befehl |
|---|---|
| Version und Hilfe | firewall-cmd --version |
| Alle Zonen auflisten | firewall-cmd --get-zones |
| Regeln einer Zone | firewall-cmd --zone=<name> --list-all |
| Permanent löschen | firewall-cmd --permanent --remove-service=<name> |
| Query (Existiert Regel?) | firewall-cmd --query-service=ssh |
| Interface Info | firewall-cmd --get-zone-of-interface=eth0 |