linux-rhel-centos-fedora security firewall firewalld rhel rocky-linux

Firewalld: Enterprise Firewall Management (Artikel 091)

Konfiguration der zustandsbehafteten Firewall unter RHEL. Erfahren Sie alles über Zonen, Services und das Management von dynamischen Regelwerken via firewalld.

# firewalld: Dynamisches Firewall-Management on RHEL

TL;DR / Management Summary Während Ubuntu auf UFW setzt, nutzt die Red Hat Welt (RHEL/Rocky) firewalld. Es ist eine zustandsbehaftete (stateful) Firewall, die auf dem Zonen-Konzept basiert. Anstatt nur IP-Regeln zu schreiben, ordnen wir Interfaces einer Vertrauensstufe zu (z.B. public, internal, trusted). Das Highlight: Änderungen können ohne Verbindungsabbruch (Reload statt Restart) vorgenommen werden.


# 1. Einführung & Architektur

Das Zonen-Modell.

Firewalld abstrahiert nftables (oder legacy iptables). Jedes Paket, das den Server erreicht, wird einer Zone zugeordnet – basierend auf der Quell-IP oder dem Interface.

# Die Zonen-Logik (Mermaid)

graph TD
    A[Incoming Traffic] --> B{Source-IP defined?}
    B -->|Yes| C[Apply Source Zone Rules]
    B -->|No| D[Apply Interface Zone Rules]
    C --> E{Rule Match?}
    D --> E
    E -->|Allow| F[Forward to App]
    E -->|Deny| G[Drop / Reject]
  • public: Standard für Internet-Interfaces (Alles zu, außer SSH).
  • internal: Für lokale Netze (Mehr Dienste offen).
  • trusted: Alles erlaubt.

# 2. Grundlegende Befehle

Den Status beherrschen.

# Status und Zone prüfen

# Läuft die Firewall?
sudo firewall-cmd --state

# Welche Zone ist aktiv?
sudo firewall-cmd --get-active-zones

# Dienste freischalten

# Temporär (nur bis zum Reboot/Reload)
sudo firewall-cmd --add-service=http

# Permanent (Enterprise Standard)
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload

# 3. Fortgeschrittene Regeln

Ports, IPs und Rich Rules.

# Ports manuell öffnen

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

# IP-basierte Freischaltung (Source Management)

Erlauben Sie dem Management-Server vollen Zugriff:

sudo firewall-cmd --permanent --zone=trusted --add-source=192.168.1.50
sudo firewall-cmd --reload

# Rich Rules (Komplexe Logik)

Wenn Sie feingranulare Regeln brauchen (z.B. “Nur IP X darf auf Port Y”):

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.5" port protocol="tcp" port="5432" accept'

# 4. Day-2 Operations: Runtime vs. Permanent

Der Reload-Trick.

Ein häufiger Fehler ist das Vergessen von --permanent.

  • Runtime: Gilt sofort, ist nach Neustart weg. Ideal zum Testen.
  • Permanent: Wird erst nach --reload aktiv.

Pro-Tipp: Von Runtime zu Permanent Wenn Sie eine Regel live getestet haben und sie funktioniert:

sudo firewall-cmd --runtime-to-permanent

# 5. Troubleshooting & “War Stories”

Wenn der Dienst erreichbar sein sollte, es aber nicht ist.

# Story 1: “Der hängende Reload”

Symptom: Der Admin fügt eine Regel hinzu und macht einen systemctl restart firewalld. Alle bestehenden SSH-Sitzungen und DB-Verbindungen brechen ab. Ursache: Ein Neustart des Dämons flusht alle Kernel-Tabellen. Lösung: Nutzen Sie immer firewall-cmd --reload. Dies behält die State-Table bei und bestehende Verbindungen bleiben offen.

# Story 2: “Das falsche Interface in der Zone”

Symptom: Ein Dienst ist nicht erreichbar, obwohl er in der Zone public erlaubt wurde. Ursache: Das Interface (z.B. eth1) ist gar keiner Zone zugeordnet und nutzt die Default Zone. Lösung: Interface explizit zuordnen: sudo firewall-cmd --permanent --zone=public --add-interface=eth1.


# 6. Fazit & Empfehlung

  • Zonen: Nutzen Sie Zonen konsequent zur Trennung von Management-, Backup- und Applikations-Traffic.
  • Dienste: Bevorzugen Sie --add-service gegenüber --add-port, da dies lesbarer ist.
  • Panic Mode: Im Falle eines Angriffs: sudo firewall-cmd --panic-on (schaltet jeglichen Traffic sofort ab).

# Anhang: Cheatsheet

Aufgabe Befehl
Liste aller Regeln firewall-cmd --list-all
Verfügbare Services firewall-cmd --get-services
Default Zone ändern firewall-cmd --set-default-zone=internal
Port entfernen firewall-cmd --permanent --remove-port=80/tcp
IP bannen (Reject) firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="1.2.3.4" reject'