Freorit

Open Source & Security Practitioner
Firewall-Sicherheit OpenBSD Stateful Filtering Monitoring ca. 18 Min. Lesedauer Mittlere Schwierigkeit Stand: 2025

OpenBSD PF Firewall: Stateful Security ohne Komplexität

OpenBSD PF (Packet Filter) ist eine moderne Firewall für Admins, die verstehen möchten, was ihr System tut. Dieser Guide erklärt Stateful Filtering, Threat Detection und zentrale Observability — ohne Komplexität.

Warum OpenBSD?

Wenn du Linux-Admin bist, kennst du iptables, firewalld, nftables. Sie funktionieren, aber OpenBSD PF (Packet Filter) bietet einen anderen Ansatz:

Für Wen?

Du möchtest eine Firewall, die einfach verständlich ist, wenig Wartung braucht, und bei der Security nicht optional ist. Nicht: „Lass mich iptables rules stacken bis zum Himmel."

PF Firewall Grundlagen

Was ist PF?

PF ist ein Kernel-basiertes Firewall-System. Im Gegensatz zu Linux iptables, die über netfilter laufen, ist PF direkt im OpenBSD-Kernel implementiert und optimiert.

Kernfunktionen:

PF vs. Linux iptables/nftables

Aspekt PF (OpenBSD) Linux iptables
Ort im Stack Kernel-integriert Kernel-Subsystem (netfilter)
Syntax Deklarativ, top-to-bottom Imperativ, Regel-für-Regel
Default Policy Explicit Deny Je nach Konfiguration
State Table Zentral, automatisch optimiert Durch Conntrack-Modul
Reload Atomic (Regel + State Table) Braucht teilweise Flush/Reload

Architektur: Stateful Filtering

Wie Stateful Filtering funktioniert

Im Gegensatz zu Stateless-Firewalls, die jedes Paket einzeln prüfen, merkt sich eine Stateful Firewall den Kontext:

Stateful Filtering: Verbindungsfluss Client Outbound Request PF State Table Entry erstellt Status: established Server Inbound Response State Lookup Rückverkehr Automatisch erlaubt (keine explizite Regel nötig) Vereinfachte Regelwerke Nur Outbound erlauben & PF kümmert sich um Return Skalierbar, wartbar, weniger Fehler

Praktischer Vorteil: Du schreibst nur „erlauben, dass interne Hosts außen erreichen" — Rückverkehr ist automatisch klar.

Beispiel-Regelwerk (konzeptionell)


# Default: Alles blocken
set block-policy drop

# Interne Schnittstelle definieren
int_if = "re0"
ext_if = "pppoe0"

# Erlauben: Loopback, internal traffic
pass on lo0
pass on $int_if proto tcp from any to any port 22

# Erlauben: Outbound, automatisch Inbound
pass out on $ext_if proto tcp from any to any

# Rate Limiting: Zu viele Verbindungen von einer Source
pass in on $ext_if proto tcp to any port 22 \
(max-src-conn 10, max-src-conn-rate 5/60)

# Source Tracking: IPs blocken, die Portscans starten
pass in on $ext_if proto tcp flags SYN/SYN,ACK
table <bruteforce> persist
block in quick from <bruteforce>
    

Anmerkung: Echte Produktionsregeln sind länger und granularer.

Threat Detection & Monitoring

OpenBSD Firewall allein reicht nicht

PF filtert Layer 3/4 (IP/TCP/UDP). Aber:

Lösung: Zusätzlich Threat Detection (IDS) + Centralized Logging.

Die drei Schichten

Layer Tool Erkennt
3/4 (IP/TCP) OpenBSD PF Portscans, SYN Floods, Rate Anomalies
7 (Anwendung) IDS (Suricata/Snort) HTTP Payloads, SQL Injection, Exploits
Everywhere Centralized Logging (Syslog) Korrelation, Zeitreihen, Anomalien

Monitoring Setup (vereinfacht)

OpenBSD Router PF Logs Firewall Events SNMP Metrics State Table, Traffic IDS Alerts Threat Detection Zentraler Observability Stack Syslog Receiver Logs → Loki Prometheus Metrics Storage Alert Manager IDS + PF Alerts Grafana Dashboards Visualization & Real-time Alerts Daily Operations | Anomaly Detection | Incident Response

Was man beobachtet:

Überprüfung: Logs kommen zentral an, kein Manuelles SSH auf Router nötig. Everything is queryable.

Praktische Übersicht

Hardware

Kompakte Hardware (z.B. Mini-PCs, alte Workstations) funktionieren perfekt. Du brauchst keinen Enterprise-Appliance.

Routing- und Filtering-Flow

Internet WAN Interface (em0) PPPoE/Physical Link OpenBSD Kernel: PF Firewall State Inspection NAT Translation Rate Limiting / Blocking / Stateful Filtering LAN Interface (re0) Internal Network (10.0.0.0/24) Internal Network & Hosts

Typische Probleme

Best Practices

1. Least Privilege

2. Monitoring im Design

3. Testing vor Deployment

4. Dokumentation

5. Inkrementelle Komplexität

Nicht alles auf einmal. Jede Phase soll stabil laufen, bevor nächste kommt.

Zusammenfassung