Aufbauen einer OpenVPN-Verbindung zwischen der Endian und Client-PCs.
Hier am Beispiel eines Windows-Clients.
Unter Linux geht man aehnlich vor (Scripts sind anders). Da liegen die Config-Dateien einfach unter /etc/openvpn/ und enden mit .conf
Alternativ kann man auch den network-manager nutzen, der inzwischen bei praktisch jedem Desktopenvironment mitgeliefert wird. Leider laesst dieser aber keine pkc12-Zertifikate verwenden, sodass man die p12-Dateien erst extrahieren muss.
Vielleicht schreib ich dazu dann auch mal ein Howto oder (noch besser) die Leuts von network-manager implementieren es in Zukunft
1. Installation OpenVPN:
====================
Download und Installation OpenVPN. Am besten nehmt Ihr die aktuellste Version. Diese verhaelt sich bei mir sehr stabil (openvpn-2.1_rc15-install.exe). Zudem hat sie den Vorteil, dass das Programm OpenVPN-GUI mitgeliefert wird, welches eine einfache Verwaltung der Verbindungen erlaubt.
2. Verwendung von Easy-RSA:
=========================
easy-rsa hilft uns mit wenigen Befehlen Zertifikate auszustellen, damit die Befehle nicht jedes Mal haendisch eingetippt werden muessen:
Ins easy-rsa-Verzeichnis wechseln %programfiles%\OpenVPN\easy-rsa. Dort musst man ein paar Anpassungen machen:
openssl.cnf.sample:
Folgendes hinzufuegen, da sonst kein nsCert erstellt wird, was Endian aber voraussetzt.
Wir schreiben dies in die Datei openssl.cnf.sample, da diese bei jedem Ausfuehren von init-config.bat (weiter unten) zu openssl.cnf kopiert wird.
[ client ]
basicConstraints=CA:FALSE
nsCertType = client
nsComment = "OpenSSL Generated Client Certificate"
3. Scripts zum Generieren des Server- und der Client-Zertifikaten erstellen:
================================================================
Die beiden Scripts werden erstellt, damit man in kurzer Zeit Zertifikate ausstellen kann. Diese einfach ins easy-rsa-Verzeichnis kopieren.
build-key-server-pkcs12.bat wird verwendet um das serverseitige Zertifikat zu erstellen.
Mit build-key-client-pkcs12.bat werden die Client-Zertifikate erstellt, die dann an die Leute weitergegeben werden.
build-key-server-pkcs12.bat erstellen
@echo off
cd %HOME%
rem build a request for a cert that will be valid for ten years
openssl req -days 3650 -nodes -new -keyout %KEY_DIR%\%1.key -out %KEY_DIR%\%1.csr -config %KEY_CONFIG%
rem sign the cert request with our ca, creating a cert/key pair
openssl ca -days 3650 -out %KEY_DIR%\%1.crt -in %KEY_DIR%\%1.csr -extensions server -config %KEY_CONFIG%
rem delete any .old files created in this process, to avoid future file creation errors
del /q %KEY_DIR%\*.old
openssl pkcs12 -export -inkey %KEY_DIR%\%1.key -in %KEY_DIR%\%1.crt -certfile %KEY_DIR%\ca.crt -out %KEY_DIR%\%1.p12
rem delete any .old files created in this process, to avoid future file creation errors
del /q %KEY_DIR%\*.old
Alles anzeigen
build-key-client-pkcs12.bat erstellen
@echo off
cd %HOME%
rem build a request for a cert that will be valid for ten years
openssl req -days 3650 -nodes -new -keyout %KEY_DIR%\%1.key -out %KEY_DIR%\%1.csr -config %KEY_CONFIG%
rem sign the cert request with our ca, creating a cert/key pair
openssl ca -extensions client -days 3650 -out %KEY_DIR%\%1.crt -in %KEY_DIR%\%1.csr -config %KEY_CONFIG%
rem convert the key/cert and embed the ca cert into a pkcs12 file.
openssl pkcs12 -export -inkey %KEY_DIR%\%1.key -in %KEY_DIR%\%1.crt -certfile %KEY_DIR%\ca.crt -out %KEY_DIR%\%1.p12
rem delete any .old files created in this process, to avoid future file creation errors
del /q %KEY_DIR%\*.old
4. Generieren der Keys:
====================
WICHTIG: Jeder PC muss ein eigenes, inviduelles Client-Zertifikat haben, da sich die Verbindungen ansonsten gegenseitig konkurrieren. Zudem sieht man dann in der Endian eine schoene Uebersicht, wer gerade und wie lange schon verbunden ist.
Ich verwende fuer das Server-Zertifikat meist endian.$subdomain.$domain.$tld und fuer den Client $domain-client01, $domain-client02...
Dies vereinfacht dann die Zuordnung der Dateien ungemein. Aber natuerlich kann man auch einfachere Namen nehmen.
Im Beispiel habe ich aus Gruenden der Vereinfachung einfach "endian" und "client01" genommen.
- cmd-Fenster öffnen und ins easy-rsa wechseln
- init-config.bat ausfuehren
- vars.bat in Texteditor anpassen (KEY_COUNTRY, KEY_PROVINCE, KEY_CITY, KEY_ORG und KEY_EMAIL)
- vars.bat ausfuehren
- clean-all.bat ausfuehren
- build-ca.bat ausfuehren # alles mit Enter bestaetigen
- build-dh.bat ausfuehren # alles mit Enter bestaetigen
- build-key-server-plcs12.bat endian # alles mit Enter/y aber "Common Name" muss im Dialog ausgefuellt werden (z.B. mit endian)
- build-key-client-pkcs12.bat client01 # alles mit Enter/y aber "Common Name" muss im Dialog ausgefüllt werden (z.B. mit client01)
5. Import des Serverzertifikates in die Endian Firewall:
===============================================
- Weblogin auf die Endian-Firewall
- VPN => OpenVPN Server => Erweitert
- "Authentifzierungs Einstellungen" auf "X.509 Zertifikat" umstellen
- Erstelltes endian.p12 Zertifikat auf die Endian laden (Serverzertifikat von einer externen Zertifikatsauthorität (CA) importieren)
6. Client-Config erstellen:
======================
Dann gehts auf den Client wo wir die Client-Config erstellen: Diese legen wir im Config-Verzeichnis ab (%programfiles%\OpenVPN\config)
client
dev tap
proto udp
remote (IP oder Hostname wo die Endian ueber das Internet erreichbar ist)
resolv-retry infinite
nobind
persist-key
persist-tun
pkcs12 client01.p12
verb 3
comp-lzo
ns-cert-type server
Alles anzeigen
7. Handhabung:
==============
Mit dem mitgelieferten Programm OpenVPN-GUI kann man die Verbindung on Demand mit einfachem Mausklick im Infobereich der Taskleiste bei Bedarf starten und beenden.
Wer eine permanente OpenVPN-Verbindung (bei jedem PC-Start wird die OpenVPN-Verbindung automatisch gestartet) erreichen will, kann den Starttyp von OpenVPN in den Diensten von Windows auch auf "Automatisch" stellen.
Nun werden alle .ovpn-Verbindungen im %programfiles%\OpenVPN\config Verzeichnis ausgefuehrt. Wichtig ist, dass die .ovpn-Dateien (Konfiguration) direkt im Ordner %programfiles%\OpenVPN\config liegen.
Die Keys (in diesem Falle pkc12 Schluessel, die auf .p12 enden) koennen aber auch in einem Unterverzeichnis abgelegt werden. Wichtig ist dann einfach, dass der Ordnerpfad in der Config escaped wird.
z.B. pkcs12 heimnetz\\client01.p12
Pro OpenVPN-Verbindung muss ein TAP-Device vorhanden sein. Standardmaessig wird ein einzelnes Device erstellt. Moechte man mehrere OpenVPN-Verbindungen parallel nutzen, so muss man weitere Devices erstellen.
Dies funktioniert sehr einfach ueber das mitgelieferte Script (%programfiles%\OpenVPN\bin\addtap.bat)
Vielleicht kann noch jemand Scripts zum Erstellen unter Linux anbieten.
p.s. vielen Dank an moppel, der mir beim Erstellen der Zertifikate geholfen hat.