OPNsense Firewall
- freie Firewall-Distribution unter FreeBSD-Lizenz, Fork von pfSense
- wird von der niederländischen „Deciso B.V.“ als Sponsor und Co-Entwickler unterstützt
- kostenfreie Community-Edition und Business-Edition mit Support
- lauffähig auf PC, VM oder Router-Hardware mit 2 oder mehr Netzwerkkarten
- WAN: PPoE oder DHCP / stat. IP (kein Modem bzw. Medienkonverter)
- Multi-WAN (Failover, LoadBalancing oder statische Verteilung)
- Anmeldung mit lokalen Usern (auch mit integriertem TOTP), LDAP/AD, RADIUS, Voucher
- DHCP pro Interface (Option: "unbekannte Clients ignorieren")
- Firewall pro Interface mit Live-Ansicht
- Redundanz (Master/Slave) möglich - NG-Firewall Erweiterung mit PlugIn ZenAmor (zumindest die kostenlose Version immer installieren!)
(Application Control, Webseiten nach Kategorien blocken, Cloud Reputation und Threat Intelligence, TLS-Inspection, detailliertes Reporting und Grafiken, AD-Anbindung, Secure-User-not-IP, optional zentrales Management) - IDS/IPS, Router, SNAT, DNAT, DHCP, VLAN, Proxy, Antivirus, Captive Portal (alle Anmeldearten), Geoblocking...
- VPN:
- Open VPN (Pre-shared keys, Certificate-Based Authentication, Username/Password Authentication, TOTP MFA)
- IPSec IKEv1 / IKEv2
- Wireguard Server / Client / Peer Assistent
- PlugIns: Tinc (redundantes, robustes Mesh-Netz), ZeroTier (über zentralen VPN-Anbieter als Mittler), Cisco OpenConnect - Zwei-Faktor-Authentisierung (TOTP) voll integriert (für Login, VPN, Captive Portal), Token wird vor / nach dem Kennwort eingegeben
- komfortable Zertifikatsverwaltung per GUI
Installation:
- OS: FreeBSD/amd64
- RAM: 8 GB Minimum, SSD: min. 128 GB, CPU/Durchsatz nach Anforderung
- BIOS-Mode
- Initial-PW: installer / opnsense (ruft Installation auf) und root / opnsense (Shell+GUI)
- Default IP: 192.168.1.1 auf Interface "LAN" (nur dieses Interface hat per Default eine ALLOW-Regel in der Firewall)
- Backup: System -> Configuration -> Backups (lokal im Gerät und als Download)
- Snapshots bsp. vor neuen Firmware-Versionen: System -> Configuration -> Snapshots (lokal im Gerät)
- Firewalls wurden früher nach der Bandbreite der Internetanschlüsse dimensioniert. Heute trennen sie VLAN-Sicherheitszonen und es läuft auch ein großer Teil des internen Datenverkehrs über die Firewall. Die Datenrate muß entsprechend größer sein.
Firewall:
- separate Firewall pro Interface (Paketfilter pf von FreeBSD)
(Ausnahme: Floating Regeln gelten für alle Interfaces) - Schnittstellen-Gruppen (Firewall -> Groups) erlauben Regeln für mehrere Schnittstellen
- Regeln immer im eingehenden Interface erstellen
- wird jeweils von oben nach unten abgearbeitet (speziell oder schnell abzuarbeitende - allgemein - drop)
Default=First-Match: Regelwerk wird bei erstem Treffer beendet - Firewall arbeitet verbindungsorientiert,- Antwortpakete sind automatisch erlaubt
- BLOCKIEREN = ohne Reaktion, für WAN
- ABLEHNEN/REJECT = informiert Sender, für friendly Interfaces
- Regeln möglichst simpel halten und im Kommentarfeld beschreiben
- Ports, Netzwerke und Geräte gruppieren (Aliase)
- zeitbasierte Regeln (Schedules) sind möglich (Freigabe WLAN, Freigabe E-Mail...)
- per Default hat Interface "LAN" eine "allowed all"-Regel, alle anderen Interfaces sind zu
- Best-Practice: Regeln clonen und auf andere Schnittstelle ändern+speichern
- Button "Inspect" (rechts oben in den Regeln) zeigt für jede Regel, wie oft sie aktiv war
- Anti-Spoofing blockt gefälschte IPs
- OPNsense blockt von Haus aus IP-Adressen an einen Interface, die einem anderen Interface zugeordnet sind
- eigene Anti-Spoofing-Regel (blockiert alle nicht definierten Netze): Regel LAN - IN - Blocke - Quelle= NICHT(!) "Meine-LAN-Netze"(Alias) - GeoIP blocking nach Herkunftsland mit kostenlosem Plugin (Registrierung) für jede einzelne Regel möglich (VPN, WEB, Mail..)
- letzte Regel in jedem Interface sollte Deny-All-Regel mit temp. Protokollierung zur Fehlersuche sein
- >1000 Regeln ist "groß" und beeinflusst den Durchsatz (Default: max. 200.000 Regeln)
- Protokollierung von Regeln nur temporär(!) an, dauerhaft nur sparsam einsetzen (Durchsatz und Schreibzugriffe)
- wenn PING erlaubt sein soll: Firewall -> Automatisierung -> Filter: Erlaube - IN - ICMP (pauschal oder pro Interface oder Ziel)
- Liveansicht zum Test nutzen (nur wenn Protokollierung AN)
- Regeln überprüfen: (Firewall -> Diagnose -> Sitzungen) Alter des letzen Zugriffs, Traffic?
- Tip: Zugriff auf LAN (any Destination) soll nicht gleichzeitig Zugriff auf alle anderen lokalen Netze erlauben
Alias: Lokale_Netzwerke anlegen (alle verwendeten lokalen Netzwerke)
Regel "Webzugang" Destination = (!)Lokale_Netzwerke (Invert) - Praktisches Beispiel
Internetzugang aus "LAN-Buero" (für Gruppe von IPs) erlauben
*Aliase (Firewall -> Aliase):
1) Internet-Ports definieren
- Name: _P_WEB_Zugang, Typ: Ports, Inhalt: 53, 853 (DNS), 80, 443 (HTTP/S)
(ggf. analog Regel für E-Mail, Filezugriff usw.)
2) Management-Ports definieren
- Name: _P_Management, Typ: Ports, Inhalt: 22 (SSH), 80, 123 (NTP), 443 (HTTP/S)
3) Internet-Hosts (im LAN-Buero) definieren
- Name: _H_BUERO_Internet, Typ: Hosts, Inhalt: 10.12.0.66, 10.12.0.67 (IP der Internet-Hosts)
4) alle genutzten lokalen Netze definieren
- Name: _N_Lokale_Netze, Typ= Network, Inhalt: 10.12.0.0/24, 10.12.5.0/24..
*Rules (Firewall -> Regeln -> LAN-Buero):
1) Management erlaubt
- Name: Management, Allow - IN - LAN-Buero - IPv4 - TCP/UDP / Source: VLANBuero.NET, Destination: This Firewall, Dest.Ports: _P_Management(Alias)
2) Internet erlaubt (nur WEB-Ziele, nicht(!) Nachbarnetzwerke)
- Name: Internetzugang, Allow - IN - LAN-Buero - IPv4 - TCP/UDP / Destination: NICHT(!) _N_Lokale_Netze (Alias), Dest.Ports: _P_WEB_Zugang(Alias)
3) Drop-All + Protokoll (ganz unten!)
- Name: Drop-All, Blocke - IN - LAN-Buero - IPv4 - any / Ziel: any, Protocol
IDS / IPS:
- OPNsense nutzt das quelloffene Suricata
- Speicherlast der OPNsense steigt deutlich! (8 GB knapp)
- IDS kann auch transparent per Bridge ohne Routing arbeiten
- Aktivierung unter Services -> IDS -> Administration -> enabled + Interfaces wählen
- Download: gewünschte Regeln laden und aktivieren (Link auf Sourcen erklärt Details)
alle Regeln sind vom Community Project und kostenlos/BSD-Lizenz - Regeln: Feinschliff, Regeln einzeln deaktivieren bei Fehlalarm (mehrere 1000!), Status= Alert
- Alerts: zeigt Alarme
- Scheduler aktualisiert das Regelwerk -> einschalten
- IPS erst einschalten, wenn die Alarme abgearbeitet sind (Konfig siehe OPNsense Praktiker Kapitel 18)
Schnittstellen / LAG:
- jeder Port bekommt per Default ein eigenes IP-Netzwerk
- mehrere Ports als "Swich" verbinden (schlechte Performance, kein VLAN möglich):
- vorher separates Management-Interface mit IP einrichten!
- "Switch"-Schnittstellen zuweisen und aktivieren (ohne IP)
- Schnittstellen -> Devices -> Bridge: neue Bridge mit allen gewünschten Interfaces erstellen (alle ohne IP)
- Schnittstellen zuweisen: bridge0 für "LAN" zuweisen
- Schnittstelle LAN: IP zuweisen
Besser einen VLAN-fähigen Switch verwenden. - mehrere Ports als LAGG bündeln:
- LAG Member Interfaces dürfen im Interface Assignment nicht zugeordent sein
- LAG Member Interfaces dürfen keine IP und/oder DHCP Bindung haben
- Schnittstelle -> Devices -> LAGG hinzufügen, Schnittstellen auswählen
- LAGG aktivieren, IP + DHCP konfigurieren
- ggf. VLANs wie auf normalem Interface zuweisen - LAN/VLAN auf verschiedene Ports verteilen (beste Performance)
Transparente Firewall
siehe (1) Kapitel 7
siehe (1) Kapitel 7
- Bridge über zwei Ports ohne IP und Routing-Funktion ("Switch mit Filterfunktion")
- Bridge als Schnittstelle (ohne IP) erstellen, Regeln greifen nun auf der Bridge und nicht auch den beteiligten Interfaces
- arbeitet wie eine "normale" bidirektionale Firewall, aber unsichtbar (IP v4-/v6-Adressen, Ports, Traffic Shaping Bandbreitenregulierung)
- Richtung mittels Quell-/Zieladressen definieren
- abgelehnte Pakete erscheinen als vom Ziel abgelehnt
- kein Proxy
- leitet Mulicast einfach durch
- kein PING oder Trace auf die Firewall möglich
Portforwarding (Destiantion NAT oder DNAT):
- Firewall -> Settings -> Advanced:
- Reflection for port forwards: Enabled
- Reflection for 1:1: Disabled
- Automatic outbound NAT for Reflection: Enabled - Firewall > Aliases > Add a new Alias:
- name: friendly name for the IP address you're aliasing. ("Minecraft-Server")
- type: Host(s)
- Aliases: Input 192.168.1.200 (interne Server-IP) - Firewall > NAT > Port Forward > Add:
- Interface: WAN
- TCP/IP Version: IPv4
- Protocol: TCP
Under Source > Advanced:
- Source / Invert: Unchecked
- Source: Any
- Source Port Range: any to any
- Destination / Invert: Unchecked
- Destination: WAN address
- Destination Port range: (other) 19132 to (other) 19132
- Redirect target IP: Alias "Minecraft-Server"
- Redirect target Port: (other) 19132
- Pool Options: Default
- NAT reflection: Enable
- Filter rule association: Rule NAT
VPN
- beherrscht standardmäßig IPsec, OpenVPN, Wireguard
- IPSec IKEv1 / IKEv2
- VPN-Verbindung OPNsense <-> Lancom Router
- LAN-to-LAN: OPNsense: IPSec VPN - OpenVPN mit OPNsense bietet Zertifikat/Key/User + OTP -Authentifizierung (MFA)
- WireGuard VPN mit OPNsense, Peer-Assistent mit Config-Export und QR-Code
(sehr schnell, robust und schlank) - andere Verfahren (Tinc, Cisco OpenConnect) über PlugIn
VLANs:
- Schnittstellen -> Devices -> VLAN
- VLANs werden pro Schnittstelle angelegt (mehrere VLANs pro Schnittstelle möglich, VLAN tagged)
Schnittstelle selbst kann auch eine IP haben und ist UNTAGGED (Bsp. Management) - VLAN-Bezeichner fängt immer mit vlan0 an (Tip: vlan0.20 für VLAN20)
- VLANs als Schnittstelle(n) zuweisen und IP für VLAN vergeben (Bsp: 10.10.10.1/24 -> 10.10.10.1 ist das Gateway), ggf. mit DHCP
- Firewallregel auf VLANxx anlegen: (Allow - VLANxx - In - whatever)
- VLANs werden automatisch ins WAN geroutet, nicht aber ins LAN
Firewallregel auf LAN anlegen: (Allow - LAN - In - Destination= VLANxx Netzwerk - Dest.Ports= whatever) - kein VLAN auf Bridges oder den beteiligten Interfaces möglich! (OPNsense ist kein Switch)
- siehe https://www.zenarmor.com/docs/
Reporting:
- Reporting -> Netflow: Listening Interfaces konfigurieren
- Capture local - anhaken (Auswertungen können auch an externe Destination gesendet werden)
- Reports werden in der Firewall angezeigt
- SNMP: System -> Firmware > Plugins: Net SNMP-Plugin installieren
dann Services -> NET-SNMP: aktivieren und konfigurieren
Tipps & Tricks:
- SSH (System-> Settings -> Administration) aktivieren!
- Ausgesperrt? Firewall per SSH od. Shell deaktivieren: pfctl -d (pfctl -e)
- System -> Configuration -> Backup: Backup-Count setzen, diese Backups lassen sich per SSH oder Shell über Punkt 13: Restore wählen
- Konfigurationsänderung greift nicht gleich? Firewall -> Diagnostics -> States -> Actions: "Reset State Table" + "Reset Source Tracking"
(Firewall friert kurz ein) - ICMP Redirect heisst bei OPNsense: Firewall -> Settings -> Advanced: Static Route Filtering --> Haken sollte i.Allg. gesetzt sein.
Links:
- OpenVPN mit OPNsense: https://uwe-kernchen.de/phpmyfaq/index.php?solution_id=1474
- Plugins: https://techcorner.max-it.de/wiki/OPNsense_-_Plugin-Liste
- Business-Service und Plugins: https://shop.opnsense.com/product-categorie/software_and_licenses/
- Roadmap: https://opnsense.org/about/road-map/
- SIP hinter OPNsense: https://www.tuxoche.de/2024/03/12/aufruestung-im-netz-voip-und-opnsense/
- (1) Buch: Der OPNsense-Praktiker, Enterprise-Firewalls mit Open Source von Markus Stubbig