# Stateful Inspection: Wie OPNsense sich an Pakete erinnert
TL;DR / Management Summary OPNsense ist eine Stateful Firewall. Das bedeutet, sie prüft nicht jedes einzelne Paket isoliert, sondern erkennt, ob ein Paket zu einer bereits erlaubten Verbindung gehört. Wenn ein User eine Webseite anfragt, erstellt OPNsense einen State (Zustand). Alle Antwort-Pakete vom Server werden dann automatisch durchgelassen, ohne dass eine explizite Inbound-Regel am WAN nötig ist. Ein Senior Admin beherrscht die State Table, um hängende Verbindungen zu kappen und DDoS-Angriffe auf den RAM zu verhindern.
# 1. Einführung & Konzepte
Stateless vs. Stateful.
# Stateless (Alt)
Jedes Paket wird gegen alle Regeln geprüft. Wenn der User raussendet (SYN), muss eine Regel für die Antwort (SYN-ACK) existieren. Sehr komplex und unsicher.
# Stateful (Modern)
Nur das erste Paket (z.B. TCP SYN) wird gegen das Regelwerk geprüft.
- Wirkung: Ist der Zugriff erlaubt, wird ein Eintrag in der State-Tabelle erstellt.
- Folge: Alle weiteren Pakete dieser Session (in beide Richtungen) fließen mit maximaler Hardware-Geschwindigkeit am Regelwerk vorbei.
# 2. Die State-Tabelle in der Praxis
In das Gedächtnis schauen.
# Status-Abfrage via GUI
Firewall -> Diagnostics -> States.
Hier sehen Sie:
- Protocol: TCP, UDP, ICMP.
- Source / Destination: Wer spricht mit wem.
- State: z.B.
ESTABLISHED:ESTABLISHED(TCP Handshake fertig). - Packets / Bytes: Traffic-Menge dieser Session.
# States löschen (Der ‘Reset’ Knopf)
Wenn Sie eine Regel ändern (z.B. SSH blockieren), können bestehende Sessions noch Stunden weiterlaufen.
- Aktion: Filtern Sie in der State-Ansicht nach der IP und klicken Sie auf das “Mülleimer”-Icon, um die Verbindung sofort zu trennen.
# 3. Deep Dive: State-Limits & Timeouts
Ressourcen schützen.
Jeder State belegt ca. 1 KB RAM. Bei einem DDoS-Angriff mit Millionen von SYN-Paketen kann der RAM des Gateways vollaufen.
# Globale Limits anpassen
Firewall -> Settings -> Advanced.
- Maximum States: Standard ist meist 10% des RAMs. Erhöhen Sie dies bei High-Traffic Gateways.
- TCP Timeouts: Verkürzen Sie Timeouts für
FIN_WAIToderCLOSE_WAIT, um verwaiste Sessions schneller zu bereinigen.
# 4. Day-2 Operations: State-Logging
Wer hat die Session gestartet?
Aktivieren Sie das Logging nur für die Pakete, die den State erstellen (First Match). Dies reduziert die Log-Größe massiv, da nicht jedes Folgepaket protokolliert wird.
# 5. Troubleshooting & “War Stories”
Wenn die Firewall vergisst.
# Top 3 Fehlerbilder
-
Symptom: Verbindungen brechen nach exakt 24 Stunden ab.
- Ursache: Zu strikte TCP-Timeouts oder ISP-Zwangstrennung ohne State-Purge.
- Lösung:
Keep-alivein der Applikation aktivieren oder Timeout-Werte in OPNsense moderat erhöhen.
-
Symptom: “State Table Full” Fehlermeldung in den System-Logs.
- Lösung: Sofortiges Erhöhen des Limits (siehe Punkt 3) und Prüfung auf Port-Scanning Attacken aus dem LAN.
-
Symptom: Asymmetrisches Routing.
- Folge: Pakete gehen über FW-A raus, aber über FW-B zurück. Da FW-B den State nicht kennt, werden die Pakete gedroppt.
- Lösung: Regel auf
Statelessstellen (Haken bei “Sloppy State”) – Vorsicht: Sicherheitsrisiko!
# “War Story”: Der “Zombie” SQL-Connect
Ein Unternehmen meldete, dass ihr ERP-System am Montagmorgen nicht funktionierte. Die Entdeckung: Die Applikation hielt hunderte TCP-Verbindungen über das Wochenende offen. Die Firewall hatte diese inaktiven States nach 24 Stunden gelöscht (Timeout). Die App dachte aber, die Leitung stünde noch und schickte Daten ins Leere. Lösung: Wir erstellten eine spezifische Firewall-Regel für den SQL-Port mit einem Custom State Timeout von 72 Stunden. Lehre: Nicht jede Applikation kann mit einem “Stateful” Reset umgehen. Wissen Sie, welche Timeouts Ihre Apps brauchen.
# 6. Monitoring & Alerting
Die Tabellengröße im Blick.
# Dashboard Widget
Fügen Sie das Widget “State Table” zu Ihrem Dashboard hinzu.
- Alert: Wenn die Ausnutzung > 80% steigt, sollte ein Monitoring-Event (Zabbix/Prometheus) ausgelöst werden.
# 7. Fazit & Empfehlung
Stateful Inspection ist die Basis für Effizienz und Sicherheit.
- Empfehlung: Belassen Sie die Einstellungen auf “Keep State” (Standard).
- Sicherheit: Nutzen Sie für UDP-Dienste (wie DNS) sehr kurze Timeouts, um “UDP Flood” Attacken den RAM-Platz zu entziehen.
# Anhang: Cheatsheet
| Begriff | Bedeutung |
|---|---|
ESTABLISHED |
Verbindung ist aktiv und bidirektional. |
SYN_SENT |
Client wartet auf Antwort vom Server. |
TIME_WAIT |
Verbindung wurde geschlossen, wird noch kurz gehalten. |
Sloppy State |
Ignoriert TCP-Sequenznummern (für asymmetrisches Routing). |