Projekte

Sophos Firewall (XGS) in der Hetzner-Cloud

Aus Spieltrieb und Interesse wollte ich herausfinden ob man eine Sophos Firewall (die wir beim Arbeitgeber hauptsächlich in Hardware bei Kunden verbauen) in der Software-Variante in der Hetzner-Cloud installieren kann.
Von Sophos gibt es eine Home-Version die fast alle Features bietet und für den Heimgebrauch - sprich: uns verrückte IT-Admins - kostenlos ist.

Einschränkungen: Max. 6GB RAM nutzbar, Features wie NDR Essentials, Sandstorm, MDR usw. fehlen.

Dieser Artikel ist geschrieben aus Sicht eines erfahrenen Firewall- und Netzwerk-Admins und erfordert fürs Verständnis dementsprechend auch ein wenig Erfahrung mit der Sophos Firewall (SSH / CLI, Termini) sowie der Hetzner-Cloud (Support-Anfragen, VMs erstellen, Hetzner Console der VM).

Die verwendeten Versionen zum Zeitpunkt dieses Artikels waren Sophos Firewall SF OS 21.5 MR1 (ISO) sowie SF OS 22 GA.

Bekommt man also eine Sophos Firewall in der Hetzner-Cloud mit ihrem etwas speziellen Verhalten bezüglich WAN und internen Subnets zum laufen?

Spoiler: Ja, aber... 😁

Vorarbeiten / Installation

Zunächst braucht man die Sophos Firewall ISO für Intel Hardware in der Hetzner Cloud. Dazu bedarf es eines Tickets beim Hetzner Support, die FAQ bei Hetzner zu eigenen ISOs beschreiben, wie es geht.

Ein Sophos Central Account sollte vorhanden sein oder vorher angelegt werden.

Außerdem sollte schon mal eine Home Lizenz über die Sophos Firewall Home Seite organisiert werden, wenn nicht schon geschehen.

Hat man die Bestätigung vom Support dass die ISO bereitsteht, erstellt man in seinem Hetzner Projekt einen neuen Server. Für mich reichte ein CX23 (2 CPUs, 4GB RAM, 40GB HDD), da ich nur einen Teil der Firewall-Features nutzen möchte und keine hohe Performance benötige.
Als Basis habe ich ein AlmaLinux Version 9 genommen.

Wichtig: Man braucht ein internes Hetzner "Network", damit man in der VM ein zweites Interface zur Verfügung hat. Außerdem braucht der Server eine öffentliche IPv4-Adresse.

Nach Erstellen des Servers kann man diesen gleich wieder ausschalten, anschließend die ISO einlegen und wieder starten. Der Firewall Installer bootet, diesen in der Hetzner Server Console mit "z" (englische Tastaurbelegung!) bestätigen.

Grundkonfiguration zur Erreichbarkeit

Nach der Installation die ISO wieder auswerfen und dann den Server durchstarten.
Wenn die Firewall gebootet ist, hat sie keinerlei Konnektivität nach außen, weil die Netzwerkeinstellungen erst von Hand durchgeführt werden müssen.

Daher: Anmelden in der CLI mit dem Passwort admin, danach dieses über das CLI-Menü erst mal ändern (Achtung, englische Tastaurbelegung!).
Das ist essentiell, denn wir machen gleich den WebAdmin direkt aus dem Internet erreichbar, somit ist ein gutes Passwort Pflicht!

Anschließend in die Advanced Console (5. → 3.).

ifconfig Port1 172.31.1.2 netmask 255.255.255.252 up
ifconfig Port1:0 <Public IP> netmask 255.255.255.255 up
route add default gw 172.31.1.1 Port1

Danach mit exit wieder raus und mit 0. ins Hauptmenü.

Nun in die Device Console (4.) und dort ein SNAT für Systemtraffic setzen, damit der Server mit der Public IP nach draußen kommuniziert.

set advanced-firewall sys-traffic-nat add destination 0.0.0.0 netmask 0.0.0.0 interface Port1 snatip <Public IP>

Nun sollte der WebAdmin über die Public IP (https://<Public IP>:4444) erreichbar sein, Anmelden mit admin und dem vorher vergebenen Passwort.

Dauerhafte Konfiguration

Im WebAdmin müssen diese Änderungen nun persistent gemacht sowie ein paar weitere Einstellungen getätigt werden.

Zunächst sollte die Lizenznummer der Home Lizenz eingetragen werden, damit die Firewall lizenziert und aktiviert ist.
Anschließend diese zunächst in Sophos Central registrieren, inkl. Management über Sophos Central (brauchen wir später).

Nun den WebAdmin über Sophos Central aufrufen. Wenn das klappt:

Network → Interfaces:

  • Port1 auf 172.31.1.2 /30 mit GW 172.31.1.1 setzen, Zone WAN
    • Das geht nicht, wenn man über das Interface gerade auf den WebAdmin zugreift, daher ist das Central-Management nötig. Alternativ sollte es auch klappen mit einem weiteren Host im Hetzner Network, aber das habe ich nicht weiter getestet.
    • Wenn der WebAdmin nun nicht mehr reagiert und die Firewall in Central offline geht:
      Per Hetzner Console in der Advanced Console nochmal wie oben die IPs und Route setzten.
  • Alias Port1:0 <Public IP>/32

Administration → Device Access:

  • Local ACL Exception: Von der WAN-IP (oder z.B. Dyn.-DNS-Name) am eigenen lokalen Standort zu #Port1 und #Port1:0 HTTPS, SSH erlauben.

Network → Interfaces:

  • Interface Port2 auf Zone LAN mit stat. IP <IP des Hosts im Hetzner Network>/32, MTU 1450
  • Dummy-VLAN (z.B. 4093) mit Dummy-IP (z.B.) 169.254.40.93/32 auf Port2 anlegen.
    Hintergrund: Das Interface Port2 kommt nach einen Reboot meist nicht sauber hoch, und der Internet zu findenden Tipp, eine Datei /scripts/system/clientpref/customization_application_startup.sh anzulegen, ist nicht update-fest.
    Mit einem "Sub-Interface" auf dem Port scheint es aber zu klappen.

Falls es andere Server in der Hetzner Cloud gibt und diese über das "interne" Netzwerk erreichbar sein sollen:

Network → Routing → Static Routes:

  • Route zu Subnet-GW: <Hetzner-Network>.1/32 via Port2 (keine GW-IP eingeben), mit Metric 0 und Administrative Distance 1.
  • Route zu jedem einzelnen Host (/32) via Gateway <Hetzner-Network>.1 (kein Interface auswählen), mit Metric 1 und Administrative Distance 2.
  • Route zum ganzen Subnetz scheint beim Reboot nicht sauber übernommen zu werden, daher der Workaround mit den einzelnen Hosts.

Fazit

Eine Sophos Firewall in der Hetzner Cloud ist für den geübten (Sophos-)Heim-Admin machbar, aber hat doch einige Stolperfallen.

Langzeiterfahrungen fehlen noch, aber bisher scheint es (inkl. einem Update von Firmware 21.5 MR1 auf 22 GA) zuverlässig zu laufen.

Von Sophos ist das natürlich in keiner Form supported und sollte daher niemals in einem produktiven Umfeld eingesetzt werden! 😉

Copyright © Matthias Kind
(If not marked separately, all content on this site is CC-BY)