In der letzten Zeit habe ich mich mit der Einrichtung einer OpenVPN Infrastruktur beschäftigt. Ziel war es lediglich ein paar vertrauenswürdige Clients einigermaßen Sicher ins Netzwerk zu lassen. Da ich mein Setup für weitestgehend gelungen halte – auch wenn ich ein paar Dinge noch nachbessern werde, sobald sich die Notwendigkeit ergibt und der erste Testlauf vorbei ist – stelle ich das ganze mal allen zur Verfügung, die das selbe vorhaben.
Bei meinen Recherchen sind mir nämlich einige unvollständige, falsche oder/und unverständliche Tutorials untergekommen. Abgesehen davon wurde ich schnell in die Wirklichkeit zurück geholt, als ich mich mit Windows 7 beschäftigte. Das war – so glaube ich – nahezu der prozentual größte Teil meiner Zeit den ich in dieses Setup investiert habe :-)!
Grundlegend habe ich folgende Ausgangssituation: Betriebssystem ist Debian stable, installiert wird OpenVPN 2.1 und neuer. Genutzt wird Easy-RSA.
Aptitude install openvpn
cp -vr /usr/share/doc/openvpn/examples/easy-rsa/2.0 /root/Firmen-CA
cd /root/Firmen-CA
nano vars
Jetzt am Ende der Datei die Defaultwerte den eigenen Bedürfnissen anpassen. Ist dies geschehen, so machen wir uns daran die CA und ein paar weitere Zertifikate etc zu erstellen.
Source .vars
./build-ca
Jetzt erstellen wir das Zertifikat für den OpenVPN-Server
./build-key-server OpenVPNServer
Jetzt wird das erste Clientzertifikat erstellt
./build-key Client1
Jetzt erstellen wir unseren Diffie Hellmann Schlüssel
./build-dh
Wir werden ebenfalls TLS-Auth einsetzen. Also brauchen wir auch noch einen weiteren Schlüssel
openvpn –genkey –secret ta.key
Ist das alles erledigt, so kopieren wir die wichtigsten Dateien direkt nach /etc/openvpn.
cp ta.key dh.pem keys/ca.crt keys/OpenVPNServer.crt keys/OpenVPNServer.key /etc/openvpn/
Wunderbar! Jetzt machen wir uns daran die Serverkonfiguration zu basteln
cat /etc/openvpn/server.conf
# Wir lassen den OpenVPN-Server auf dem (standard) Port 1194 lauschen
port 1194
# Wir werden das Protokoll UDP nutzen um unsere Daten zu übertragen.
proto udp
# unser Server soll auch in dem entsprechenden Modus laufen.
mode server
# Wir wollen TLS einsetzen. Dementsprechend brauchen wir auch die entsprechende Einstellung
# auf der Serverseite
tls-server
# Wir werden ein Tun-Device nutzen um unsere OpenVPN-Verbindungen aufzubauen.
dev tun
#Welches virtuellen Adressbereich stellen wir innerhalb unsere VPN-Netzwerkes bereit?
server 10.8.0.0 255.255.255.0
# Wir wollen eine „feste“ Zuordnung von IP-Adressen zu Clients. Damit wir das ganze dann auch
# nachvollziehen können, aktualisieren wir die Liste alle 10 Sekunden
ifconfig-pool-persist ippool.txt 10
# Wir stellen einen Routingeintrag ins Netzwerk Bereit und übergeben gleichzeitig auch
# DHCP-Optionen
push "route 192.168.0.0 255.255.255.0"
push "dhcp-option DNS 192.168.0.1"
# Fangen wir an die Kryptografie einzubauen.
# Das Zertifikat unserer obersten Zertifizierungsstelle
ca ca.crt
# Das Zertifikat von unserem OpenVPN Server
cert OpenVPNServer.crt
# Der zum Zertifikat passende Schlüssel
key OpenVPNServer.key
# Unser Diffie-Hellmann, wir haben Ihn vermisst
dh dh2048.pem
# Unsere Kommunikation mit AES-256-CBC verschluesseln
cipher AES-256-CBC
# TLS-Authentifizierung erfordert ein Secret und die Angabe 0 für Server
tls-auth ta.key 0
# Alle 10 Sekunden einen Ping absetzen und nach 60 Sekunden ohne # Antwort die Verbindung aufloesen.
keepalive 10 60
# Starte den Server als Beutzer nobody und in der Gruppe nogroup
user nobody
group nogroup
# Komprimierung für die Datenuebertragung
comp-lzo
# Behalte die Schluessel und Verbindung im Speicher
persist-key
persist-tun
# Schreibe den aktuellen Status und Log in die angegebene Datei
status openvpn_status.log
log openvpn.log
# Seit Gespraechig in Stufe 3
Verb 3
# Nach 20 gleichen Meldungen: Ruhe!
mute 20
Soweit so gut. Wenn man nun den Server startet (openvpn server.conf innerhalb von /etc/openvpn/ oder /etc/init.d/openvpn start) und alles gut geht, dann kann man sich an die Konfiguration der Clients machen.
# Starte die Konfiguration im Client-Modus
client
# Benutze ein Tun Device
dev tun
# Verwende UDP für die Datenübertragung
proto udp
# Wohin soll nach dem Start eine Verbindung aufgebaut werden?
remote remote.Firmendomain.de
# Wir wollen keine Bindung zu irgendeinem Netzwerkdevice
nobind
# Verbinde bis zur Unendlichkeit und noch viel weiter
resolv-retry infinite
# Halte den Schlüssel und Verbindung im Speicher
persist-key
persist-tun
# Da wir TLS einsetzen müssen wir den Client-Modus aktivieren
tls-client
# Der Client soll sich Netzwerkeinstellungen vom Server akzeptieren.
pull# Fix für die Routenkonfiguration. Wichtig für Windows Vista und 7 Clients mit Schwierigkeiten.
route-method exe
route-delay 2# Fangen wir nun an die Kryptografie einzustellen.
# Zertifikat unserer obersten Zertifizierungsstelle
ca ca.crt
# Clientzertifikat
cert Client1.crt
# Clientschlüssel
key Client1.key
# Diffie Hellmann, wie sehr haben wir Ihn vermisst.
dh dh2048.pem
# Datenverkehr mit AES-256-CBC verschlüsseln.
cipher AES-256-CBC
# TLS-Auth mit dem Parameter 1 für client
tls-auth ta.key 1
# Wir wollen Komprimierung für den Datenverkehr
comp-lzo
# Auskunftsfreudigkeit von 3
verb 3
Die obige Konfiguration kann man dann auf den Klient übertragen, zusammen mit den Dateien welche innerhalb der Konfiguration genutzt und vorher durch uns erstellt wurden.
Soweit meine Gedankenstütze. Was noch zu tun ist: Einrichtung einer CRL (Certificate Revoke List) und eventuell noch ein paar Kleinigkeiten hinsichtlich der Bedienbarkeit aus adminitrativer Sicht. Das sind bisher allerdings Dinge, welche sich entsprechend der Nutzung ergeben werden.
Falls jemand Anmerkungen zu dieser meiner Konfiguration hat, so möge er sich bitte melden. Ansonsten hoffe ich für den einen andere anderen eine Hilfe darzustellen und mir selbst eine Stütze gebaut zu haben.
Trackback URL for this post:
- Blog von Joerg
- Anmelden um Kommentare zu schreiben


Danke für die Tipps mit
Danke für die Tipps mit Win7/Vista Routingkonfig, muss ich mir merken falls wir da mal Probleme haben.
Wenn ich mir die Clientconfig anschaue sollte ich allgemein mal wieder mich auf den aktuellen stand bringen was es da alles gibt an Einstellungen. Das einzige was wir allgemein anders machen, sind alle Zertifikate in eine .p12 Datei zusammenzuschnüren (openssl pkcs12 ...)
CRL ist richtig einfach, "openssl ca -revoke" und "openssl ca -gencrl" erledigen eigentlich alles was man braucht
Danke
Hey, vielen Dank für die Tipps bzgl. OpenSSL. Ich kann mir gut vorstellen, dass es lange Zeit braucht, bis man sich wieder an eine Konfig setzt, wenn sie denn erst einmal richtig funktioniert. Ich hatte auch daran gedacht alles Kryptokram in eine Datei zu packen. Allerdings bin ich ein freund der Simplifizierung und wenn ich alles "anpacken" kann, fühl ich mich einfach wohler :-)
Hallo, danke für die
Hallo,
danke für die Anleitung! Ich abe aber noch ein paar Anmerkungen:
- "Source .vars" muss "source ./vars" heißen
- "./build-dh" legt bei mir eine Datei dh1024.pem an. Du kopierst anschließend eine dh.pem nach /etc/openvpn und bindest hinterher aber eine dh2048.pem ein?
- beim Kopieren der wichtigsten Keys fehlen die Client1.key und die Client1.crt
- "openvpn –genkey –secret ta.key" meckert bei mir, da die Minuszeichen wohl nach dem Kopieren anders sind. Einfach löschen und durch 2 -- ersetzen
- "Verb 3" in der server.conf muss klein geschrieben sein
Gruß
Frank
Danke
Hallo Frank und danke für deine Tips. Du hast vollkommen recht. Nachdem ich einen gewissen Abstand erhalten habe sehe ich meine Fehler ebenfalls. Ich hatte den Post aus einer bestehenden Dokumentation übernommen und musste dann noch mit den Formatierungen kämpfen. Sobald ich heute ins Wochenende gehe und ein wenig mehr Zeit und Raum habe, werde ich den Artikel überarbeiten.
Irgendwie vermiss ich den
Irgendwie vermiss ich den Check auf revoked certs. Hast da noch was in petto oder soll ich da was nachtragen? ;)