OpenVPN mit MFA über OPNsense in der Hetzner Cloud – Teil 2

Im ersten Blogartikel zum Thema ‚OpenVPN mit MFA auf OPNsense in der Hetzner Cloud‘ haben wir eine funktionierende Instanz der OPNsense Firewall installiert, konfiguriert und gepatched. Heute werden wir den OpenVPN-Dienst in Betrieb nehmen und dafür einige Grundvoraussetzungen schaffen.

Konfiguration der Certificate Authority (Zertifizierungsstelle)

Als erstes klicken Sie auf das Dropdown Menü neben der Zeile Method und wählen „Create an internal Certificate Authority“ aus. Nun eröffnen sich uns weitere Einstellungsmöglichkeiten. Sie können für den Bereich „Internal Certificate Authority“ unsere Werte übernehmen.

Descriptive name: Wie erscheint unsere Root-CA in der OPNsense? Hier macht es Sinn einen Aussagekräftigen Namen zu wählen.

Key Type:
RSA und elliptische Kurven sind verschiedene Kryptographiesysteme. RSA basiert auf der Faktorisierung großer Zahlen, während elliptische Kurven auf mathematischen Kurven beruhen. Beide Systeme werden für Verschlüsselung und digitale Signaturen verwendet, wobei elliptische Kurven kürzere Schlüssellängen und effizientere Berechnungen bieten können.

Key length (bits):
Die Schlüssellänge bei Verschlüsselungen bezieht sich auf die Anzahl der Bits oder Zeichen in einem kryptografischen Schlüssel und bestimmt die Sicherheit und den möglichen Schlüsselraum einer Verschlüsselungsmethode.

Digest Algorithm:
Ein Digest-Algorithmus erzeugt eine feste Ausgabelänge, genannt Digest oder Hash, indem er eine beliebig lange Eingabe in eine eindeutige Prüfsumme umwandelt. Die kleinste Änderung würde den Hash komplett verändern.

Lifetime (days):
Wie lange gilt unsere Root-CA?

Im Bereich „Disinguished name“ können Sie die Daten Ihrer Organisation oder Ihres Homelabs eintragen.

Sobald alles fertig ist, müssen die Einstellungen mit Save gespeichert werden.

Erstellung eines Zertifikats für den OpenVPN-Server 

Unser OpenVPN-Server benötigt noch ein eigenes Serverzertifikat. Gehen Sie dazu links auf „Certificates“. Wählen Sie als erstes die Option „Create an internal Certificate“ unter „Method“ aus. Geben Sie einen aussagekräftigen Namen ein und stellen Sie sicher, dass der „Type“ auf „Server Certificate“ eingestellt ist. Passen Sie die Verschlüsselung entsprechend den Werten an, die Sie in Ihrer Root-CA festgelegt haben, und geben Sie einen sinnvollen „Common Name“ ein. Verwenden Sie am besten denselben Namen wie im „Descriptive name“. Speichern Sie die Einstellungen unten auf der Seite mit einem Klick auf „Save“.

Einrichten des TOTP Access Servers für MFA

Der einfachste Teil wird es sein die Multi Faktor Authentifizierung für unseren Server zu aktiveren.
Dazu gehen Sie zu „System → Access → Servers“ und klicken Sie rechts auf das orangene Feld mit dem „+“-Symbol.

Wechseln Sie in der Zeile Type auf „Local + Timebased One Time Password“. Geben Sie dem Access-Server einen passenden Namen und setzen Sie einen Haken auf „Reverse token order“ und bestätigen mit Save.

Die MFA-Funktionalität funktioniert, indem ein generierter Code an unser Nutzerpasswort angehängt wird. Dieser Code hat eine Gültigkeit von 30 Sekunden. In der Standardvariante lautet die Reihenfolge „CODE+Passwort“. Durch Aktivieren der Option „Reverse token order“ ändern wir die Reihenfolge in „Passwort+CODE“.

Konfiguration des OpenVPN-Servers 

Wechseln Sie links auf „VPN → OpenVPN → Servers“ und klicken Sie rechts auf das orangene Feld mit dem „+“-Symbol.

Sie erhalten nun eine breite Palette an Einstellungsmöglichkeiten. Als erstes müssen Sie den „Server Mode“ auf „Remote Access (SSL/TLS + User Auth)“ einstellen. Dadurch ändert sich das Fenster entsprechend. Wählen Sie nun unter „Backend for authentication“ Ihren zuvor erstellten TOTP Server aus. Sie haben die Möglichkeit, mehrere Server für die Authentifizierung der Benutzer bei der Verbindung hinzuzufügen. In unserem Fall sollte jedoch nur der von uns erstellte Server ausgewählt sein.

Für das „Protocol“ empfehlen wir TCP anstelle von UDP, insbesondere bei der Nutzung in der Hetzner-Cloud. Dies liegt daran, dass es bei der Verwendung von IPv6 zu Problemen beim sogenannten TLS-Handshake kommen kann. Sie können diese Einstellung später jederzeit auf UDP ändern, wenn gewünscht.

Den „local port“ können Sie auf 1194 belassen, sofern Sie mit den Standardports arbeiten möchten.

Die bisherigen Verschlüsselungen mit denen wir gearbeitet haben waren für die Zertifikate und Authentifizierung. Nun müssen Sie dem OpenVPN-Server auch beibringen mit diesen zu arbeiten.

Setzen Sie die „TLS Authentication“ auf die Option „Enabled – Authentication & encryption“. Stellen Sie sicher, dass unsere Root-CA unter „Peer Certificate Authority“ ausgewählt ist. Falls sie nicht angezeigt wird, wählen Sie sie aus. Wählen Sie unser zuvor erstelltes Serverzertifikat für „Server Certificate“ aus.

Für den „Encryption Algorithm“ empfehlen wir „AES-256-GCM“, und für den „Auth Digest Algorithm“ nehmen Sie „SHA512 (512-bit)“. Da unsere Zertifikatskette nur einen Server enthält, können Sie die „Certificate Depth“ auf „One“ belassen. Für zusätzliche Sicherheit können Sie einen Haken neben „Strict User/CN Matching“ setzen.

Die „Tunnel Settings“ für verbundene Clients sind ein wichtiger Aspekt in der OpenVPN-Konfiguration. Dabei ist ein grundlegendes Verständnis von Subnetting erforderlich. Die „IPv4/IPv6 Tunnel Network“ bestimmen die Netzwerke, in denen sich die Clients befinden. In unserem Beispiel erhalten die Clients eine IPv4-Adresse aus dem Bereich 172.16.0.1 bis 172.16.0.254.

Die IP-Adressen können flexibel dynamisch verteilt oder auch bestimmten Benutzern zugewiesen werden. Im Fall von IPv6 haben wir ein Subnetz-Bit von unserem zugewiesenen Netzwerk nach rechts verschoben und vergeben daher IPv6-Adressen ab 2a01:4fa:1c17:68a0:8000::.

Je nach den Anforderungen an unser VPN-Netzwerk kann es sinnvoll sein, die Kommunikation zwischen den verbundenen Clients zu ermöglichen. In diesem Fall können wir die Option „Inter-client communication“ aktivieren. Allerdings verwenden wir in unserem Beispiel OpenVPN als reines Privacy-Gateway, daher lassen wir diese Option deaktiviert.

Weitere Informationen zu den einzelnen Tunnel Settings erhalten Sie, indem Sie auf das orangefarbene Info-Symbol links neben der entsprechenden Zeile klicken.

Mit den Client-Settings-Optionen können spezifische Konfigurationen wie DNS-Einstellungen oder Network Time Protocol (NTP)-Einstellungen für die Clients bereitgestellt werden. In unserem Beispiel werden jedoch keine Haken gesetzt.

Unter „Advanced configuration“ empfiehlt es sich, das „Verbosity-Level“ auf 3 einzustellen, um ausreichend Informationen für Fehleranalysen zu erhalten. Speichern Sie die Einstellungen anschließend mit einem Klick auf „Save“.

Verbindung zum OpenVPN zulassen

Unabhängig davon, ob Sie die von Hetzner für die Cloud-Server bereitgestellte Firewall nutzen oder nicht, müssen Sie eine entsprechende Regel für die Verbindung zu Ihrem VPN-Server auf dem WAN-Interface definieren. Gehen Sie dazu zu „Firewall → Regeln → WAN“ und klicken Sie rechts auf das orangene „+“-Symbol.

Das Einzige, was Sie nun anpassen müssen, ist die Zeile mit „TCP/IP-Version“, „Protocol“ und der „Destination port range“. Dort finden Sie bereits einen Alias mit dem Namen „OpenVPN“. Geben Sie der Regel noch eine aussagekräftige Beschreibung im Feld „Description“.

Nachtrag: Legen Sie zusätzlich eine Regel beim Interface „OpenVPN“ an. Tragen Sie am besten noch beim Protocol „IPv4+6“ ein. Der Rest kann, sofern sie keine spezielle Filterung gefordert wird, einfach angelegt und sogleich gespeichert werden.

Nun haben wir unser VPN eingerichtet und es nimmt Verbindungsanfragen entgegen. Im nächsten und letzten Teil werden wir uns um die Einrichtung und Verwaltung der VPN-Benutzer kümmern.

Wenn Sie Unterstützung bei OPNSense benötigen, so können Sie sich gerne unverbindlich bei uns melden.