Absicherung der IPsec-VPN-Verbindung mit Client-Zertifikaten – oberschwäbische IT-Praxis
Zuletzt aktualisiert am 25. Dezember 2023, 11:12:42
In diesem Artikel beschreibe ich die Einrichtung und Konfiguration der Client2Site (C2S) VPN-Verbindung. VPN-Verbindungen werden im privaten Umfeld immer wichtiger, um sicher auf (sensible) Daten zuzugreifen. Bewerbungen können grundsätzlich weiterhin direkt im Internet veröffentlicht werden. Allerdings verfügen die meisten Hobby-IT-Profis nicht über die nötigen Kenntnisse, zeitlichen Ressourcen und finanziellen Mittel. Es handelt sich also schlicht und einfach um eine VPN-Option.
Zur Authentifizierung von VPN-Verbindungen werden häufig vorinstallierte Schlüssel oder Benutzername + Passwort verwendet. Der Vorteil beider Optionen besteht darin, dass die Einrichtung und Verwaltung schnell und einfach erfolgt und keine zusätzlichen Produkte erforderlich sind. Beim Thema Sicherheit ist der Vorteil auch ein Nachteil. Werden Daten von Nutzern missbräuchlich gespeichert oder gar an Dritte weitergegeben, ist nicht mehr gewährleistet, dass nur autorisierte Nutzer auf das geschützte Netzwerk zugreifen können.
Ein anderer Ansatz ist die Authentifizierung mithilfe von Client-Zertifikaten. Dies hat den Vorteil, dass ohne den privaten Schlüssel des Zertifikats keine Verbreitung/Missbrauch möglich ist. So schützen Sie Ihren privaten Schlüssel mit einem Passwort. Diese muss bei jeder Nutzung des Zertifikats interaktiv eingegeben werden. Der Nachteil hierbei ist, dass Sie wissen müssen, wie die Public-Key-Infrastruktur (PKI) funktioniert und wie sie sicher konfiguriert werden kann.
Dieser Artikel ist auch hier enthalten. Erfahrung mit OPNsense und PKI erforderlich.
Rahmenbedingungen
Für diesen Artikel habe ich OPNsense auf einem Hetzner-Server installiert. Dabei spielt es grundsätzlich keine Rolle, ob das System in der Cloud oder On-Premises steht. Wichtig bei der letzten Option ist, dass die Internetverbindung als Dual-Stack (nicht Lite) verfügbar sein muss.
Das Subnetz 10.0.0.0/24 liegt auf der LAN-Schnittstelle der Firewall. Die Firewall hat die IP-Adresse 10.0.0.1.
Ich verwende Windows 11 für verschiedene Tests. Hier nutze ich die eingebaute Funktion für VPN-Verbindungen. Mit anderen Worten: Es ist keine zusätzliche Software erforderlich.
OPNsense unterstützt keine EAP-TLS-Authentifizierung mit Windows 10/11. Daher muss hierfür ein Funkserver verwendet werden (EAP-Radius).
OPNsense-Konfiguration
Nachfolgend beschreibe ich die einzelnen Firewall-Schritte.
PKI konfigurieren
Konfigurieren einer Zertifikatssperrliste (CRL).
Die CRL wird benötigt, damit ein Zertifikat später (jederzeit) widerrufen werden kann. Sobald sich das Zertifikat in der CRL befindet, kann es nicht mehr zur Kennzeichnung verwendet werden. |
Hinweis: Sobald ein Zertifikat zur CRL hinzugefügt oder daraus entfernt wird, muss zum Zeitpunkt des Artikels der Dienst „FreeRADIUS“ neu gestartet werden. |
VPN-Dienstzertifikat
Radius-Serverkonfiguration
Einrichten eines Testbenutzers
Konfigurieren Sie IPsec IKEv2
Erweitern Sie die Firewallregeln
Standardmäßig oder automatisch wird auf der IPsec-Schnittstelle eine Any Any-Regel mit einer „Out“-Richtung erstellt.
Eine weitere Regel mit Richtung „in“ fehlt hier. Andernfalls können später keine Daten übertragen werden. Um die Funktionalität sicherzustellen, wird zunächst jede Regel angewendet. |
Wenn alles funktioniert, sollte die Regel deaktiviert und ein bestimmter Regelsatz erstellt werden. |
Windows 11-Setup
Damit OPNsense PKI das Zertifikat des Benutzers auf einem Windows-System als gültig erkennt, müssen die RCA- und ICA-Zertifikate manuell importiert werden.
Zertifikate importieren
Konfigurieren der VPN-Verbindung (GUI).
Konfigurieren Sie eine VPN-Verbindung (PowerShell)
Add-VpnConnection -Name "OPNsenseIPSecIKEv2" -ServerAddress "static.200.155.76.144.clients.your-server.de" ` -TunnelType IKEv2 -EncryptionLevel Required -AuthenticationMethod EAP $config = New-EapConfiguration -Tls -UserCertificate -VerifyServerIdentity Set-VpnConnection -Name "OPNsenseIPSecIKEv2" -EapConfigXmlStream $config.EapConfigXmlStream |
VPN-Verbindung mit DH14/AES-CGM (PowerShell) konfigurieren
Windows nutzt standardmäßig Diffie-Hellmann (DH) Group 2 mit PowerShell-Unterstützung, die moderne DH Group 14 kann genutzt werden. Auch das AES-CGM-Verfahren kann eingesetzt werden. |
Add-VpnConnection -Name "OPNsenseIPSecIKEv2-CGM" -ServerAddress "static.200.155.76.144.clients.your-server.de" ` -TunnelType IKEv2 -EncryptionLevel Required -AuthenticationMethod EAP $config = New-EapConfiguration -Tls -UserCertificate -VerifyServerIdentity Set-VpnConnection -Name "OPNsenseIPSecIKEv2-CGM" -EapConfigXmlStream $config.EapConfigXmlStream Set-VpnConnectionIPsecConfiguration -ConnectionName "OPNsenseIPSecIKEv2-CGM" -AuthenticationTransformConstants GCMAES256 ` -CipherTransformConstants GCMAES256 -EncryptionMethod AES256 -IntegrityCheckMethod SHA256 -DHGroup Group14 -PfsGroup None -Force |
Funktionstest
Der einfachste und schnellste Funktionstest des VPN-Tunnels ist ein Ping (ICMP). Konkret vom VPN-Client bis zur Firewall, 10.0.0.1.
Funktionstest bestanden. 🙂 |
Split-Tunneling
Bei der aktuellen Konfiguration des VPN-IPsec-Tunnels wird in Phase 2 standardmäßig der gesamte Datenverkehr, der sich nicht in dem Subnetz befindet, in dem sich der Client befindet, an den Tunnel gesendet. Das bedeutet, dass alle Datenpakete auch Websites (z. B. google.de) betreffen.
Um dies zu lösen, kann der Parameter „-SplitTunneling“ verwendet werden, der dem ersten Zeilenbefehl (Add-VpnConnection…) „VPN-Verbindung konfigurieren (PowerShell)“ und „VPN-Verbindung gemeinsam konfigurieren“ hinzugefügt wird. „DH14/AES-CGM (PowerShell)“ wird am Ende hinzugefügt.
Apple iPhone/iPad-Setup
Der folgende Test wurde mit iOS Version 16.3 getestet.
Zunächst zwei CA-Zertifikate (im CRT-Format) (Wydler LAB03 RSA TLS Root CA 2023-1, Wydler LAB03 RSA Radius ICA 2023-1) und ein Client-Zertifikat (pfx, p12-Format) für das Endgerät. muss zum Gerät kommen. Ich habe die Dateien per E-Mail an das Gerät gesendet.
Ich empfehle, für jedes Gerät ein eigenes Zertifikat auszustellen. Es ist problemlos möglich, mehrere Zertifikate in Benutzereigenschaften auszustellen. Die Vorgehensweise (Zertifikat erstellen, Zertifikat exportieren) bleibt immer gleich. Für diesen Test verwende ich das vorhandene Zertifikat „blog.daniel“. Das exportierte Client-Zertifikat muss mit einem Passwort geschützt werden. Apple fragt beim Import ausdrücklich nach einem Passwort. Das Gespräch kann nicht übersprungen werden! |
Zertifikate importieren
Konfigurieren der VPN-Verbindung (GUI).
Konfiguration Linux Ubuntu 22.04
Natürlich finden auch immer mehr Linux-Distributionen den Weg auf Heimgeräte. Vor allem alten Geräten wird wieder neues Leben eingehaucht.
Konfigurieren der VPN-Verbindung (GUI).
Diese Schritte richten sich nach den Rahmenvorgaben:
- Der Ubuntu-Desktop (GNOME) ist installiert.
- NetworkManager wird zum Verwalten von Netzwerkeinstellungen verwendet.
Installationsvoraussetzungen: |
apt install strongswan libstrongswan-extra-plugins libcharon-extra-plugins network-manager-strongswa |
Damit die Änderung wirksam wird, muss das System neu gestartet werden. |
Das CA-Zertifikat „Wydler LAB03 RSA TLS Root CA 2023-1“ soll auch für Linux-Systeme verfügbar sein. Exportieren Sie die Weboberfläche wie gewohnt im .crt-Format. |
Allerdings muss das Client-Zertifikat unter Windows und Apple nicht als .p12 oder .pfx, sondern als .crt und .key exportiert werden. Dies kann auch über die OPNsense-Weboberfläche erfolgen. |
Diese drei Dateien müssen auf das Linux-System übertragen werden. Ich verwende hierfür FileZilla und SFTP für die Übertragung. Die Dateien müssen im sogenannten Home-Verzeichnis des Benutzers erstellt werden. |
Übersicht – Lobby, Zustand, Vermietung und Richtlinien
Widerrufen Sie das Client-Zertifikat
Der Tag ist gekommen, an dem einem Benutzer der Zugriff gesperrt oder ein neues Zertifikat ausgehändigt werden muss. In jedem Fall empfiehlt es sich, das Zertifikat auf die Zertifikatssperrliste (CRL) zu setzen.