linux-rhel-centos-fedora security firewall rich-rules rhel hardening

firewalld Rich Rules: Advanced Logic (Artikel 094)

Beherrschung der Rich-Rule-Syntax für komplexe Firewall-Anforderungen. Erfahren Sie, wie Sie Log-Quoten setzen, Rate-Limiting implementieren und feingranulare Filterregeln erstellen.

# firewalld Rich Rules: Präzise Kontrolle für Profis

TL;DR / Management Summary Während einfache Zonen-Regeln für das Grobe reichen, sind Rich Rules das Präzisionswerkzeug von firewalld. Sie erlauben es, Bedingungen (IP, Port, Protokoll) mit Aktionen (Accept, Reject, Log) zu kombinieren und dabei sogar Rate-Limiting anzuwenden. Wer Rich Rules versteht, kann komplexe Sicherheitsvorgaben umsetzen, ohne in die kryptische Welt der rohen Nftables abtauchen zu müssen.


# 1. Einführung & Architektur

Warum ‘Rich’?

Rich Rules erweitern das Zonen-Modell um eine logische Verknüpfung. Anstatt zu sagen “Port 80 ist offen”, sagen wir: “Port 80 ist nur offen, wenn die Anfrage von IP X kommt, und logge jeden Zugriff maximal einmal pro Minute.”

# Die Anatomie einer Rich Rule (Mermaid)

graph LR
    A[Rich Rule] --> B[Rule Family: ipv4/ipv6]
    A --> C[Source: IP/Subnet]
    A --> D[Element: Service/Port/ICMP]
    A --> E[Logging: Prefix & Limit]
    A --> F[Action: Accept/Reject/Drop]

# 2. Praxisbeispiele: Komplexe Filterung

Feingranulare Regeln.

# Zugriff auf Datenbank nur für App-Server

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

# SSH-Zugriff loggen (mit Prefix)

sudo firewall-cmd --permanent --add-rich-rule='rule service name="ssh" log prefix="SSH_ACCESS: " level="info" limit value="1/m" accept'

# 3. Rate-Limiting: Schutz vor DoS

Den Traffic drosseln.

Sie können verhindern, dass ein Port mit Anfragen geflutet wird.

# ICMP (Ping) Limitierung

sudo firewall-cmd --permanent --add-rich-rule='rule protocol value="icmp" limit value="1/s" accept'

Hier wird maximal ein Ping pro Sekunde erlaubt.


# 4. Day-2 Operations: Management & Audit

Regeln pflegen.

Rich Rules können unübersichtlich werden. Nutzen Sie list-rich-rules, um nur diese Regeln zu sehen.

# Bestehende Regeln auflisten

sudo firewall-cmd --zone=public --list-rich-rules

# Eine Regel entfernen

Sie müssen den exakten String der Regel angeben:

sudo firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="1.2.3.4" reject'
sudo firewall-cmd --reload

# 5. Troubleshooting & “War Stories”

Wenn die Logik hinkt.

# Story 1: “Die Log-Flut”

Symptom: Das System-Log (/var/log/messages) wächst um GB pro Stunde, der Server wird langsam. Ursache: Eine Rich-Rule loggt jeden eingehenden Paket-Header ohne Limitierung (limit value). Lösung: Nutzen Sie immer ein limit, z.B. limit value="2/m" (2 Meldungen pro Minute).

# Story 2: “Reject vs. Drop Verwirrung”

Symptom: Ein Scanner erkennt sofort, dass ein Port geschlossen ist, anstatt in einen Timeout zu laufen. Ursache: In der Rich-Rule wurde action="reject" genutzt. Dies sendet ein “Destination Unreachable” Paket zurück. Lösung: Wenn Sie den Server “unsichtbar” machen wollen, nutzen Sie action="drop". Das Paket wird einfach ignoriert.


# 6. Fazit & Empfehlung

  • Präzision: Nutzen Sie Rich Rules für alles, was über einfache Port-Freigaben hinausgeht.
  • Lesbarkeit: Halten Sie die Regeln so kurz wie möglich.
  • Alternativen: Wenn Sie hunderte IPs blocken müssen (Blacklisting), nutzen Sie lieber IP-Sets (siehe nächstes Modul) statt hunderter Rich Rules.

# Anhang: Cheatsheet

Aufgabe Syntax Element
IP-Bereich source address="192.168.1.0/24"
Port-Bereich port port="1000-2000" protocol="udp"
Log-Level `level="emerg
Limit limit value="1/h" (Sekunde, Minute, Stunde, Tag)
Invertieren source NOT address="1.1.1.1"
Permanente Aktivierung Immer --permanent und danach --reload