linux-security security firewall logging monitoring nftables ulogd

Firewall Monitoring: Logs & Analysis (Artikel 311)

Beherrschung der Firewall-Protokollierung unter Linux. Erfahren Sie alles über das Loggen von Paket-Events, die Nutzung von ulogd2 und die Visualisierung von Firewall-Statistiken.

# Firewall Monitoring: Den Datenverkehr sichtbar machen

TL;DR / Management Summary Eine Firewall, die nur blockiert, ohne zu protokollieren, ist ein Blindflug. Wir müssen wissen, wer wann versucht hat, auf welche Ports zuzugreifen. In diesem Modul lernen wir, wie wir Log-Regeln in nftables und iptables einbauen, wie wir das System-Journal durch hunderte Log-Meldungen pro Sekunde entlasten (ulogd2) und wie wir Firewall-Statistiken in Dashboards (Grafana) überführen.


# 1. Einführung & Architektur

Der Weg vom Paket zum Log-Eintrag.

Normalerweise schreibt der Kernel Firewall-Events direkt in das Kernel-Log (dmesg). Bei hohem Aufkommen kann dies das System verlangsamen.

# Die Logging-Pipeline (Mermaid)

graph LR
    A[Firewall Rule: log] --> B{Strategy}
    B -->|Standard| C[Kernel Log: syslog / journald]
    B -->|Performance| D[Netlink Group: ulogd2]
    C --> E[Admin: journalctl -k]
    D --> F[Database: MySQL / Postgres]
    D --> G[Metrics: Prometheus Exporter]
    F/G --> H[Dashboard: Grafana]

# 2. Logging in Aktion

Regeln schärfen.

# In firewalld (Einfach)

# Logge alle abgelehnten Pakete
sudo firewall-cmd --set-log-denied=all

# In nftables (Präzise)

# Innerhalb einer Chain
tcp dport 22 log prefix "SSH_ATTEMPT: " limit rate 5/minute accept

Wichtig: Nutzen Sie immer ein Rate-Limit beim Loggen, um DoS-Angriffe auf Ihren eigenen Logging-Dämon zu verhindern.


# 3. Performance-Logging mit ulogd2

Den User-Space nutzen.

In Enterprise-Umgebungen mit viel Traffic nutzen wir ulogd2. Es entlastet den Kernel, indem es Pakete über Netlink-Multicast-Gruppen an einen User-Space-Dämon sendet.

# Einrichtung

sudo apt install ulogd2 # Debian/Ubuntu
# Konfiguration in /etc/ulogd.conf
# Hier können Sie CSV, SQL oder JSON als Output wählen.

# 4. Day-2 Operations: Visualisierung

Zahlen statt Text.

Statistiken sind oft wertvoller als einzelne Logzeilen.

# Paket-Zähler in nftables

Jede nftables-Regel zählt automatisch mit.

# Zeige Zähler für alle Regeln
sudo nft list ruleset

# Prometheus Integration

Nutzen Sie den nftables-exporter, um Daten wie “Anzahl DROPs pro Interface” in Grafana zu visualisieren. So erkennen Sie Port-Scans oder DDoS-Attacken sofort an einem steilen Kurvenverlauf.


# 5. Troubleshooting & “War Stories”

Wenn das Loggen den Server killt.

# Story 1: “Der hängende Syslog”

Symptom: Der Server reagiert extrem träge, kswapd und syslogd verbrauchen 100% CPU. Ursache: Ein Angreifer flutet einen geschlossenen Port mit Millionen Paketen. Die Firewall loggt jedes einzelne Paket in das System-Journal. Der Schreibvorgang blockiert den Kernel. Lösung: Nutzen Sie Rate-Limiting direkt in der Log-Regel oder nutzen Sie ulogd2 mit einem Puffer.

# Story 2: “Das verschwundene Prefix”

Symptom: In ELK kommen Logs an, aber die Filter funktionieren nicht, weil das Feld prefix leer ist. Ursache: In nftables muss das Prefix in Anführungszeichen stehen und darf eine bestimmte Länge (meist 64 Zeichen) nicht überschreiten. Lösung: Halten Sie Prefixes kurz und bündig (z.B. FW_DENY_HTTP).


# 6. Fazit & Empfehlung

  • Rate-Limit: Loggen Sie niemals ohne limit rate.
  • Zentralisierung: Senden Sie Firewall-Logs immer an ein SIEM (Artikel 148).
  • Performance: Nutzen Sie ulogd2, wenn Ihr Server mehr als 1000 Pakete pro Sekunde loggen muss.

# Anhang: Cheatsheet

Aufgabe Befehl / Syntax
Kernel Logs live journalctl -kf
Suche nach Firewall-Log grep "IN=" /var/log/messages
nftables Zähler nullen nft reset ruleset
ulogd Status systemctl status ulogd2
Log-Level Typen emerg, alert, crit, err, warn, notice, info, debug
Nftables Log-Syntax log prefix "msg" group 1 (für ulogd)