Die kostenlose Open Source Firewall OPNsense kann als redundante Firewall mit automatischem Fail-over konfiguriert werden. Dieser Artikel zeigt, wie ein derartiger Firewall HA-Cluster mit zwei Firewall-Rechnern (in diesem Fall zwei Edge 4L) eingerichtet wird. Diese Anleitung wurde bereits vor einiger Zeit mit OPNsense 19.7 erstellt, jedoch wurde sie kürzlich mit dem im Juli 2023 veröffentlichten OPNsense 23.7 geprüft und aktualisiert.
Für eine redundante OPNsense Firewall sind erforderlich:
Falls die beiden OPNsense Cluster Nodes in virtuellen Maschinen betrieben werden, muss den virtuellen Maschinen das Verändern der MAC Adressen erlaubt werden. Dies ist für die Verwendung des Common Address Redundancy Protocol (CARP) erforderlich. Die entsprechenden Einstellungen sind:
Bei einer redundanten OPNsense Firewall kommen die folgenden Technologien zum Einsatz:
Empfehlung: Konfigurieren Sie beim Einrichten einer neuen Firewall zuerst den Clusterverbund. Beginnen Sie nach dem Einrichten des HA-Clusters damit, weitere Firewall-Konfigurationen (Firewall-Regeln, Dienste, ...) zu konfigurieren. Dieses Vorgehen reduziert mögliche Fehlerquellen.
Zur Einrichtung einer redundanten OPNsense Firewall sind folgende Schritte auszuführen:[6]
cat /dev/random | hexdump -n 30| cut -d \ -f 2-| head -n 1 | tr -d " "
Hinweis: Wenn weitere Dienste (z.B. OpenVPN) konfiguriert werden, muss zuvor die Synchronisation der Konfiguration unter System ‣ High Availability ‣ Settings aktiviert werden. Bei der Konfiguration des Dienstes muss jeweils die Virtual WAN IP als Interface für den Dienst gewählt werden.
Ein im Test-LAN angeschlosser Linux-Client zeigt bei Abfrage des ARP-Caches via "ip n" die virtuelle MAC-Adresse 00:00:5e:00:01:03 für das Default Gateway 192.168.1.1:
tniedermeier@tpt:~$ ip n 192.168.1.251 dev enp0s25 lladdr dc:58:bc:e0:06:d0 REACHABLE 192.168.1.1 dev enp0s25 lladdr 00:00:5e:00:01:01 REACHABLE 192.168.1.252 dev enp0s25 lladdr c4:00:ad:b8:69:a1 STALE
Nun wird zum Testen auf Firewall 1 (bisheriger Master) das Netzwerkkabel am WAN Port (igb1) abgesteckt. Verbindungen vom Linux-Client ins Internet (z.B. eine SSH-Verbindung oder eine virtuelle Desktop-Verbindung) bleiben erhalten.
Die folgende Ausgabe zeigt die Log-Einträge in /var/log/system.log sowie die sysctl Werte von net.inet.carp auf Firewall 1. Das Interface igb1 wechselt in den Status "interface down", daraufhin wird der "Demotion Counter" auf 240 gesetzt:
root@fw1:~ # opnsense-log <13>1 2023-11-14T15:40:17+00:00 OPNsense.localdomain kernel - - [meta sequenceId="1"] <6>carp: 3@igb1: MASTER -> INIT (hardware interface down) <13>1 2023-11-14T15:40:17+00:00 OPNsense.localdomain kernel - - [meta sequenceId="2"] <6>carp: demoted by 240 to 240 (interface down) <13>1 2023-11-14T15:40:17+00:00 OPNsense.localdomain kernel - - [meta sequenceId="3"] <6>igb1: link state changed to DOWN <13>1 2023-11-14T15:40:17+00:00 OPNsense.localdomain kernel - - [meta sequenceId="4"] <6>carp: 1@igb0: MASTER -> BACKUP (more frequent advertisement received) <13>1 2023-11-14T15:40:18+00:00 OPNsense.localdomain opnsense 37378 - [meta sequenceId="5"] /usr/local/etc/rc.syshook.d/carp/20-openvpn: Carp cluster member "Virtual WAN IP (192.168.0.253) (3@igb1)" has resumed the state "INIT" for vhid 3 <13>1 2023-11-14T15:40:18+00:00 OPNsense.localdomain opnsense 37378 - [meta sequenceId="6"] /usr/local/etc/rc.syshook.d/carp/20-openvpn: Resyncing OpenVPN instances for interface Virtual WAN IP (192.168.0.253). <13>1 2023-11-14T15:40:18+00:00 OPNsense.localdomain opnsense 37860 - [meta sequenceId="7"] /usr/local/sbin/pluginctl: plugins_configure crl (1) <13>1 2023-11-14T15:40:18+00:00 OPNsense.localdomain opnsense 37860 - [meta sequenceId="8"] /usr/local/sbin/pluginctl: plugins_configure crl (execute task : openvpn_refresh_crls(1)) <13>1 2023-11-14T15:40:19+00:00 OPNsense.localdomain opnsense 40421 - [meta sequenceId="9"] /usr/local/etc/rc.linkup: DEVD: Ethernet detached event for wan(igb1) <27>1 2023-11-14T15:40:19+00:00 OPNsense.localdomain dhclient 92256 - [meta sequenceId="10"] connection closed <26>1 2023-11-14T15:40:19+00:00 OPNsense.localdomain dhclient 92256 - [meta sequenceId="11"] exiting. <13>1 2023-11-14T15:40:19+00:00 OPNsense.localdomain opnsense 41507 - [meta sequenceId="12"] /usr/local/etc/rc.syshook.d/carp/20-openvpn: Carp cluster member "Virtual LAN IP (192.168.1.1) (1@igb0)" has resumed the state "BACKUP" for vhid 1 <13>1 2023-11-14T15:40:19+00:00 OPNsense.localdomain opnsense 41507 - [meta sequenceId="13"] /usr/local/etc/rc.syshook.d/carp/20-openvpn: Resyncing OpenVPN instances for interface Virtual LAN IP (192.168.1.1). <13>1 2023-11-14T15:40:20+00:00 OPNsense.localdomain opnsense 41654 - [meta sequenceId="14"] /usr/local/sbin/pluginctl: plugins_configure crl (1) <13>1 2023-11-14T15:40:20+00:00 OPNsense.localdomain opnsense 41654 - [meta sequenceId="15"] /usr/local/sbin/pluginctl: plugins_configure crl (execute task : openvpn_refresh_crls(1))
root@fw1:~ # sysctl net.inet.carp net.inet.carp.ifdown_demotion_factor: 240 net.inet.carp.senderr_demotion_factor: 240 net.inet.carp.demotion: 240 net.inet.carp.log: 1 net.inet.carp.preempt: 1 net.inet.carp.dscp: 56 net.inet.carp.allow: 1
Die folgende Ausgabe zeigt die Log-Einträge in /var/log/system.log sowie die sysctl Werte von net.inet.carp auf Firewall 2:
root@fw2:~ # opnsense-log <13>1 2023-11-14T15:40:18+00:00 OPNsense.localdomain kernel - - [meta sequenceId="1"] <6>carp: 1@igb0: BACKUP -> MASTER (preempting a slower master) <13>1 2023-11-14T15:40:18+00:00 OPNsense.localdomain opnsense 23155 - [meta sequenceId="2"] /usr/local/etc/rc.syshook.d/carp/20-openvpn: Carp cluster member "Virtual LAN IP (192.168.1.1) (1@igb0)" has resumed the state "MASTER" for vhid 1 <13>1 2023-11-14T15:40:18+00:00 OPNsense.localdomain opnsense 23155 - [meta sequenceId="3"] /usr/local/etc/rc.syshook.d/carp/20-openvpn: Resyncing OpenVPN instances for interface Virtual LAN IP (192.168.1.1). <13>1 2023-11-14T15:40:18+00:00 OPNsense.localdomain opnsense 25035 - [meta sequenceId="4"] /usr/local/sbin/pluginctl: plugins_configure crl (1) <13>1 2023-11-14T15:40:18+00:00 OPNsense.localdomain opnsense 25035 - [meta sequenceId="5"] /usr/local/sbin/pluginctl: plugins_configure crl (execute task : openvpn_refresh_crls(1)) <13>1 2023-11-14T15:40:20+00:00 OPNsense.localdomain kernel - - [meta sequenceId="6"] <6>carp: 3@igb1: BACKUP -> MASTER (master timed out) <13>1 2023-11-14T15:40:20+00:00 OPNsense.localdomain opnsense 54707 - [meta sequenceId="7"] /usr/local/etc/rc.syshook.d/carp/20-openvpn: Carp cluster member "Virtual WAN IP (192.168.0.253) (3@igb1)" has resumed the state "MASTER" for vhid 3 <13>1 2023-11-14T15:40:20+00:00 OPNsense.localdomain opnsense 54707 - [meta sequenceId="8"] /usr/local/etc/rc.syshook.d/carp/20-openvpn: Resyncing OpenVPN instances for interface Virtual WAN IP (192.168.0.253). <13>1 2023-11-14T15:40:20+00:00 OPNsense.localdomain opnsense 58044 - [meta sequenceId="9"] /usr/local/sbin/pluginctl: plugins_configure crl (1) <13>1 2023-11-14T15:40:20+00:00 OPNsense.localdomain opnsense 58044 - [meta sequenceId="10"] /usr/local/sbin/pluginctl: plugins_configure crl (execute task : openvpn_refresh_crls(1))
root@fw2:~ # sysctl net.inet.carp net.inet.carp.ifdown_demotion_factor: 240 net.inet.carp.senderr_demotion_factor: 240 net.inet.carp.demotion: 0 net.inet.carp.log: 1 net.inet.carp.preempt: 1 net.inet.carp.dscp: 56 net.inet.carp.allow: 1
Im Web Interface der Firewall 1 sind folgende Informationen ersichtlich (Firewall 2 ist für LAN und WAN nun MASTER):
Mit einem redundanten Aktiv/Passiv Firewall HA-Cluster kann die Downtime der Firewall bei einem Firewall-Update drastisch minimiert werden:
Autor: Werner Fischer Werner Fischer arbeitet im Product Management Team von Thomas-Krenn. Er evaluiert dabei neueste Technologien und teilt sein Wissen in Fachartikeln, bei Konferenzen und im Thomas-Krenn Wiki. Bereits 2005 - ein Jahr nach seinem Abschluss des Studiums zu Computer- und Mediensicherheit an der FH Hagenberg - heuerte er beim bayerischen Server-Hersteller an. Als Öffi-Fan nutzt er gerne Bus & Bahn und genießt seinen morgendlichen Spaziergang ins Büro.
|
Autor: Thomas Niedermeier Thomas Niedermeier arbeitet im Product Management Team von Thomas-Krenn. Er absolvierte an der Hochschule Deggendorf sein Studium zum Bachelor Wirtschaftsinformatik. Seit 2013 ist Thomas bei Thomas-Krenn beschäftigt und kümmert sich unter anderem um OPNsense Firewalls, das Thomas-Krenn-Wiki und Firmware Sicherheitsupdates. |