Einfache OpenVPN Einrichtung
Ziel ist es via VPN untereinander auf verschiedene unverschlüsselte Dienste (FTP, NFS) zugreifen zu können.
Die ursprünglichen Netzwerkeinstellungen sollen davon nicht betroffen werden. Erweiterte Dienste, wie die automatische Netzwerkkonfiguration via DHCP wird im ersten Schritt nicht berücksichtigt, folgende Schritte sind eher als quick & dirty zu verstehen!
OpenVPN installieren
Die Installation von OpenVPN ist unter verschiedenen Betriebssystemen möglich und recht unspektakulär. Im folgenden Beispiel soll ein dedizierter Server mit fester IP, der bei einem Hoster gemietet wurde, ein zweiter dedizierter Rechner sowie zwei Arbeitsplatzrechner und ein Notebook über VPN verbunden werden.
Damit überhaupt verschlüsselter Datenverkehr möglich ist, werden für alle beteiligten Rechner Zertifikate, die mit OpenSSL erstellt werden, benötigt.
Zertifikate mit OpenSSL
Die Zertifikate können prinzipiell in einem beliebigen Verzeichnis erstellt werden. Standardverzeichnisse können sein:
- /usr/local/ssl
- /usr/local/etc/ssl
- /usr/share/ssl
- /etc/ssl
Da die Zertifikate fürs VPN benutzt werden sollen, dient für dieses Beispiel das Verzeichnis /usr/local/etc/openvpn/certs
Erzeugen eines Schlüsselpaars für die eigene Certificate Authority (CA)
openssl genrsa -aes256 -out vpn-cakey.pem 2048
Der Schlüssel besitzt mit 2048 Bit eine sinnvolle Verschlüsselung. Für eine stärkere können die Werte 4096 oder 8192 verwendet werden. Für den normalen Einsatz sollte sogar ein 1024 Bit Schlüssel ausreichen. Das Passwort sollte möglichst sicher sein. Es wird dazu benötigt, die späteren Zertifikate für die Clients zu signieren. Nach Ausführung sollte ein ähnlicher Output wie folgt zu sehen sein:
Generating RSA private key, 2048 bit long modulus ...............................................................+++ ...........................+++ e is 65537 (0x10001) Enter pass phrase for vpn-cakey.pem: Verifying - Enter pass phrase for vpn-cakey.pem:
Es sollten sofort die öffentlichen Rechte entzogen werden:
chmod 0600 vpn-ca.pem
Zu dem privaten Schlüssel wird nun der öffentliche Schlüssel erzeugt:
openssl req -new -x509 -days 3650 -key vpn-cakey.pem -out vpn-ca.pem -set_serial 1
Hier werden nun die üblichen Abfragen zur Herkunft des Schlüssel-Erstellers gestellt.
Zum Schluss werden zwei Dateien erstellt, die für interne Zwecke nötig sind. Mit ihnen wird gewährleistet, dass kein Schlüssel doppelt vergeben wird:
touch index.txt echo "01" > serial
Schlüsselpaar für den VPN-Server
openssl req -new -newkey rsa:1024 -out servercsr.pem -nodes -keyout serverkey.pem -days 3650
Das Zertifikat soll 10 Jahre (3650 Tage) gültig sein. Bei der Erstellung werden erneut die Herkunftsdaten abgefragt. An der Stelle Common Name (eg, YOUR name) sollte der volle Hostname des Servers eingetragen werden. Dieser wird später in jeder Client-Konfiguration benötigt. Soll der VPN-Dienst später automatisch starten, so darf an dieser Stelle keine Passwort-Phrase eingegeben werden. Beide Schritte einfach mit
Es wird ein privater Schlüssel (serverkey.pem) und ein Certificate Signing Request (servercsr.pem) für die Anforderung eines Zertifikats erstellt. Das endgültige Zertifikat erhält man mit der unter Schritt 1 erstellten Certificate Authority, dessen Kennwort selbstverständlich benötigt wird:
openssl x509 -req -in servercsr.pem -out servercert.pem -CA vpn-ca.pem -CAkey vpn-cakey.pem -CAserial serial -days 3650
Für jeden Client ein eigenes Zertifikat
Analog zum Server muss für jeden Client - selbstverständlich unter einem anderen Namen - ein eigenes Zertifikat erzeugt werden:
name=client1 openssl req -new -newkey rsa:1024 -out $name\_csr.pem -nodes -keyout $name\_key.pem -days 3650 openssl x509 -req -in $name\_csr.pem -out $name\_cert.pem -CA vpn-ca.pem -CAkey vpn-cakey.pem -CAserial serial -days 3650
Auch hier gilt: Soll der VPN-Dienst später automatisch gestartet werden, so dürfen keine Passwörter eingegeben werden.
Diffie-Hellmann Parameter erzeugen
Als letzter Schritt werden die Diffie-Hellmann Parameter erzeugt:
openssl dhparam -out dh1024.pem 1024
OpenVPN-Server
Ob eine Rechner als Server oder Client fungiert, ist nur von der Konfiguration abhängig. Für den Server ist mindestens folgende Konfiguration notwendig, die im Standard-VPN Verzeichnis (von der Distribution abhängig, im Beispiel ist dies die Datei /usr/local/etc/openvpn/server.conf) stehen sollte:
proto udp mode server dev tap ifconfig 192.168.100.2 255.255.255.0 tls-server port 1194 verb 3 status /var/log/openvpn/status.log status-version 1 ca /usr/local/etc/openvpn/certs/vpn-ca.pem cert /usr/local/etc/openvpn/certs/servercert.pem key /usr/local/etc/openvpn/certs/serverkey.pem dh /usr/local/etc/openvpn/certs/dh1024.pem client-to-client ping-timer-rem persist-key persist-tun keepalive 10 60 mute 50
Der Serverdienst kann nun unter Berücksichtigung der richtigen Konfiguration gestartet werden. Bei Fehler sei auf das Logfile verwiesen, dass unter status angegeben werden kann.
OpenVPN-Client
Jeder Client benötigt seine eigene individuelle IP unter ifconfig. Der Server bekommt die 192.168.100.2, die Clients werden einfacher weise hochgezählt.
dev tap float remote <SERVERNAME> ifconfig 192.168.100.3 255.255.255.0 route 10.55.0.0 255.255.255.0 192.168.100.2 tls-client port 1194 persist-key persist-tun ping 15 verb 9 ca /usr/local/etc/openvpn/vpn-ca.pem cert /usr/local/etc/openvpn/client1_cert.pem key /usr/local/etc/openvpn/client1_key.pem tls-remote <SERVERNAME> status /var/log/openvpn/status.log status-version 1
Unter Windows müssen insesondere die Pfade angepasst werden und die Konfigurationsdateien müssen auf .ovpn enden, damit diese erkannt werden.
Via IP können die Rechner direkt angesprochen werden. Der Server sollte antworten, wenn von einem beliebigen Client ping 192.168.100.2 ausgeführt wird.
Um Namen zu verwenden müssen entweder alle hosts-Dateien gepflegt werden oder ein Nameserver muss konfiguriert werden.