Quantcast
Channel: Andy – Andy's Blog
Viewing all articles
Browse latest Browse all 2173

OpenVPN-Server unter Windows einrichten – Erste überarbeitete Fassung

$
0
0

Der Beitrag OpenVPN-Server unter Windows einrichten gehört trotz seines mehrjährigen Alters mit zu den beliebtesten Veröffentlichungen in diesem Blog. Im Laufe der Zeit hat sich so manches verändert, daher wird es Zeit für eine überarbeitete Fassung.

Auf verschiedenen Wegen werde ich nahezu regelmäßig danach gefragt, ob es ein Update zu diesem Thema gibt oder geben wird. Zuletzt hatte ich dieses im November 2021 via Kommentar noch ausgeschlossen, aber was soll man sagen: Dinge ändern sich und so ergab es sich nun, gerade einmal gut zwei Monate später, das ich dieses Thema doch aufgreifen muss.

Grundsätzlich sei erwähnt, das man einen OpenVPN-Server (in der Community-Ausgabe) unter Windows betreiben kann, ich empfehle dennoch eher richtige VPN-Firewall-Router, wie z.B. pfSense, OPNsense oder Securepoint UTM,  die eine ordentliche Implementierung und insgesamt eine einfachere sowie weitreichendere Handhabe bei der Konfiguration und mehr Funktionen aufweisen.

Änderungen gegenüber des ersten Beitrags

Wie eingangs bereits erwähnt haben sich ein paar Dinge in der Zwischenzeit geändert, da wäre beispielsweise das easy-rsa zwischenzeitlich nicht mehr im Bundle enthalten war. Ferner haben sich Konfigurationsoptionen sowie die Verschlüsselung und Pfade geändert.

Die aktuelle Version von easy-rsa lässt sich wohl auch nicht ganz so einfach (unter Windows) nutzen wie in der Vergangenheit. Um es insgesamt dem gemeinen Windows-Administrator einfacher zu machen, wird in dieser Fassung die Zertifikatverwaltung mittels XCA durchgeführt. Dies bietet zudem einen einfacheren Überblick über die ausgestellten Zertifikate und deren Status.

Zwecks Benutzeranmeldung wurde zudem im früheren Beitrag ein Skript verwendet, das aus einer mittlerweile nicht mehr verfügbaren Quelle stammt. Um die Verständlichkeit dieses Abschnitts etwas zu erhöhen, wurde dieses Skript ebenfalls überarbeitet und vereinfacht.

Die folgenden Schritte wurden auf einem Windows Server 2012 R2 durchgeführt, sie sollten allerdings auch unter neueren Windows-Versionen funktionieren. Die OpenVPN-Konfiguration besteht in der Hauptsache aus den beim Setup mitgelieferten Beispielen, die nur wenig angepasst werden. Es handelt sich im ein Roadwarrior-Setup, es geht also um VPN-Verbindungen beispielsweise von Außendienst-Mitarbeitern zur Firma. Nicht behandelt wird die Möglichkeit einer Standortvernetzung (Site-to-Site, s2s)

Soviel zum Vorwort, schreiten wir nun zur Tat.

Zertifikatsverwaltung mit XCA einrichten

Die aktuelle Version von XCA herunterladen und entpacken (ZIP, portable) oder installieren (MSI). Für diesen Beitrag kommt “xca-portable-2.4.0.zip” zum Einsatz.

Im ersten Schritt muss XCA gestartet und mittels

Datei - Neue Datenbank

eine neue Datenbank erstellt werden. Beim Anlegen einer neuen Datenbank wird man nach einem Kennwort gefragt, dieses sollte sicher gewählt und die entsprechende Datenbank-Datei zudem sicher aufbewahrt werden!

Tipp: Sichere Kennwörter erstellen und deren Verwaltung kann mit KeePass realisiert werden.

Zertifizierungsstelle/CA erstellen

Die Zertifizierungsstelle (engl. certificate authority) ist für das Ausstellen der Zertifikate und für das Vertrauen in diese verantwortlich. Damit eine CA überhaupt Zertifikate ausstellen und sozusagen Unterschreiben kann, ist zunächst das CA-Zertifikat samt privaten Schlüssel notwendig.

Zertifikatvorlagen erstellen

Damit man beim Ausstellen der nachfolgenden Zertifikate nicht immer alles von vorne eingeben muss und damit die jeweiligen Zertifikate für den richtigen Zweck ausgestellt werden, ist das Einrichten der Vorlagen relevant.

  • Auf der Registerkarte “Vorlagen” die Schaltfläche “Neue Vorlage” anklicken” und “[default] CA” auswählen.
  • Die notwendigen Felder (siehe Screenshot) entsprechend angepasst ausfüllen, dabei das Feld “commonName” leer lassen.

  • Ggf. auf der Registerkarte “Erweiterungen” die Laufzeit anpassen.
    Tipp: An dieser Stelle den Haken bei “Mitternacht” setzen, das sieht i.d.R. besser aus und man kann die Ablaufzeiträume besser überschauen.

Die Schritte für “[default] tls-server” (für den OpenVPN-Server) und “[default] tls-client” (für die Roadwarrior) wiederholen. Auch bei diesen ggf. die Laufzeit (die Vorgabe ist ein Jahr) ändern.

Letztlich müssen drei Vorlagen vorhanden sein:

CA-Zertifikat erstellen

  • In XCA auf der Registerkarte “Zertifikate” die Schaltfläche “Neues Zertifikat” anklicken.
  • Auf der Registerkarte “Herkunft” unter “Vorlage für das neue Zertifikat” die zuvor erstelle CA-Vorlage auswählen und auf “Alles übernehmen” klicken.
  • Zur Registerkarte “Inhaber” wechseln und im Feld “Interner Name” und “commonName” z.B. OpenVPN-CA eintragen.
  • Auf “Erstelle einen neuen Schlüssel” sowie anschließend auf “Erstellen” klicken:

  • Abschließend noch auf “OK” klicken, somit ist die grundlegende CA erstellt.

Server-Zertifikat erstellen

  • Auf der Registerkarte “Zertifikate” die Schaltfläche “Neues Zertifikat” anklicken.
  • Auf der Registerkarte “Herkunft” bei “Verwende dieses Zertifikat zum Unterschreiben” das zuvor erstellte CA-Zertifikat auswählen und unter “Vorlage für das neue Zertifikat” die zuvor erstelle Server-Vorlage auswählen sowie auf “Alles übernehmen” klicken.

  • Zur Registerkarte “Inhaber” wechseln und im Feld “Interner Name” und “commonName” z.B. OpenVPN-Server eintragen.
  • Auf “Erstelle einen neuen Schlüssel” sowie anschließend auf “Erstellen” klicken.

Client-Zertifikat(e) erstellen

Für jede VPN-Benutzer muss ein Zertifikat ausgestellt werden, die Schritte entsprechen denen wie für den OpenVPN-Server mit den Unterschieden, das die Client-Vorlage und bei “Interner Namen” sowie “commonName” dann beispielsweise das Schema

OpenVPN-Benutzer

verwendet werden kann.

CRL/Zertifikatsperrliste erstellen und exportieren

Eine Zertifikatsperrliste (engl. certificate revocation list, CRL) wird dringend empfohlen, um etwaige abhanden gekommene Zertifikate widerrufen, also sozusagen sperren zu können. Als Beispiel kann ein verloren gegangenes Notebook oder Smartphone dienen, man möchte sicher nicht, das der Finder sich ggf. einfach so mit dem VPN verbinden kann.

  • In XCA zur Registerkarte “Sperrlisten” wechseln.
  • Auf “Neue Sperrliste” klicken.
  • Eine Gültigkeitsdauer festlegen (Die Vorgabe sind 30 Tage).
  • Sobald die Sperrliste erstellt wurde diese mit einem Klick auf “Export” als “crl.pem” exportieren.

Zertifikate exportieren

Damit die Zertifikate mit OpenVPN genutzt werden können, müssen diese im richtigen Format exportiert werden. Von der CA an sich wird nur das Zertifikat ohne den privaten Schlüssel benötigt! Vom Server als auch den Clients wird jeweils das Zertifikat mit Schlüssel exportiert.

  • Auf der Registerkarte “Zertifikate” das gewünschte Zertifikat auswählen und auf “Export” klicken.
  • Das CA-, Server- und die Client-Zertifikate im Format “PEM (*.crt)” als “ca.crt”, “server.crt” und “client.crt” exportieren.
  • Auf der Registerkarte “Private Schlüssel” nur die Schlüssel für das Server- und die Client-Zertifikate als “PEM privat (*.pem)” mit dem Dateinamen “server.key” und “client.key” exportieren.

Tipp: Klickt man ein Zertifikat oder den privaten Schlüssel mit der rechten Maustaste an, kann aus dem Untermenü “Export” beispielsweise dieses direkt in die Zwischenablage exportiert und von dort aus eine Datei, Notepad, usw. kopiert werden.

Weiteres

Es wird noch der Diffie Hellman (DH) Parameter benötigt:

  • Unter “Extra – DH Parameter erstellen” anklicken, als Wert “2048” eingeben und diese als “dh2048.pem” speichern.

Bemerkung: Sofern OpenVPN mit OpenSSL installiert wurde, kann der Parameter auch mit

openssl dhparam -out dh2048.pem 2048

erstellt werden.

OpenVPN-Server installieren und einrichten

Die aktuelle Ausgabe von OpenVPN (Community) herunterladen und angepasst, gemeint ist nach einem Klick auf “Customize” einschließlich “OpenVPN Service” installieren. Zu diesem Zeitpunkt ist das Version 2.5.5 vom 15. Dezember 2021.

Eine Eingabeaufforderung mit erhöhten Rechten öffnen und in den Ordner

C:\Program Files\OpenVPN\bin

wechseln. Als Vorbereitung für tls-auth folgenden Befehl ausführen:

openvpn --genkey tls-auth ta.key

Soweit sind nun alle Voraussetzungen erfüllt. Im nächsten Schritt geht es an die Konfiguration, als Basis dient das Beispiel unter

C:\Program Files\OpenVPN\sample-config\server.ovpn

Diese funktioniert nahezu Out-of-the-Box, allein schon mit den Zertifikaten kann man sich bereits anmelden. Es reicht also aus diese Datei in den Ordner

C:\Program Files\OpenVPN\config-auto

zu kopieren und den Dienst

OpenVPNService

neu starten. An gleicher Stelle müssen (vor dem Dienst-Neustart) die Dateien

ca.crt
server.crt
server.key
dh2048.pem
ta.key

kopiert bzw. eingefügt werden.

Folgende Änderungen in der Konfigurationsdatei gegenüber dem Original durchführen:

topology subnet
push "route 192.168.1.0 255.255.255.0" <- Hier muss das eigene Netz eingetragen werden
crl-verify crl.pem

Die folgenden Zeilen sind nur notwendig, wenn man Namensauflösung (DNS) via VPN verwenden möchte:

push "dhcp-option DNS 192.168.1.10"
push "dhcp-option DOMAIN domain.local"
;push "block-outside-dns" <- ggf. "Einkommentieren", wenn während der VPN-Verbindung auf dem Client keine anderen DNS-Server abgefragt werden sollen

Um ein Plus an Sicherheit zu bekommen, sollte zusätzlich noch eine Anmeldung mittels Benutzername samt Kennwort implementiert werden. Die notwendigen Änderungen sehen wie folgt aus:

auth-user-pass-verify "C:\\Program Files\\OpenVPN\\config-auto\\auth.bat" via-env
script-security 3

Der Inhalt der “auth.bat” ist der folgende:

@echo off

set auth=%username% %password%
find "%auth%" "C:\Program Files\OpenVPN\config-auto\users.txt"
if %errorlevel%==1 exit 1
echo exit 0

Der Inhalt der “users.txt” muss wie folgt aufgebaut sein:

<Benutzername> <Kennwort>

Ein Beispiel:

andy MeinSuperGeheimesKennwort
andreas DasIstMeinPasswort
martin MeineStimmeIstMeinPass

Kurze Erklärung zum “auth”-Skript:

Zuerst werden der Benutzername und das Kennwort in eine Variable geschrieben,
dann wird die Variable in der “users.txt” gesucht,
wird keine Übereinstimmung gefunden, ist der Rückgabewert “1” und damit ist die Anmeldung gescheitert,
andernfalls ist der Rückgabewert “0” und die Anmeldung war erfolgreich.

Persönliche Bemerkung: Dieses Skript sollte gegenüber der Variante aus dem ersten Beitrag einfacher für alle zu verstehen sein.

Hinweis: Immer wenn man Änderungen an der Konfiguration vorgenommen hat, muss der Dienst neu gestartet werden.

Routing

Damit man nicht nur den OpenVPN-Server erreichen kann, muss das Routing in Windows aktiviert werden und entweder im Router oder auf allen zu erreichenden Geräten eine Route bekannt gemacht werden.

In einer Eingabeaufforderung mit erhöhten Rechten auf dem Windows-System, auf dem der OpenVPN-Server installiert ist, Routing für die Schnittstellen aktivieren, die am LAN und VPN beteiligt sind:

netsh interface ipv4 set int "LAN-Verbindung" forwarding=enabled
netsh interface ipv4 set int "OpenVPN TAP-Windows6" forwarding=enabled

Tipp: Die richtigen Schnittstellen-Bezeichnungen können wie folgt ermittelt werden:

netsh interface ipv4 show interfaces

Am Beispiel einer AVM FRITZ!Box 7490 kann eine Route für das VPN wie folgt konfiguriert werden:

  • Im Web-Interface der FRITZ!Box zu “Heimnetzwerk – Netzwerk – Netzwerkeinstellungen” wechseln. Ggf. muss die “Erweiterte Ansicht” aktiviert werden.
  • Bei “LAN-Einstellungen” auf “Erweiterte Einstellungen” klicken.
  • Bei “Statische Routingtabelle” auf “IPv4 Routen” klicken.
  • Auf “Neue IPv4 Route” klicken und wie folgt ausfüllen:
    IPv4-Netzwerk: 10.8.0.0
    Subnetzmaske: 255.255.255.0
    Gateway: 192.168.1.10
  • Den Haken setzen bei “IPv4 Route aktiv”.
  • Auf “OK” und “Übernehmen” klicken.

Alternativ kann bzw. muss man auf jedem zu erreichenden Gerät so eine Route gesetzt werden:

route add <VPN-NETZWERK> mask <SUBNETZMASKE> <OPENVPNSERVER> -p

Ein Beispiel:

route add 10.8.0.0 mask 255.255.255.0 192.168.1.10 -p

Firewall

In der Windows-Firewall und sofern ein VPN-Zugriff aus dem Internet erfolgen soll muss jeweils der konfigurierte Port, per Standard ist dies 1194/udp, freigegeben werden.

Kleiner Tipp am Rande: Wer den VPN-Zugriff aus dem Internet einschränken möchte, aber als Router nur eine AVM FRITZ!Box o.ä. einfaches hat, kann in der entsprechenden Regel der Windows-Firewall die Quelle auf bestimmte IP-Adressen begrenzen:

Auf die Frage was mit der Netzwerkkategorie ist, kann dahingehend sozusagen Entwarnung gegeben werden, wenn man DNS in der *.ovpn konfiguriert hat, denn dann erhält die Netzwerkschnittstelle des OpenVPN-Servers ein Präfix. Im Windows-Domänennetzwerk wird so automatisch als Netzwerkkategorie “Domänennetzwerk” für die OpenVPN-Netzwerkkarte festgelegt.

Troubleshooting

Keine Installation ohne Überraschungen möchte man meinen. Während der erste Beitrag zu diesem Thema unter Windows einfach so lief, musste diesmal erst noch eine kleine Änderung vorgenommen werden. Damit der OpenVPN-tun/tap-Netzwerk-Adapter des OpenVPN-Servers vom Dienst eine IP-Adresse erhalten kann, muss ggf. folgender Befehl ausgeführt werden:

netsh interface ipv4 set global dhcpmediasense=enabled

Anschließend den OpenVPN-Server-Dienst neu starten.

OpenVPN-Client

Auf dem Client reicht es aus, OpenVPN mit den Standard-Vorgaben zu installieren und anschließen die Datei

C:\Program Files\OpenVPN\sample-config\client.ovpn

entweder nach

C:\Program Files\OpenVPN\config

oder nach

C:\Users\%username%\OpenVPN\config

zu kopieren. Ans gleiche Ziel müssen zusätzlich noch folgende Dateien kopiert werden:

ca.crt
client.crt
client.key
ta.pem

Anschließend editiert man die “client.ovpn” und ändert folgendes ab:

remote <IP oder FQDN des OpenVPN-Servers> 1194
auth-user-pass

Startet man nun aus der OpenVPN-GUI heraus die Verbindung wird nach dem Benutzernamen und Kennwort gefragt und die Verbindung wird aufgebaut.

Persönliche Bemerkung

Es ist schön zu sehen, das man OpenVPN auch unter Windows als Server zum Laufen bekommt und das XCA nach der ersten Erwähnung in diesem Blog im Jahre 2010 (!) immer noch existiert und weiterentwickelt wird. Nichts destotrotz kann der OpenVPN-Server unter Linux oder BSD besser abgesichert werden, siehe

Hardening OpenVPN Security

Wenn man allerdings keine andere Option hat, als einen OpenVPN-Server unter Windows zu betreiben, ist das ein durchaus gangbarer Weg.

Quellen

Andy’s Blog – Application VPN mit Stunnel und XCA

OpenVPN – Support Forum – Server 2012 TAP adapter problem acquiring IP

Microsoft – Docs – So deaktivieren Sie die Funktion “Medienübertragung” für TCP/IP in Windows

OpenVPN- Revoking Certificates


Viewing all articles
Browse latest Browse all 2173