Vor einigen Tagen habe ich mich intensiv mit Openvpn auseinander gesetzt, da ich meinen Internet Pack M auf den nächst größeren Internet Pack L umgestellt habe und daher diesen nicht mehr nur für gelegentliches surfen, sondern dauerhaft verwenden wollte. Leider läuft die Verbindung mit O2 über einen Zwischenproxy, weshalb mir das ganze etwas suspekt erschien. Nicht zuletzt, weil O2 erst vor kurzem Probleme mit STARTTLS während der AUthentifizierungsphase bei E-Mailversand hatte. Daher habe ich mir vorgestellt, eine gesicherte Verbindung zu meinem Server aufzubauen und darüber zu surfen. Eventuell werde ich in Kürze auch mein NAS mit dran hängen, um jederzeit auf meine Daten zugreifen zu können (Das wird aber ein separates Setup). Im Folgenden beschreibe ich mein Setup (welches möglicherweise etwas paranoid ist :P) unter Gentoo als Server und Windows XP als Clients.
Ich beginne mit der Serverkonfiguration.Zunächst muss man das sogenannte TUN/TAP-Device im Kernel aktivieren, welches sich in der menuconfig unterhalb von “Device Drivers —>” im Menü “Network device support —>” unter dem Punkt “[]Network device support*” unter dem Punkt “Universal TUN/TAP device driver support” verbirgt. Anschließend muss man den Kernel natürlich einmal neu kompilieren und diesen starten, um die Änderungen zu übernehmen.
Weiter gehts mit der eigentlichen Installation von OpenVPN:
|
|
Nun gehen wir zur Erstellung der Zertifikate für die Authentifizierung weiter. Mit Hilfe der sogenannten Easy-RSA von OpenVPN erstellen wir die benötigten Dateien. Dazu wechseln wir in dessen Verzeichnis:
|
|
Nun wird die Datei “vars” editiert und die folgenden Parameter gesetzt (Es darf keine leer bleiben):
- KEY_SIZE Erklärung: Verschlüsselungsstärke, ich habe 2048 gewählt
- KEY_COUNTRY Erklärung: Ländercode
- KEY_PROVINCE Erklärung: Bundesland
- KEY_CITY Erklärung: Stadt
- KEY_ORG Erklärung: Firma oder Organisation
- KEY_EMAIL Erklärung: Mailadresse des Ansprechpartners
Diese Variablen müssen nun geladen und anschließend im Verzeichnis aufgeräumt werden:
|
|
Weiter gehts mit der Erstellung der Public-Key-Infrastruktur ( PKI ) mittels einer Certificate Authority (CA):
|
|
Der Output sieht etwa so aus:
|
|
Wenn zuvor alles korrekt eingegeben wurde, muss man nur “Common Name” ausfüllen und mit einem beliebigen Wert (hier “Irgendwas”) füllen.
Weiter gehts mit dem Zertifikat für den Server, diesmal muss aber der Common Name mit “server
” (bitte exakt so schreiben!) gefüllt werden. Zwei weitere Fragen müssen positiv (also mit “y”) beantwortet werden, die da lauten: “Sign the certificate? [y/n]” aund “1 out of 1 certificate requests certified, commit? [y/n]”. Jetzt zum Befehl:
|
|
Für jeden Client muss man nun ein Zertifikat erstellen. Auf keinen Fall sollte ein Zertifikat auf zwei Rechner eingesetzt werden. Der Grund dafür ist sehr einfach: Geht ein Rechner verloren oder wird gehackt und man muss das Zertifikat revoken, so sind alle Rechner mit diesem Zertifikat davon betroffen. Beim folgenden Befehl sollte im Common Name jeweils ein eindeutiger Name für den Rechner stehen, also z.B. ulilaptop oder ulimainframe
|
|
Jetzt brauchen wir noch den Diffie Hellman Parameter, der leider bei 2048 Bit recht lang zu generieren braucht (kann schon mal ein paar Minuten dauern).
|
|
Zuletzt generiere ich noch ein tls-auth key-file für die Authentifizierung am Server:
|
|
Schützenswert sind vor allem nun im Verzeichnis “keys” die Dateien, welche auf *.key enden, da diese die privaten Teile der Zertifikate darstellen.
Wir kopieren nun die erstellten Dateien ins OpenVPN-Verzeichnis:
|
|
Und ein Backup aller erstellten Keys (nur zur Sicherheit):
|
|
Kommen wir zur Konfiguration des Servers. Zunächst muss die Datei “/etc/openvpn/openvpn.conf
” editiert werden. Mein VPN-Netz bekommt den IP-Bereich 10.13.37.0 und wird maximal 5 Clients zulassen. Der VPN-Server lauscht auf Port 4242 (UDP) auf einem TUN-Device.
|
|
Damit ist die Serverkonfiguration fast abgeschlossen. Nun muss man noch das chroot-Verzeichnis erstellen:
|
|
Und die passende User-/Nutzergruppenkombination erstellen:
|
|
Ab besten sollte man nun den Server einmal starten:
|
|
Wenn alles geklappt hat, sollte man die Änderungen permanent machen:
|
|
Nun muss man das IP-Forwarding einschalten (Danke an Sven für den Hinweis!). Dazu öffnet man die Datei /etc/sysctl.conf
und sucht folgende Zeilen:
|
|
Diese ersetzt man durch (also v.a. 0 => 1):
|
|
Dies funktioniert NUR, wenn im Kernel “Sysctl support” eingeschalten ist!
Damit der Server hinterher auch den Internet-Traffic durchroutet, muss man einige IPTables-Regeln festlegen:
|
|
Man will jedoch nicht, dass der Server den Netbios-Traffic auch ins Internet schickt, daher zusätzlich:
|
|
Damit diese Regeln beim Systemstart auch gesetzt werden, habe ich diese am Ende von /etc/rc.conf angefügt, welche bei jeden Systemstart aufgerufen wird.
Kommen wir zur Konfiguration der Clients. Unter Windows installiert man am Klügsten das Paket von openvpn.se, da dort eine graphische Oberfläche zur Benutzung von OpenVPN (inklusive eines Taskleistenprogramms) verfügbar ist. Nun müssen die Schlüssel zu den Clients transportiert werden. Die fünf Dateien sollten am besten über einen SICHEREN Weg transportiert werden (beispielsweise SCP ). Diese werden benötigt (hier beispielhaft für “ulilaptop”:
- dh2048.pem
- ulilaptop.crt
- ca.crt
- ulilaptop.key
- ta.key
Herunterladen und im Verzeichnis “config” der OpenVPN-Installation abgelegen. Im gleichen Verzeichnis muss eine Datei namens client.ovpn mit folgendem Inhalt angelegt werden:
|
|
Hierbei müsssen YOURSERVER mit dem Hostnamen des Servers und jeweils die Zertifikatsnamen mit deinen vergebenen Namen ausgetauscht werden.
Damit sollte Client-Configuration ageschlossen sein. Jetzt einfach mal versuchen zu verbinden. Wenn alles funktioniert hat und in der Taskleiste das Icon grün leuchtet, sollte man mal die eigene IP herausbekommen. Dazu gibt es viele verschiedene Seiten (Suchmaschine befragen), ich habe mir eine eigene in PHP schnell zusammengestrickt ;) Mit diesem Setup fahre ich momentan problemlos ;)