Ich weiß nicht, wie viele physische und virtuelle Firewalls ich in meinem Homelab in den letzten zehn Jahren in Betrieb hatte. Aber es gibt eine, zu der ich immer wieder zurückkehre.
Als ich nach Deutschland gezogen bin, war das Setup bei der Deutschen Telekom ungewohnt durch das VLAN. Daher hier die Schritte zum Aufsetzen.
OPNsense IPv6 Telekom Magenta
OPNsense lässt sich in beiden Varianten betreiben.
Virtualisiert kommt mit einigen Vorteilen, die z.B. Snapshots und Clones. Das lädt zum Herumspielen ein, weiß man doch, dass man mit wenigen Mausklicks den vorherigen Zustand wiederherstellen kann, wenn man mal wieder etwas zu Tode optimiert hat.
Man hört immer noch Aussagen wie „eine Firewall sollte man nicht virtualisieren“ aber hey, wir sind nicht mehr im Jahr 2010. Und tatsächlich sind sogar viele Hardware-Firewalls von bekannten Marken virtualisiert bzw. haben Dienste lokal in Containern laufen.
Trotzdem habe ich mich dieses Mal wieder für Hardware entschieden aus einem einfachen Grund: Der Strom wird immer teurer, und eine kleine Box ist deutlich sparsamer und auch leiser als ein Host.
Die Hardware
Ich habe mich für eine lüfterlose Box mit einem Intel Celeron N5105 und mehreren 2.5 GB Interfaces entschieden.
Es gibt verschiedene, meine ist diese hier.

4x 2.5 GB i225 Intel NIC, 8 GB Memory und eine 128 GB NVMe. Aufgeschraubt sieht es so aus:

Der Speicher lässt sich mit einer zweiten Bank problemlos erweitern und man könnte sogar das NVMe Drive austauschen.
Es gibt hier weitere Details. Die Boxen sind nicht vollkommen identisch, aber irgendwie scheint es ohnehin nur zwei Hersteller für derartige Geräte zu geben.
Ich bin mit über die Telekom mit einem Gigabit an FTTH angebunden, also bräuchte ich keine 2.5 GB NICs, aber hey, brauchen /= wollen.
OPNsense Installation
Für die ersten Screenshots habe ich eine VM aufgesetzt, da ich nicht den Monitor fotografieren wollte.
Die ISO Datei gibt es hier und kann sie dann per Rufus (Windows) oder Balena (MacOS) auf einen USB Stick kopieren.
Nach dem Booten vom USB Stick erscheint irgendwann ein Login. Zur Wahl stehen root oder installer, jeweils mit dem Standard-Passwort opnsense.

Der erste Schritt im Installationsvorgang ist, ein Keyboard Layout zu wählen. Je nach dem, was für ein Passwort euch vorschwebt, sollte hier direkt Deutsch ausgewählt werden.

Dann startet die Installation, und man folgt einfach den Schritten.

Nach ein paar Minuten startet das System neu, und wir sind wieder im Login, aber diesmal mit root. Zu sehen ist die folgende Auswahl:

Zuerst müssen die Interfaces zugewiesen werden.
Dazu die 1 wählen, dann den Schritten folgen und dabei die beiden Interfaces zuweisen. Dann die 2 um IP Adressen anzuheften.
Die Einstellungen beim WAN sind im Moment unerheblich. Beim LAN entweder die Basis so lassen oder entsprechend anpassen, also mit einem anderen Subnet und DHCP Range.
Danach kann über die LAN IP in das Dashboard eingelogged werden.
OPNsense Dashboard

Nach dem ersten Login erfolgt ein Wizard, dort einfach den Schritten folgen, beim WAN Interface kann es erst einmal bei DHCP belassen werden:

Zuerst erstellen wir die Verbindung in die weite Welt.
Für Magenta wird PPPoE sowie VLAN 7 eingerichtet.
Dazu gehen wir im Menü links zu Interfaces / Other Types / VLAN:

Dann rechts auf das Plus und ein neues Interface anlegen. Das Parent-Interface ist das ursprüngliche WAN Interface, VLAN tag ist die Nummer sieben, und eine Bezeichnung kann nach Belieben vergeben werden:

Im nächsten Schritt auf Interfaces / Point-to-Point / Devices und auch dort auf das Plus. Der Link Typ ist PPPoE, verlinkt wird auf das VLAN das wir oben erstellt haben. Der Benutzername ist die Anschlusskennung, Zugangsnummer, sowie die Mitbenutzernummer und @t-online.de, also in etwa 000000000000111111111111#0001@t-online.de:

Nun link sauf Interfaces / Assignments und beim WAN das pppoe Interface auswählen, speichern und dann auf WAN klicken.
Bei IPv4 PPPoE und bei IPv6 DHCPv6 auswählen:

Etwas weiter unten bei DHCPv6 Configuration wählen wir als Prefix 56 aus, das ist die Standardgröße bei der Telekom, ebenso senden wir einen Prefix-Hint und, ganz wichtig, IPv4 Connectivity:

Dann link am Rand auf LAN, dort bei IPv6 “Track Interface” und weiter unten beim IPv6 Interface sicherstellen, dass WAN ausgewählt ist. Abspeichern, dann links unten auf Power / Reboot und neu starten.
Updates und Einstellungen
Nach dem Neustart sollten wir auf dem Dashboard Daten über die Verbindung sowie Gateways sehen; wir sind mit dem Internet verbunden.
Links auf System / Firmware / Status, dann auf Updates überprüfen und durchführen. Unter Umständen ist ein Neustart erforderlich.
Weiter geht es bei System / Settings / Administration. Dort bei der Web GUI und Secure Shell die “Listen Interfaces” von All auf LAN umstellen, Secure Shell aktivieren und root & password erlauben, etwa so:

Dann links auf System / Administration / General. Falls die Anpassungen oben nicht beim Wizard erledigt wurden, kann man hier noch einmal Host- und Domänennamen sowie die Zeitzone angeben.
Wichtiger ist unten bei Networking die DNS Server. Ich nutze seit fast zwei Jahren NextDNS und bin mehr als zufrieden. Die notwendigen Schritte sind weiter unten, hier bei den DNS Servern tragen wir die aus dem Kundenportal zu entnehmenden IP Adressen ein, zweimal IPv4 und zweimal IPv6.
Wichtig: Den Haken bei “Allow DNS server list…” rausnehmen, sonst setzt sich die Telekom dazwischen.
Bei System / Settings / Miscellaneous wähle ich die folgenden Positionen aus:

Ganz unten kann man den Startup/Shutdown Beep ausstellen, das ist eine gute Idee!
Im großen und ganzen ist die Firewall jetzt einsatzbereit. Wir haben eine OPNsense, IPv6, und Telekom Magenta aufgesetzt. Aber da geht noch was!
NextDNS
Wie schon erwähnt, ich bin ein Fan von NextDNS.
Bei der kostenlosen Variante existiert ein Limit von 300k Aufrufen/Monat, danach deaktivieren sich die Sicherheits-Features aber der Resolver bleibt aktiv. 300k klingt viel, ist es aber nicht. Ich bin bei 2.8 Millionen pro Monat, und habe kein besonders großes Netzwerk zu Hause. Für knapp 20 Euro im Jahr kann man das Limit entfernen. Das ist ein geringer Preis wenn man bedenkt, dass man sowohl die Sicherheit erhöht als auch die Werbung auf 99% aller Webseiten ausblendet.
Ich werde an anderer Stelle mehr darüber schreiben, hier geht es um die Integration in OPNsense.
Es gibt verschiedene Methoden; so kann man z.B. out-of-the-box DNSCrypt verwenden. Früher gab es dabei ein Problem: Nach einem Update der Firewall mussten die Einstellungen neu gesetzt werden. Jetzt, in September 2022, ist das Problem wohl beseitigt, aber ich nutze nach wie vor die CLI Methode.
Zuerst jedoch in der Web GUI bei Services / Unbound DNS / General den Haken aus “enable” nehmen, als die interne Auflösung deaktivieren. Achtung: Danach ist die Namensauflösung weg, bis der Client installiert wurde.
Dazu verbindet man sich mit der OPNsense über SSH und führt das folgende Kommando aus, um den Client lokal zu installieren:
sh -c 'sh -c "$(curl -sL https://nextdns.io/install)"'
Dann einfach den Schritten auf dem Screen folgen; Installation mit I usw, dann die aus NextDNS vergebene ID eintragen. Ich habe auf alle Fragen mit y geantwortet.
Dann muss kurz eine Datei editiert werden. Von Haus aus bietet BSD, also auch die OPNsense, nur den vi-Editor an. Das grenzt an Masochismus. Daher vorher nano installieren:
pkg install nano
Gefolgt von:
nano /usr/local/etc/nextdns.conf
Geändert wird die zusätzliche Listen-Address sowie setup-router von true auf false. Hier ist meine angepasste Datei:

Um die Änderungen zu aktivieren, schnell das hier hinterher schieben:
nextdns restart
Das war’s. In NextDNS unter den Logs sollte man jetzt die einzelnen Devices sehen, die lokal Namen auflösen. Und das sowohl für IPv4 als auch IPv6 – bingo!
Sunny Valley Zenarmor
Wie eingangs erwähnt, habe ich in den letzten 10-15 Jahren so einiges an Firewalls eingesetzt. Meine letzte war eine Zyxel ATP200.
Für die habe ich viel zu viel bezahlt und sie nach zwei Monaten wieder verkauft, aber das war meine eigene Schuld.
Was bei der Zyxel großartig war, ist der IP Reputationsfilter. Ich konnte einen milden Trojaner auf dem MacBook meiner Partnerin identifizieren, der davor, mit Ubiquiti glaube ich, unentdeckt geblieben ist.
Kann die OPNsense das auch?
Von Haus aus nicht, aber es gibt ein offizielles Plugin: Sunny Valley Zenarmor, früher auch Sensei genannt. Ich werde an anderer Stelle detailliert darüber schreiben, daher hier nur die Basics.
Die Installation ist etwas unübersichtlich. Zuerst geht man zu System / Firmware / Plugins und wählt os-sunnyvalley “Vendor Repository” aus. Erst danach erscheinen die anderen Elemente. Installiert werden muss os-sensei und os-sensei-updater. Der Agent ist optional.
Der Installer überprüft die vorhandene Hardware und schlägt die Optionen vor; beim von mir verwendeten Gerät kann ich die optimale Konfiguration wählen, demnach eine lokale Instanz der ElasticSearch DB, L3 Mode und den Betrieb auf dem LAN Interface:

Beim Setup einfach den Schritten folgen.
Später dann unter Zenarmor / Policies / Security auswählen, was angebracht erscheint. Die linke Seite ist kostenlos, die rechte leider nicht:

Es gibt verschiedene Möglichkeiten, die Funktion zu testen. Letzten Endes wird man als Benutzer nur merken, wenn plötzlich eine Seite nicht erreichbar ist – dann einmal ins Dashboard geschaut und die sexy Grafiken analysieren.

Eine gesperrte Seite wird so gemeldet:

Speed und Temperatur
Eine Deep Packet Inspection wie Zenarmor hat natürlich Anforderungen an die CPU, um so mehr wenn eine schnelle Verbindung vorhanden ist. Wie erähnt, ich habe eine Gigabit Anbindung. Meine CPU siewht das jedoch auch mit Zenarmor relativ entspannt:

Die Temperatur ging schnell auf 63 Grad, im September; also keine Sommerhitze mehr und noch keine Heizung.
Das ist vollkommen in Ordnung, die CPU kann locker 90 Grad vertragen.
Was aber, wenn es dann doch zu warm wird? Die von mir gewählte Hardware hat keinen Lüfter.
Das ist beabsichtigt, da die Lüfter in derartigen Geräten meistens ziemlich laut sind.
Aber man kann Abhilfe schaffen.
Ich hatte in einer meiner Bastelkisten noch zwei Dinge, die ich schon länger nicht mehr benutzt hatte.
Zum einen einen 5 Volt USB Noctua Lüfter, und den dazu passenden Adapter.
Das ist eine gute Kombination, da der Adapter ein kleines Rad hat, mit dem sich der Widerstand dynamisch einstellen lässt.
Bei 3.2 Volt bleibt der Lüfter unhörbar, und hier ist das Ding einfach auf die Firewall gelegt und nach unten blasend:

Sehr simpel, trotzdem effektiv:

Und das Ding ist fix:

Setzt die Segel!!!
Ein paar Dinge bleiben noch zu tun, aber das ist für ein zukünftiges Update gedacht. Bis dahin, viel Spass und Erfolg!
Update: Google Domains DDclient Anleitung
More homelab posts:
Google Domains DDclient Dynamic DNS OPNsense
Earlier I wrote about setting up an OPNsense firewall. As I’m using Google Domains, I…
OPNsense IPv6 Telekom Magenta
Ich weiß nicht, wie viele physische und virtuelle Firewalls ich in meinem Homelab in den…
SolarWinds Hybrid Cloud Observability First Steps, part two
Are you ready to continue our first steps in the SolarWinds Hybrid Cloud Observability platform? …
Mullvad Wireguard qBittorrent Docker
Change is a process, or so they say.That applies to a homelab.Two weeks ago, I…
SolarWinds Hybrid Cloud Observability First Steps, part one
I deployed SolarWinds Hybrid Cloud Observability (HCO), and now I have started to adjust it.I…
SolarWinds Hybrid Cloud Observability – Installation
This is a “death by screenshot” style tutorial about a SolarWinds Hybrid Cloud Observability installation.I’m…