linux-rhel-centos-fedora security firewall firewall-cmd rhel advanced

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 --permanent konsequent in Ihren Deployment-Skripten.
  • Audit: Überwachen Sie Änderungen an der Firewall mit auditd auf 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