Einrichten eines VPN-Servers auf einem Synology-NAS mit TLS und User-Cert
Zertifikate und Schlüssel
Für den VPN Server benötigen wir eine CA-Zertifikat, ein Server-Zertifikat mit Schlüssel und die Benutzerzertifikate mit Schlüssel.
Weiterhin benötigen wir eine Date mit den Diffie-Hellman-Parametern und einen TLS-Authentifizierungsschlüssel
CA-Zertifikat | ca.crt |
---|---|
Server-Zertifikat | server.crt |
Server-Zertifikatsschlüssel | server.key |
Benutzer-Zertifikat | username.crt |
Benutzer-Zertifikatsschlüssel | username.key |
Diffie-Hellman-Parameter | df2048.pem |
TLS-Authentifiezierungs-Schlüssel | ta.key |
Die Zertifikate und ihre zugehörigen Schlüssel, sowie die Diffie-Hellman-Parameter lassen sich recht bequem mit dem Programm XCA (https://hohnstaedt.de/xca/) generieren und verwalten.
Dazu starten wir das Programm XCA und legen eine Datenbank für unser Projekt an:
Anlegen einer neuen Datenbank:
Nach den Angeben zum Dateinamen und Speicherort muss ein Passwort für die Datenbank eingegeben, werden, da die Informationen verschlüsselt gespeichert werden:
CA-Zertifikat
Jetzt kann mit dem Erzeugen der Schlüssel und Zertifikate begonnen werden. Dazu klicken wir auf den Karteikartenreiter Zertifikate und dort auf die Schaltfläche Neues Zertifikat
:
Daraufhin öffnet sich ein Fenster, in welchem der Zertifikatstyp ausgewählt werden muss. Hier wählen wir [default] CA aus und klicken auf alles übernehmen
.
Anschließend klicken wir auf den Karteikartenreite Inhaber, füllen dort die notwendigen Felder aus und erstellen einen Schlüssel durch Klicken auf die Schaltfläche Erstelle einen neuen Schlüssel
.
Daraufhin öffnet sich eine Dialogbox, in der wir den Namen, den Schlüsseltyp und die Schlüssellänge bestätigen können. Durch Klicken auf die Schaltfläche Erstellen
wird der Schlüssel generiert.
Die Erstellung des Schlüssels wird daraufhin quittiert:
Jetzt ist das Zertifikat an der Reihe. Hierzu wechseln wir auf den Karteikartenreite Erweiterungen. Dort stellen wir die Gültigkeitsdauer des Zertifikates ein, in unserem -Beispiel 11 Jahre. Hier unbedingt daran denken, auf die Schaltfläche übernehmen
zu Klicken, nachdem der Zeitraum eingestellt ist.
Unter Schlüsselverwendung und Netscape können die Einstellungen, die durch die Auswahl des Templates [default]CA vorbelegt wurden, überprüft und im Bedarfsfalle angepasst werden:
Durch Klicken auf die Schaltfläche OK
wird das Zertifikat erzeugt:
Die Erstellung des Zertifikats wird uns auch wieder quittiert:
In der Oberfläche von XCA wird nun das soeben erzeugte CA-Zertifikat angezeigt. Mit diesem CA (Certificate Authority) - Zertifikat können wir nun unser Server-Zertifikat und unsere Benutzer-Zertifikate signieren.
Server-Zertifikat
Das Erstellen des Server-Zertifikats und der User-Zertifikate funktioniert annähernd auf die gleiche Weise. Dabei wird hier das CA-Zertifikat zur Signierung herangezogen und als Zertifikatsvorlage nicht [default]CA sondern [default]TLS_Server, respektive [default]TLS_Client verwendet.
Hierfür markieren wir das bereits erzeugte CA-Zertifikat und Klicken auf die Schaltfläche Neues Zertifikat
.
Daraufhin öffnet sich wieder der Dialog zum Erstellen eines Zertifikates. Diesmal wähle wir als Zertifikatstyp [default]TLS_Server aus und Klicken wieder die Schaltfläche alles übernehmen
:
Anschließend wechseln wir auch hier wieder auf die Karteikarte Inhaber und füllen dort wieder die bereits bekannten Felder aus. Anschließend erzeugen wir den Schlüssel durch Klicken auf die Schaltfläche Erstelle einen neuen Schlüssel
:
Auch hier können wir die weiteren Angaben zum Schlüssel wieder bestätigen:
Die Generierung des Schlüssels wird uns natürlich wieder quittiert:
Wie bereits oben wechseln wir nun wieder auf die Karteikarte Erweiterungen und legen hier die Laufzeit des Zertifikats fest. Auch diesmal daran, denken, dass nach Eintrag der Laufzeit unbedingt die Schaltfläche übernehmen anzuklicken ist, sonst wird die eingestellte Laufzeit nicht übernommen:
Und auch hier können wir unter Schlüsselverwendung und Netscape die vorbelegten Einstellungen überprüfen und eventuell anpassen. Abschließend Klicken wir auf die Schaltfläche OK
und das Zertifikat wird erzeugt.
Das Erzeugte Server-Zertifikat wird uns im Zertifikatsbaum nun unterhalb des CA-Zertifikats angezeigt, da es von diesem signiert wurde:
User-Zertifikat
Das Erstellen des Server-Zertifikats und der User-Zertifikate funktioniert annähernd auf die gleiche Weise. Dabei wird hier das CA-Zertifikat zur Signierung herangezogen und als Zertifikatsvorlage nicht [default]CA sondern [default]TLS_Clientverwendet.
Hierfür markieren wir das bereits erzeugte CA-Zertifikat und Klicken auf die Schaltfläche Neues Zertifikat
.
Daraufhin öffnet sich wieder der Dialog zum Erstellen eines Zertifikates. Diesmal wählen wir als Zertifikatstyp [default]TLS_Client aus und Klicken wieder die Schaltfläche alles übernehmen
:
Anschließend wechseln wir auch hier wieder auf die Karteikarte Inhaber und füllen dort wieder die bereits bekannten Felder aus. Anschließend erzeugen wir den Schlüssel durch Klicken auf die Schaltfläche Erstelle einen neuen Schlüssel
:
Auch hier können wir die weiteren Angaben zum Schlüssel wieder bestätigen:
Die Generierung des Schlüssels wird uns natürlich wieder quittiert:
Wie bereits oben wechseln wir nun wieder auf die Karteikarte Erweiterungen und legen hier die Laufzeit des Zertifikats fest. Auch diesmal daran, denken, dass nach Eintrag der Laufzeit unbedingt die Schaltfläche übernehmen anzuklicken ist, sonst wird die eingestellte Laufzeit nicht übernommen:
Und auch hier können wir unter Schlüsselverwendung und Netscape die vorbelegten Einstellungen überprüfen und eventuell anpassen. Abschließend Klicken wir auf die Schaltfläche OK
und das Zertifikat wird erzeugt.
Das Erzeugte Server-Zertifikat wird uns im Zertifikatsbaum nun unterhalb des CA-Zertifikats angezeigt, da es von diesem signiert wurde:
Die Erstellung des Zertifikats wird uns auch wieder quittiert:
Das Erzeugte User-Zertifikat wird uns im Zertifikatsbaum nun unterhalb des CA-Zertifikats angezeigt, da es von diesem signiert wurde:
Diffie-Hellman-Parameter
Zum Erzeugen der Diffie-Hellman-Parameter-Datei klicken wir auf das Menü Extra und wählen dort den Untermenüpunkt DH Parameter erstellen aus:
Anschließend können wir die Bits für die DH Parameter angeben:
Die Erzeugung der Diffie Hellman Parameter kann eine kleine Weile dauern. Anschließend können wir angeben, wo diese Datei gespeichert werden soll:
Abschließend bekommen wir die Bestätigung, dass die DH-Parameter gespeichert wurden:
Exportieren der Zertifikate und Schlüssel
Zertifikate und Schlüssel für den Server exportieren
Auf dem Synology NAS benötigen wir die folgenden Zertifikate:
- ca.crt
- server.crt
Um diese zu exportieren, öffnen wir wieder die XCA-Software mit der entsprechenden Datenbank und wechseln auf den Karteikartenreiter Zertifikate. Um ein Zertifikate zu exportieren müssen wir dieses markieren und anschließend auf die Schaltfläche Export
klicken:
Nun bestimmen wir wo und in welchem Format wir das Zertifikat speichern wollen:
Exakt das Gleiche machen wir mit dem Server-Zertifikat:
Um den zum Server-Zertifikat gehörigen Schlüssel zu exportieren, wechseln wir auf die Karteikarte Private Schlüssel, markieren hier den Eintrag Server und klicken auch hier wieder auf die Schaltfläche Export
Beim Dateinamen des zu speichernden Schlüssels, wählen wir anstatt der Erweiterung .pem die Erweiterung .key
Dies macht deutlich, dass es sich bei der Datei um einen Schlüssel handelt und beugt späteren Konfigurationsfehlern vor:
Zertifikate und Schlüssel für den Client exportieren
Für eine VPN-Client-Konfiguration brauchen wir folgende Zertifikate:
- ca.crt
- user.crt
Da wir das CA-Zertifikat bereits exportiert haben, müssen wir noch das User-Zertifikat exportieren. Jeder User benötigt sein eigenes Zertifikat. Da wir nur einen User angelegt haben, müssen wir auch nur den einen exportieren. Dazu öffnen wir wieder die XCA-Software mit der entsprechenden Datenbank und wechseln auf den Karteikartenreiter Zertifikate. Um das User-Zertifikat zu exportieren, müssen wir dieses markieren und anschließend auf die Schaltfläche Export
klicken. Also dasselbe Verfahren wie beim Server-Zertifikat (siehe oben).
Um den zum User-Zertifikat gehörigen Schlüssel zu exportieren, wechseln wir auf die Karteikarte Private Schlüssel, markieren hier den Eintrag User und klicken auch hier wieder auf die Schaltfläche Export
und verfahren nach dem gleiche Prozedere wie beim Export des Server-Schlüssels (siehe oben).
Transferieren der Zertifikate auf das NAS
Von den bisher erzeugten Dateien, benötigen wir die folgenden Dateien auf dem NAS für die Konfiguration des VPN-Servers:
- ca.crt
- server.crt
- server.key
- dh2048.pem
Diese Dateien kopieren wir mit winscp als User Admin auf das NAS in das Verzeichnis /tmp/VPN
.
Einrichtung des Synology VPN-Servers
Auf dem Synology-NAS muss über das Paket-Zentrum der VPN-Server installiert sein:
Hier machen wir erst einmal die Grundeinstellung in dem wir den Server öffnen und dann die OpenVPN-Parameter verwalten:
Hier setzen wir folgende Parameter. Die Wahl des Netzes ist natürlich frei den vorhandenen Gegebenheiten anpassbar:
Wenn wir diese Einstellungen gemacht haben, stoppen wir den VPN-Server wieder:
Jetzt sind alle Voraussetzungen geschaffen, um die manuellen Konfigurationsanpassungen auf dem Synology NAS durchzuführen.
Manuelle Konfigurationsanpassung
Hiermit verbinden wir uns auf das NAS als User admin entweder per Putty oder per ssh. In unserem Beispiel hat das NAS die IP-Adresse 172.22.0.10
ssh admin@172.22.0.10 |
Als erstes machen wir uns zum User root, um alle Konfigurationen lesen und schreiben zu können:
sudo su - |
Danach wechseln wir in das Konfigurationsverzeichnis des VPN-Servers:
cd /usr/syno/etc/packages/VPNCenter/openvpn/ |
Über das Kommando ll
geben wir uns den Inhalt des Verzeichnisses aus und erhalten folgendes Ergebnis:
drwxr-xr-x 3 root root 4096 Apr 8 19:57 .
drwxr-xr-x 7 root root 4096 Apr 8 20:28 ..
drwxr-xr-x 2 root root 4096 Apr 8 17:53 keys
-rw-r--r-- 1 root root 953 Apr 8 19:57 openvpn.conf
-rw-r--r-- 1 root root 10441 Apr 1 19:01 openvpn.conf.user.sampleIn dem Verzeichnis
key
befinden sich die aktuellen Zertifikate und Schlüssel. Die eigentliche Konfigurationsdatei des OpenVPN-Servers befindet sich in der Dateiopenvpn.conf
.
Die Datei openvpn.con.user.sample
enthält eine Beispielkonfigurationsdatei mit allen möglichen Einträgen und deren Erklärung.
Wir wollen nun unsere Zertifikate und Schlüssel verwenden und benennen deswegen das Verzeichnis keys
um…
mv key keys.org |
…und erstellen anschließend ein neues Verzeichnis
mkdir keys |
In dieses Verzeichnis wechseln wir nun hinein,…
cd keys |
…um die von uns erzeugten und unter /tmp/VPN
abgelegten Zertifikate in das Verzeichnis zu holen:
mv /tmp/VPN/* . |
Anschließend löschen wir das nicht mehr benötigte Temporärverzeichnis:
rmdir /tmp/VPN |
Zeigen wir uns nun den Inhalt unseres Verzeichnisses mit ll
an, sollte es in etwas so aussehen:
drwxr-xr-x 2 root root 4096 Apr 12 13:41 .
drwxr-xr-x 4 root root 4096 Apr 12 13:40 ..
-rw-r--r-- 1 admin users 1497 Apr 12 13:41 ca.crt
-rw-r--r-- 1 admin users 424 Apr 12 13:41 dh2048.pem
-rw-r--r-- 1 admin users 1554 Apr 12 13:41 server.crt
-rw-r--r-- 1 admin users 1679 Apr 12 13:41 server.keyWir können sehen, dass die Dateien alle noch dem Benutzer admin und der Gruppe users gehören. Das wollen wir jetzt mit dem folgenden Kommando ändern:
chown root.root * |
Danach sollte eine Auflistung des Verzeichnis mit ll
das folgende Ergebnis bringen:
drwxr-xr-x 2 root root 4096 Apr 12 13:41 .
drwxr-xr-x 4 root root 4096 Apr 12 13:40 ..
-rw-r--r-- 1 root root 1497 Apr 12 13:41 ca.crt
-rw-r--r-- 1 root root 424 Apr 12 13:41 dh2048.pem
-rw-r--r-- 1 root root 1554 Apr 12 13:41 server.crt
-rw-r--r-- 1 root root 1679 Apr 12 13:41 server.keyNun ändern wir noch die Rechte des Serverschlüssels (server.key), damit dieser nur von root gelesen werden kann:
chmod 600 server.key |
Jetzt sollte eine Auflistung des Verzeichnis mit ll
das folgende Ergebnis bringen:
drwxr-xr-x 2 root root 4096 Apr 12 13:41 .
drwxr-xr-x 4 root root 4096 Apr 12 13:40 ..
-rw-r--r-- 1 root root 1497 Apr 12 13:41 ca.crt
-rw-r--r-- 1 root root 424 Apr 12 13:41 dh2048.pem
-rw-r--r-- 1 root root 1554 Apr 12 13:41 server.crt
-rw------- 1 root root 1679 Apr 12 13:41 server.key
TLS Authentifizierungsschlüssel
Für die TLS-Verbindung zwischen Client und Server wird noch ein TLS-Authentifizierungsschlüssel (ta.key) benötigt, den wir jetzt hier direkt auf der Kommandozeile des NAS erzeugen werden.
Wir befinden uns immer noch im Verzeichnis /usr/syno/etc/packages/VPNCenter/openvpn/
Mit dem folgenden Befehl erzeugen wir die Datei ta.key
:
openvpn --genkey --secret ta.key |
Jetzt sollte eine Auflistung des Verzeichnis mit ll
das folgende Ergebnis bringen:
drwxr-xr-x 2 root root 4096 Apr 12 13:41 .
drwxr-xr-x 4 root root 4096 Apr 12 13:40 ..
-rw-r--r-- 1 root root 1497 Apr 12 13:41 ca.crt
-rw-r--r-- 1 root root 424 Apr 12 13:41 dh2048.pem
-rw-r--r-- 1 root root 1554 Apr 12 13:41 server.crt
-rw------- 1 root root 1679 Apr 12 13:41 server.key
-rw------- 1 root root 636 Apr 12 13:42 ta.keyDamit haben wir alle Zertifikats- und Schlüsseldateien für den Betrieb des OpenVPN-Server beisammen und begeben uns wieder ein Verzeichnis höher:
cd .. |
openvpn.conf
Wir editieren hier die Datei openvpn.conf und sorgen dafür, dass sie das folgende Aussehen erhält:
vi openvpn.conf |
push "route 172.22.0.0 255.255.254.0" # Unser Netz |
openvpn.conf.user
Wir editieren hier die Datei openvpn.conf.user
und sorgen dafür, dass sie das folgende Aussehen erhält:
vi openvpn.conf.user |
log /var/log/openvpn.log |
Nun ist der OpenVPN-Server fertig konfiguriert und kann wieder gestartet werden:
Client-Konfiguration
Für eine Client-Konfiguration sind gewisse Konfigurationsparameter für OpenVPN selbst notwendig, aber auch gewisse Zertifikate und Schlüssel:
- ca.crt
- user.crt
- user.key
- ta.key
Einem Benutzer eine Konfiguration zu übergeben wird natürlich erschwert, wenn eine solche Konfiguration aus 5 Dateien besteht. Schöner wäre es, wenn hier nur eine Datei zu übergeben wäre.
Dies können wir erreichen wenn wir die Zertifikats- und Schlüsseldateien inline in die Konfigurationsdateien mit einbetten. Schematisch sieht dass dann so aus:
ovpnparameter1 |
Für unseren User, sähe dann die komplette Konfigurationsdatei user.ovpn
so aus:
remote <ip-adresse oder fqdn VPN-Server> 1194 udp |
Diese kann Direkt in ein OpenVPN-fähiges Client-Programm importiert werden. Der Client kann nun direkt mit dem VPN-Server eine Verbindung aufbauen. Der Benutzer muss sich noch mit Benutzernamen und Passwort authentifizieren und wenn dieser Benutzername auch mit dem Benutzernamen im Zertifikat übereinstimmt, so kommt die VPN-Verbindung zustande.