Direkt zum Inhalt

OpenVPN mit Debian - Zertifiziert und zugemacht





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:

http://www.schreibtischwerkstatt.de/trackback/673

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? ;)