Auf einer Alix APU betreibe ich eine OPNSense Firewall mit installiertem HAProxy und Let’s Encrypt Plugin.

Ich betreibe den Read-It-Later Service Wallabag auf Openmediavault, den ich verschlüsselt aus dem Internet erreichen möchte. Die Installation und Konfiguration von Wallabag auf Openmediavault habe ich hier beschrieben:
Wallabag auf Openmediavault

Die Alix APU’s findet man hier:
https://www.apu-board.de/

Weitere Informationen zu Let’s Encrypt gibt es hier
https://letsencrypt.org/

Wir starten mit der Konfiguration von Let’s Encrypt. Zuerst stellen wir auf Staging Environment, bis wir sicher sind, dass unsere Konfiguration läPluginuft. Das Plugin selber lassen wir aber noch deaktiviert.

OPNsense Let's Enrypt Plugin
OPNsense Let’s Encrypt Settings

Als nächstes richten wir uns einen Account ein. Vergebt hierzu euren Hostname, als die URL, die mit dem Zertifikat betrieben werden soll. Zusätzlich wird noch ein Email Adresse hinterlegt. Am Schluss sollte der Account wie folgt aussehen

OPNsense Let’s Encrypt Account

Nun muss eine Methode für die Validierung gewählt werden. Wir verwenden die HTTP-01 Challenge. Allerdings verzichten wir darauf, den HTTP Service in das später zu konfigurierende HAProxa Frontend aufzunehmen. Wir setzen auf den OPNSense Webservice, der den benötigten Port automatisch öffnet. Ich habe mich für diese Variante entschieden, das ich den Port 80 bei mir nicht geöffnet und / oder weitergeleitet habe. Der Web Service lauscht auf der WAN Schnittstelle.

OPNsense Let's Enrypt Automation
OPNsense Let’s Encrypt Automation

Damit der HAProxy auf der OPNSense Firewall als HTTPS Frontend mit Let’s Encrypt beim Renewal auch das neue Zertifikat nach außen aktualisiert, richten wir eine Automation ein, die den Proxy nach der Challenge neu startet. Einfach einen Namen vergeben und den entsprechenden Command auswählen: Restart HAProxy

OPNsense Let’s Encrypt Automation

Nun richten wir das SSL Zertifikat ein und wählen das Certificates Menu aus. Als Common Name verwenden wir unsere Domain: myDomain.ltd
Unter Alt Names könen wir weitere Namen vergeben, die vom Zertifikat abgedeckt werden sollen, wie zum Beispiel Subdomains sub.myDomain.ltd

Im Drop Down Menu LE Account wäheln wir den zuvor erstellten Account aus und machen dasselbe bei Validation Method. Der Haken bei Auto Renewal wird gesetzt und das Interval auf 60 eingestellt. Die Key Length beträgt 4096. Nun noch die Automation auswähen und Not using DNS alias mode festlegen.

OPNsense Let's Encrypt Certificate
OPNsense Let's Encrypt Certificate

Wir wechseln wieder in den Reiter Let’s Encrypt -> Settings und enablen das Plugin. Bitte nochmal vergewissern, dass Environment auf Staging steht. Zur Sicherheit könnt ihr eure Config auch noch testen lassen. Nun zurück zu Let’s Encrypt -> Certificates und wir erzwingen die Neuausgabe des Zertifikats. Klickt hierzu auf folgenden Button

OPNSense Let’s Encrypt Certificate
OPNSense Let’s Encrypt Certificate

Im Reiter Let’s Encrypt -> Log File könnt ihr den Prozess beobachten. Wenn alles funktioniert solltet ihr zum Schluss einen Eintrag sehen: „on_issue_success“
Danach könnt ihr auf  Production Environment umstellen und nochmal die Ausstellung des Zertifikats forcen.

Konfiguration von HAProxy auf OPNsense

Wir beginnen mit dem Anlegen eines Servers und wählen den Menüpunkt Real Servers und fügen über das + Symbol einen neuen hinzu. Die Parameter in den Screenshots zeigen die Konfiguration für Wallabag, dass wir hier aufgesetzt haben: Wallabag auf Openmediavault

OPNsense HAProxy Real Servers
OPNsense HAProxy Real Servers

Im nächsten Schritt fürgen wir ein Backend hinzu. Geht hierzu in den menüpunkt Virtual Services -> Backend. Zum Schluss sollte die Konfiguration wie folgt aussehen.

OPNsense HAProxy Backend
OPNsense HAProxy Backend
OPNsense HAProxy Backend

Anschließend wechseln wir nach Rules & Checks und wählen Condition aus. Hier legen wir die Bedingung fest, auf die geprüft werden soll. Wenn ihr für verschiedene Seiten verschiedene URLs verwendet, ist die zu wählende Regel Host matches. Der HAProxy hat ein Vielzahl an Bedingung, die je nach Szenario gewählt werden können. Unter Host String tragen wir also unsere URL ein, unter der unsere Seite erreichbar ist. Besipiel: wallabag.example.de 

OPNsense HAProxy Rule
OPNsense HAProxy Condition

Wir rufen Rules auf. Die Rule legt fest, was passieren soll wenn eine Condition eintritt. Wie ihr im folgenden Screenshot sehen könnt, habe ich 2 Bedingungen hinterlegt, denn ich will, dass der HAProxy die Verbindung sohl bei wallabag.example.de als auch bei www.wallabag.example.de antwortet. Den Test Type belassen wir auf IF. Wenn wir zwei Bedingungen hinterlegt haben, stellen wir den Logical Operater auf OR ein. Schließlich soll er reagieren wenn nur eine der Beiden erfüllt ist. Die Funkion die ausgeführt werden soll ist die Use specific Backend Pool und zum Schluss geben wir den Use Backen Pool mit dem wallabag_backend an.

OPNsense HAProxy Rule
OPNsense HAProxy Rule

Wir erstellen nun ein Public Frontend unter Virtual Services. Die meisten Einstellungen könnt ihr den Screenshots entnehmen. Beachtet bitte, dass ihr keinen Default Backend Pool gewählt habt. Für das SSL Offloading wählt ihr euer Let’s Encrypt Zertifikat aus und wenn ihr nur eines besitzt, könnt ihr es auch als Standrad hinterlegen. Die HSTS Settings habe ich aktiviert. Wer mehr darüber wissen möchte, kann hier ein Paar dinge dazu nachlesen: HAProxy und HSTS

Bitte achtet darauf, dass X-Forwarded-For Header aktiviert ist. Sonst kann es hier zu seltsamen Fehlverhalten kommen. Wir selektieren unsere wallabag_rule und speichern das Ganze ab.

OPNsense HAProxy Public Frontend
OPNsense HAProxy Public Frontend
OPNsense HAProxy Public Frontend
OPNsense HAProxy Public Frontend
OPNsense HAProxy Public Frontend

Durch die Installation des Let’s Encrypt Plugins von OPNsense wurden für uns die meisten Einstellungen im HAProxy hinterlegt und müssen nicht weiter angepasst werden. Lediglich ein Frontend für den Port 80 muss angelegt werden. Bitte die Einstellungen wie auf den Screenshots vornehmen. Die redirect-https Regel habt ihr allerdings nicht, daher wählt ihr nur die rediret-acme-challenge aus.

OPNsense HAProxy Let’s Encrypt Frontend
OPNsense HAProxy Let’s Encrypt Frontend
OPNsense HAProxy Let’s Encrypt Frontend
OPNsense HAProxy Let’s Encrypt Frontend

Noch ein kleiner Hinweis, damit alles funktioniert, müsst ihr unter den Firewall Rules der WAN Schnittstelle Port 80 und 443 auf This Firewall freigegeben haben. Wie man ein HTTP zu HTTPS Redirect konfiguriert, erkläre ich hier …..