Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124

OPNsense ist eine FreeBSD-basierte, modular erweiterbare Firewall-Distribution mit einem starken Fokus auf Sicherheit, Stabilität und DevOps-freundlicher Automatisierung. In diesem Tutorial bauen wir eine produktionsreife Edge-Firewall inklusive VLAN-Segmentierung, DNS-Stack (Unbound) mit DoT, konsistentem Firewall-Regelwerk, WireGuard-Remote-Access, Intrusion Prevention (Suricata), Hochverfügbarkeit via CARP/pfsync sowie API-gestützter Automatisierung. Ziel ist ein reproduzierbares Setup mit klaren Prinzipien und nachvollziehbaren Schritten – für Teams, die Infrastruktur wie Software behandeln.
Die Anleitung richtet sich an fortgeschrittene Administratoren, SREs und DevOps-Teams, die eine robuste Netzwerk-Sicherheitsarchitektur aufbauen oder modernisieren möchten. Wir setzen belastbare Best Practices ein und zeigen neben GUI-Schritten auch CLI/API-Optionen für GitOps-Workflows. Wo sinnvoll verlinken wir auf Primärquellen und Herstellerdokumentation zur Vertiefung.
Trust-Links und weiterführende Ressourcen: OPNsense Dokumentation, FreeBSD, pf.conf Referenz, WireGuard, Suricata IDS/IPS, HAProxy, Let's Encrypt.
Wir entwerfen eine Edge-Firewall mit folgenden Bausteinen: ein WAN-Uplink (Public), ein LAN-Mgmt-VLAN, dedizierte VLANs für Infrastruktur (INFRA), Entwickler (DEV), Produktion (PROD), Gast (GUEST) und VPN (WG). Unbound dient als lokaler rekursiver Resolver mit DNSSEC und optionalem DNS-over-TLS zu vertrauenswürdigen Upstream-Resolvern. Ausgehender Traffic wird über NAT gesteuert; Ost-West-Kommunikation ist strikt segmentiert. Remote-Zugriff realisieren wir mit WireGuard inkl. Geräteprofilen. Für Sichtbarkeit aktivieren wir NetFlow/Insight und leiten Logs an ein zentrales System. HA wird mit zwei OPNsense-Knoten per CARP-VIPs, pfsync und XML-RPC-Synchronisation umgesetzt.
High-Level-Ziele:
Hardware/Hypervisor:
Kenntnisse:
Sonstiges:
Installieren Sie OPNsense auf der Hardware oder im Hypervisor. Für virtuelle Deployments deaktivieren Sie in OPNsense später Hardware-Offloading-Features, um mit netmap/IPS stabil zu bleiben (siehe Performance-Tuning).
Erstkonfiguration nach der Installation:
WebGUI-Wizard: System > Wizard führt Sie durch WAN/LAN, Hostname, DNS und NTP. Nutzen Sie direkt sinnvolle Hostnamen (z. B. opn1, opn2 für HA) und setzen Sie die Zeitzone korrekt. Verifizieren Sie Internet-Konnektivität (Lobby > Dashboard > Interfaces) und aktualisieren Sie Firmware (System > Firmware > Updates).
Beispiel-Planung:
GUI-Schritte:
DHCP-Server pro VLAN:
CLI-Checks:
ifconfig
netstat -rn
Die VLAN-Interfaces sollten als vlanX sichtbar sein. Prüfen Sie die Routen und erreichen Sie aus einem Client per Ping die VLAN-Gateway-IP.
Unbound als lokaler Resolver sichert interne Namensauflösung, Zwischenspeicherung und optionale Filter. Für Datenschutz lässt sich Upstream per DNS-over-TLS konfigurieren.
GUI-Schritte:
server: tls-cert-bundle: /etc/ssl/cert.pem.Validierung:
drill example.com @10.10.10.1
unbound-control -c /var/unbound/unbound.conf status
Reload via CLI/API:
configctl unbound restart
# oder API (siehe weiter unten): /api/unbound/service/restart
Standardmäßig ist „automatic outbound NAT“ aktiv. Für feinere Kontrolle empfiehlt sich „Hybrid Outbound NAT“.
GUI-Schritte:
CLI-Validierung:
pfctl -sr # Regeln
pfctl -ss # States
sockstat -l | grep pf
Best Practice: Minimalistische NAT-Regeln, Logging bei kritischen NATs aktivieren (zurückhaltend, um nicht zu fluten), Reflection sparsam einsetzen.
Statt IP-Adresslisten in Regeln direkt zu pflegen, arbeiten Sie mit Aliases (Gruppierungen). Nutzen Sie FQDN-Aliases für dynamische Ziele, Netzwerk-Aliases für VLANs und Port-Aliases für Applikationen.
Alias-Setup:
Regelprinzipien:
GUI-Beispielregel: Firewall > Rules > DEV – Action Pass, Proto TCP, Source DEV net, Dest any, Ports 80,443, Description „DEV outbound web“, Log enabled.
pf-Einblick (read-only):
pfctl -vvsr | less
Hinweis: Bearbeiten Sie pf nicht manuell; OPNsense generiert pf aus der GUI/Config. Die CLI dient zur Analyse und Validierung im Betrieb.
WireGuard bietet performantes, modernes VPN. Wir setzen Road-Warrior-Zugänge für Mitarbeitende auf, die selektiven Zugriff auf DEV/INFRA benötigen.
Plugin installieren:
Server konfigurieren:
Firewall-Regeln:
NAT für WG-Clients ins Internet (falls gewünscht):
Client-Konfiguration (Beispiel):
[Interface]
PrivateKey = <client_private_key>
Address = 10.60.0.2/32
DNS = 10.10.10.1
[Peer]
PublicKey = <server_public_key>
AllowedIPs = 10.20.0.0/24, 10.30.0.0/24
Endpoint = vpn.example.com:51820
PersistentKeepalive = 25
OPNsense generiert auf Wunsch QR-Codes für Mobile Clients. Test: ping 10.20.0.1 von Client, dann Zugriff auf DEV/INFRA mit traceroute und tcpdump auf WG-Interface validieren.
Zur Netzwerksichtbarkeit und Prävention nutzen wir Suricata als IDS/IPS im netmap-Modus. Achten Sie auf NIC-Kompatibilität und Performance-Tuning.
Plugin und Grundkonfiguration:
Tuning und Offloading:
Validierung:
suricata -V
service suricata status
/usr/local/bin/configctl ids status
Monitoring: Services > Intrusion Detection > Alerts – Regeln iterativ von Alert -> Drop schalten, basierend auf Telemetrie und Risiko.
Für HA betreiben wir zwei identische OPNsense-Knoten (opn1/opn2). Wir nutzen CARP für virtuelle IPs (VIPs), pfsync für State-Synchronisation und XML-RPC für Konfig-Sync.
Netzwerk-Plan:
GUI-Schritte Knoten 1:
Knoten 2 entsprechend, aber CARP Advskew höher (z. B. 100), gleicher VHID und Secret. Prüfen Sie CARP-Status unter Interfaces > Virtual IPs > Status. Failover testen (Interface down auf opn1) und Erreichbarkeit der VIPs validieren.
Beachten Sie ARP-Cache im Upstream (WAN): ggf. GRATUITOUS ARP und niedrige ARP-Caches beim Provider/Router sicherstellen. Für WAN-Redundanz auf Ebene Carrier ist zusätzlich VRRP/BGP oder Provider-spezifische HA nötig.
Für interne Services hinter OPNsense empfiehlt sich eine TLS-Terminierung am Edge via HAProxy-Plugin mit automatischen Zertifikaten (ACME).
Plugins:
ACME konfigurieren:
HAProxy konfigurieren:
Firewall-Ports: WAN 80/443 zum HAProxy-Frontend erlauben, ggf. Port-Forwards entfernen, um doppelte Weiterleitungen zu vermeiden. Logging zur Fehleranalyse aktivieren.
Transparenz ist entscheidend. OPNsense bietet Insight (NetFlow/IPFIX) und flexible Syslog-Ziele.
Konfiguration:
CLI-Diagnose:
tcpdump -ni <if> port 2055 # NetFlow
clog /var/log/filter.log | tail -n 100
Best Practice: Logging gezielt aktivieren (kritische Regeln), Rotation prüfen, zentrale Dashboards etablieren.
OPNsense stellt eine REST-API bereit, die Sie mit API-Key/Secret nutzen. Ideal für GitOps-Pipelines und Infrastructure-as-Code.
API-Key anlegen: System > Access > Users – Benutzer auswählen/erstellen, API-Key generieren. Authentifizierung via Basic Auth (key:secret).
Beispiel: Unbound neu starten
curl -sk -u 'APIKEY:APISECRET' https://opn.local/api/unbound/service/restart
Alias per API erstellen:
curl -sk -u 'APIKEY:APISECRET' \
-H 'Content-Type: application/json' \
-X POST \
-d '{
"name": "DEVOPS_NET",
"type": "network",
"content": ["10.30.0.0/24","10.20.0.0/24"],
"enabled": "1",
"description": "DEV & INFRA networks"
}' \
https://opn.local/api/firewall/alias/addItem
Firewall-Regel anlegen (Beispiel, Ziel-API kann je Version variieren – prüfen Sie die API-Schnittstelle in der GUI Dev Tools):
curl -sk -u 'APIKEY:APISECRET' \
-H 'Content-Type: application/json' \
-X POST \
-d '{
"rule": {
"action": "pass",
"interface": "lan",
"direction": "in",
"protocol": "tcp",
"source_net": "DEVOPS_NET",
"destination": "any",
"dst_port": "80,443",
"log": "1",
"description": "DEV outbound web"
}
}' \
https://opn.local/api/firewall/rule/addRule
Konfiguration anwenden:
curl -sk -u 'APIKEY:APISECRET' https://opn.local/api/firewall/filter/reload
Backup/Restore per API:
# Backup ziehen
curl -sk -u 'APIKEY:APISECRET' https://opn.local/api/core/backup/download > opnsense-config.xml
# Backup einspielen (prüfen Sie Endpunkt/Version)
curl -sk -u 'APIKEY:APISECRET' -F '[email protected]' https://opn.local/api/core/backup/restore
CLI-Automation: configctl ist die zentrale Kommandoschnittstelle. Beispiele: configctl filter reload, configctl unbound reload, configctl wireguard start.
Produktions-Firewalls benötigen sichere Upgrades:
CLI-Werkzeuge:
# Paket-Liste aktualisieren und System aktualisieren
opnsense-update && opnsense-update -bkgr
# Boot Environment (wenn ZFS):
bectl list
bectl create pre-24.7-upgrade
# Paket-Rollback auf bestimmtes Paket
opnsense-revert <pkgname>
Best Practice: Blue/Green-Upgrade mit HA – Secondary zuerst aktualisieren und testen, kontrolliertes Failover, dann Primary.
Für hohe Durchsätze und stabile IPS:
Messung:
iperf3 -s # im LAN/DMZ
iperf3 -c 10.20.0.10 -P 4
systat -ifstat 1
Minimieren Sie Angriffsfläche und erzwingen Sie starke Authentifizierung:
Audit und Compliance:
Wenn etwas klemmt, gehen Sie hypothesengetrieben vor und sammeln Sie Belege:
netstat -rn, route get <dst>pfctl -vvsr, Rule-Counters prüfenpfctl -sstcpdump -ni <if> host <ip> and port <port>pfctl -sn und Outbound NAT-Regeln checkendrill Antworten, Unbound-LogsTypische Stolpersteine:
Viele Betriebsaufgaben lassen sich sowohl in der GUI als auch via CLI/API erledigen:
configctl filter reload zum Anwendenconfigctl unbound reloadconfigctl wireguardNutzen Sie die Browser-Entwicklertools (Netzwerk-Tab), um API-Aufrufe der GUI zu inspizieren. So lassen sich Payloads für Skripte generieren (Achtung auf Versionen und CSRF Tokens, bei API-Schlüssel entfällt CSRF).
Ein pragmatischer Ansatz für GitOps mit OPNsense:
configctl filter reload.Beispiel-Pipeline-Schritt (Shell):
#!/usr/bin/env bash
set -euo pipefail
FW=https://opn.local
AUTH='APIKEY:APISECRET'
# Alias synchronisieren
curl -sk -u "$AUTH" -H 'Content-Type: application/json' \
-X POST -d @aliases.json $FW/api/firewall/alias/setItem
# Regeln synchronisieren
curl -sk -u "$AUTH" -H 'Content-Type: application/json' \
-X POST -d @rules.json $FW/api/firewall/rule/import
# Filter neu laden
curl -sk -u "$AUTH" $FW/api/firewall/filter/reload
Vor produktivem Einsatz sollten Sie die tatsächlichen Endpunkte im System über die API-Hilfe oder Browser-Devtools verifizieren, da Pfade je OPNsense-Version variieren können.
Ergänzend zur VLAN-basierten Trennung lohnt es sich, Zero-Trust-Prinzipien einzuführen:
Für Multi-Site-Umgebungen:
Risk-Managed Changes:
Im Alltag bewährt:
# pf Regeln und States
pfctl -sr
pfctl -ss | wc -l
# Verbindungsdebug
tcpdump -ni igb1 host 10.30.0.25 and port 443
# DNS
unbound-control -c /var/unbound/unbound.conf stats_noreset
# System
vmstat -z | head
systat -ifstat 1
# HA/CARP
ifconfig | grep carp
clog /var/log/system.log | grep carp
Vertiefung und Primärquellen:
Mit den oben skizzierten Schritten haben Sie eine tragfähige, produktionsreife OPNsense-Umgebung aufgebaut: sauber segmentierte VLANs, kontrollierte Ost-West- und Nord-Süd-Flüsse, ein verhärteter DNS-Stack, Remote-Zugriff via WireGuard, Sichtbarkeit durch NetFlow und IDS/IPS sowie echte Hochverfügbarkeit per CARP/pfsync. Durch die Nutzung von Aliases, minimalinvasiven Regeln und API-gestützter Automatisierung schaffen Sie die Grundlage für skalierbare, auditierbare Policy-Verwaltung nach GitOps-Prinzipien.
Als nächste Schritte empfehlen sich: Feinkalibrierung der Suricata-Regeln (Alert -> Drop), Zero-Trust-Vervollständigung mit Just-in-Time-Zugriff und identitätsbasierter Autorisierung, Ausbau des Observability-Stacks (zentrales SIEM, Metriken per Telegraf/Prometheus), sowie wiederkehrende GameDays, um Failover, Backup-Restore und Incident-Playbooks unter Realbedingungen zu üben. Prüfen Sie regelmäßig Upstream-Änderungen und nutzen Sie Boot-Environments für risikominimierte Upgrades. Setzen Sie auf konsistente Naming- und Tagging-Standards – und dokumentieren Sie jede Policy-Änderung im Code.
Wenn Sie tiefer einsteigen möchten, beginnen Sie mit den offiziellen Ressourcen: OPNsense Docs für Systemspezifika, die pf.conf-Referenz für Firewall-Feinheiten und den Suricata-Guide für IDS/IPS-Tuning. So bleibt Ihre Edge nicht nur sicher, sondern auch evolvierbar.