Der Einsatz eines virtuellen privaten Netzwerks erlaubt die sichere Kommunikation über unsichere Netzwerke. Mit OpenVPN steht dafür ein einfach zu konfigurierendes, mächtiges Werkzeug bereit.
Das Abhören von digitaler Kommunikation sieht im Hollywood-Kino meist einfach aus, und leider ist es das in der Realität auch. Zum Glück gelingt das Absichern der Kommunikation genauso einfach wie der unerlaubte Zugriff: Mit OpenVPN steht dazu ein komfortables Werkzeug bereit.
VPN in der Theorie
Sowohl Firmen als auch Privatleute hegen den Wunsch, ihre Daten vor fremden Augen und gegen Manipulation geschützt durchs Netz zu bewegen. Nutzt man für den Fernzugriff auf private Daten zudem unsichere Eintrittspunkte wie ein Hotelnetz, den öffentlichen Hotspot, das Internetcafé oder das Handy, gehören Schutzmaßnahmen zum Pflichtprogramm. Aber auch wer seine Kommunikation in einem besser gesicherten Netzwerk, wie einem Campus- oder Kundennetzwerk schützt, begeht damit keinen Fehler.
Am einfachsten sichern Sie Ihre Daten, indem Sie sie durch einen verschlüsselten Kanal – einen so genannten Tunnel – übertragen. Durch solche Tunnel verbundene Rechner bilden virtuelle private Netzwerke oder kurz VPNs (Abbildung 1): virtuell, weil die Netzwerkverbindung nicht direkt auf Hardware basiert, und privat, weil hoffentlich kein Fremder mitlesen kann.

Abbildung 1: Bei einem einfachen VPN-Setup verfügen die beiden Endpunkte der Verbindung (Rechner A und B) über alle notwendigen Informationen, um über einen sicheren Tunneln miteinander zu kommunizieren.
Dabei verbindet der Tunnel mindestens zwei Endpunkte, hinter denen Rechner oder auch ganze Netze stehen dürfen. Die derart gesicherte Verbindung schützt dabei auch potenziell unsichere Aktionen wie das Übertragen von Dateien per SMB oder FTP. Es gibt mehrere VPN-Verfahren, die von kompliziert und mächtig (IPSec) bis hin zu einfach und potenziell unsicher (PPTP) reichen.
Das hier vorgestellte Projekt OpenVPN [1] lässt sich dagegen unter einfach und mächtig einordnen. OpenVPN entstand unter der Federführung eines einzelnen Programmierer namens James Yonan, der früh die Portierung auf Windows und die BSD-Familie (etwa FreeBSD oder Mac OS X) in Angriff genommen hatte. Zahlreiche Entwickler haben mittlerweile auch grafische Frontends dafür erstellt, die den Einsatz der Kommandozeilen-Applikation vereinfachen und deutlich angenehmer gestalten.
Hohe Sicherheit, einfache Usability und viele Tools machen OpenVPN zu einer guten Lösung für den professionellen Einsatz über Betriebssystem- und Arbeitsgruppengrenzen hinweg. Deshalb wundert es nicht, dass OpenVPN seit Jahren einen fester Bestandteil aller großen Distributionen bildet und dass sowohl OpenSuse als auch Ubuntu umfangreiche Konfigurationstools für den Client mitbringen.
Für die Sicherheit kommen dabei grundsätzlich zwei Varianten in Frage: OpenVPN unterstützt sowohl einfache Pre-Shared Keys als auch die komplexere und sichere Technologie der SSL-Zertifikate. Letztere bauen auf asymmetrischer Verschlüsselung [2] auf und lassen sich gut in einer PKI verwalten. Dazu stattet der Administrator sowohl den Server als auch jeden Client mit Schlüsseln aus, die von einer zentralen Instanz, der CA, stammen. Beide Kommunikationspartner haben so die Möglichkeit, zu überprüfen, ob der öffentliche Schlüssel des anderen von dieser Instanz stammt. Der eigene private Schlüssel bleibt stets geheim.
Ein einfacher Tunnel
Für einen ersten, einfachen Tunnel eignen sich aber am besten die Pre-Shared Keys. Damit setzen Sie ein VPN in wenigen Minuten auf. OpenVPN bringt dazu einfache und gut dokumentierte Beispieldateien mit einer adaptierbaren Konfiguration mit. Für einen simples VPN mit einem gemeinsamen Tunnel nehmen Sie nur in einer Zeile in den Dateien Änderungen vor, erzeugen einen Schlüssel und verteilen diesen auf die beiden Systeme.
Die Beispielkonfiguration für den Client finden sie bei OpenSuse unter /usr/share/doc/packages/openvpn/sample-config-files/static-home.conf und für den Server in /usr/share/doc/packages/openvpn/sample-config-files/static-office.conf. Kopieren Sie die entsprechenden Dateien auf Server und Client in das Verzeichnis /etc/openvpn. Erzeugen Sie dann mit dem Kommando openvpn --genkey --secret /etc/openvpn/static.key einen gemeinsamen Schlüssel für die beiden Systeme des Tunnels und hinterlegen sie diesen auf beiden Maschinen im Verzeichnis /etc/openvpn.
Jetzt brauchen Sie nur noch in static-home.conf auf dem Client in der Zeile remote die IP oder den DNS-Namen des Servers einzutragen und OpenVPN als zu Root zu starten: Schon steht der erste Tunnel, und Sie verfügen über ein neues virtuelles Netzwerkinterface, an dessen anderem Ende Sie den VPN-Server erreichen – sofern ihnen keine Firewall einen Strich durch die Rechnung gemacht hat. Überprüfen Sie das mit ifconfig.
Installation mit Zertifikaten
In größeren Netzen mit einem höheren Sicherheitsanspruch verwenden Admins aus gutem Grund jedoch keine Pre-Shared Keys, sondern SSL-Zertifikate. Diese vereinfachen das Verwalten und vor allem Rückrufaktionen, falls ein Client-PC kompromittiert wurde. Mit Zertifikaten benötigt der Benutzer neben der IP-Adresse respektive dem Hostnamen des Endpunkts selbst noch einen öffentlichen Schlüssel einer CA und jeweils einen eigenen privaten und öffentlichen Schlüssel.
Diese liegen in der Regeln in Form von Textdateien vor und stammen von der CA. Der Endpunkt im Firmennetz bekommt ebenfalls ein von der CA ausgestelltes Schlüsselpaar und den öffentlichen Schlüssel. So können beide Parteien die Identität der jeweils anderen überprüfen, jede Maschine lässt sich eindeutig identifizieren. Mehr über das Einrichten einer eigenen CA verrät der Kasten “Die eigene CA”.
Die eigene CA
Um eine eigene CA aufzusetzen, braucht es nur ein paar Skripte, die OpenVPN gleich mitliefert. Diese kopieren Sie zuerst in den eigenen Benutzerordner. Das erlaubt das Schreiben ohne Root-Rechte. Der zu kopierende Ordner heißt bei Ubuntu /usr/share/doc/openvpn/examples/easy-rsa/2.0, bei OpenSuse /usr/share/openvpn/easy-rsa/2.0. Unter Ubuntu würde das ganze also etwa so im Terminal ablaufen:
$ cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0 ~/easy-rsa $ cd ~/easy-rsa
Dann lesen Sie den Inhalt der Datei vars in der aktuellen Konsole mittels source ./vars ein. Haben Sie die CA noch nie verwendet, leeren Sie nun einmalig mittels ./clean-all den Ordner und erzeugen dann mit ./pkitool --initca --pass das CA-Schlüsselpaar. Dabei fragt die Software ein Kennwort ab, mit dem Sie die Schlüssel der CA schützen. Zuletzt legen Sie noch mit ./build-dh die Diffie-Hellman-Verschlüsselungsparameter an, die Sie für die Serverkonfiguration benötigen.
Nun haben Sie die Möglichkeit, beliebige Schlüsselpaare zu erzeugen. Diese generieren Sie für Server-Endpunkte (die sich nie aktiv verbinden) oder für Client-Endpunkte (zu denen sich nie jemand verbindet). Der Befehl ./pkitool --server Hostname legt für den Server namens Hostname ein Schlüsselpaar an. Mit ./pkitool hostname erledigen Sie dasselbe für Client-Endpunkte.
Im Unterordner keys findet sich neben dem öffentlichen CA-Schlüssel ca.crt auch jeweils der öffentliche Hostname.crt und der private Schlüssel Hostname.key. Es ist generell eine gute Idee, mit der Option --pass mitzuteilen, dass die privaten Schlüssel kennwortgeschützt sein sollen.
Integriert
Ein besonderes Schmankerl stellt die Integration von OpenVPN in den Network-Manager an. Das vom Gnome-Projekt entwickelte System hilft bei der Konfiguration von Netzwerkschnittstellen. Es existiert mittlerweile eine Variante für KDE in Form des KNetworkManagers. Unter Ubuntu installieren Sie lediglich das Paket network-manager-openvpn. Bei OpenSuse gibt es analog dazu die Pakete NetworkManager-openvpn-gnome und NetworkManager-openvpn-kde für die beiden Desktops.
Nach der Installation zeigt ein Klick auf das Symbol des Network-Managers im Panel einen neuen Menüpunkt namens VPN-Verbindungen… | VPN konfigurieren. Dort öffnet ein Klick auf Hinzufügen einen mehrstufigen Dialog, der durch die Konfiguration führt. Allerdings finden sich dort nur teilweise deutsche Texte, was jedoch bei den allgegenwärtigen Anglizismen im Netzwerkbereich nicht verwundert.
Der Dialog erfragt neben dem Namen, unter dem das System diesen Tunnel bekannt macht, nur die Dateinamen des CA-Schlüssels und des eigenen Schlüsselpaars ab. In Abbildung 2 sehen Sie die beiden Dialoge. Haben Sie Angaben komplettiert, erscheint die frisch angelegte Verbindung im Network-Manager unter VPN-Verbindungen… im Hauptfenster. Durch Anklicken aktivieren Sie den Tunnel, wobei beim Symbol des Network-Managers im Tray des jeweiligen Desktops ein kleines leuchtendes Schloss erscheint: Es symbolisiert ein aktives VPN.

Abbildung 2: Sowohl OpenSuse (links) als auch Ubuntu (rechts) bieten über den NetworkManager eigene Dialoge zum Einrichten und Konfigurieren eines VPN-Netzes ein.
Welche Ziele im Netzwerk Sie jetzt konkret über den verschlüsselten Tunnel erreichen, hängt letztlich von der Konfiguration des entfernten VPN-Endpunkts ab. So hat es durchaus Sinn, den gesamten Zugang ins Internet zu verschlüsseln, wenn Sie nur über einen öffentlichen WLAN-Hotspot ins Netz gehen. Möchten Sie mit dem VPN stattdessen von einem DSL-Anschluss eine Brücke zum Firmennetzwerk, macht es mehr Sinn, nur die fürs Firmennetz bestimmten Pakete zu tunneln. Andere Datenpakete ins VPN zu schicken, würde nur den Internetzugang des Unternehmens belasten, ohne einen spürbaren Sicherheitsvorteil zu bringen.
Natürlich ist ein solcher Client ohne Server nicht sonderlich spannend. Der Kasten “Heimserver” gibt einen ersten Einblick in den Betrieb eines eigenen Servers. Bei Fragen zu den vielfältigen Profi-Features wie Bridging (gut zum Tunneln von Spielen oder ähnlichem) oder die Konfiguration von Windows-Clients hilft die OpenVPN-Homepage weiter. Die in Kürze erwartete Version 2.1 von OpenVPN bringt direkt einen grafischen Client für Windows mit. Bei Bedarf teilt sich diese Programmversion auch einen TCP-Port mit einem HTTPS-Server. Für fast alle alltäglichen Einsatzgebiete jedoch reicht bereits die Version 2.0.
Heimserver
Für den eigenen OpenVPN-Server braucht es eine angepasste Konfigurationsdatei. Auch dafür bringt OpenVPN Beispieldateien mit: Sie heißen server.conf und client.conf. Die umfangreich dokumentierten Dateien helfen zwar weiter, fallen aber nicht sehr übersichtlich aus. Listing 1 zeigt ein völlig ausreichendes Beispiel ohne Kommentare für eine Server-Konfigurationsdatei.
Nach der Installation startet für jede Datei im Ordner /etc/openvpn, deren Dateinamen auf .conf endet, beim Systemstart automatisch ein OpenVPN-Prozess den entsprechenden Tunnel. (Unter Windows lautet die Dateinamenserweiterung übrigens .ovpn.)
Nun legen Sie noch in /etc/openvpn/linuxuser die Dateien ab, die Sie gemäß den Angaben im Kasten “Die eigene CA” angelegt haben. In diesem Beispiel kommt als Hostname server.example.org zum Einsatz. Besitzen Sie keine eigene echte Domain, klappt es auch mit der IP-Adresse oder mit einem dynamischen Hostnamen, wie Sie ihn etwa von Noip.com erhalten.
Eine ausführlichere Anleitung zu den vielen Variablen der Konfiguration finden Sie bei Freifunk.net [3] oder natürlich auf der OpenVPN-Homepage. Die Manpage von OpenVPN ist die beste Anlaufstelle für Details zu den vielen Optionen und Konfigurationsparametern.
dev tun persist-tun persist-key user nobody daemon log /var/log/openvpn.log verb 4 comp-lzo server 192.168.33.0 255.255.255.0 client-to-client ca /etc/openvpn/linuxuser/ca.crt cert /etc/openvpn/linuxuser/server.example.org.crt key /etc/openvpn/linuxuser/server.example.org.key dh /etc/openvpn/linuxuser/dh1024.pem
Glossar
- IPSec
- Internet Protocol Security (RFC 2401). Sicherheitsprotokoll, das bei der Kommunikation über IP-Netze die Vertraulichkeit, Authentizität und Integrität der Daten gewährleisten soll.
- PPTP
- Point-to-Point Tunneling Protocol (RFC 2637). Von einem Industriekonsortium unter Beteiligung von Microsoft entwickeltes VPN-Protokoll. Durch die Integration in Microsoft Windows relativ weit verbreitet.
- Beide Teilnehmer nutzen den gleichen Schlüssel zum Chiffrieren der Kommunikation. Diesen tauschen Sie vorher im Geheimen aus.
- PKI
- Public Key Infrastructure. Ein System mit einer zentralen Stelle, die alle ausgegebenen Schlüssel signiert und damit deren Echtheit bestätigt.
- CA
- Certificate Authority. Zentrales Schlüsselpaar, das alle anderen Schlüssel signiert. Der öffentliche Schlüssel der CA ist bekannt. Mit ihm prüfen Sie die Unterschrift der CA auf Echtheit, doch niemand außer der CA selbst kann neue Zertifikate oder Schlüssel signieren.
- Diffie-Hellman
- Protokoll zum Generieren eines geheimen Schlüssels über einen unsicheren Kanal.
[1] OpenVPN: http://www.openvpn.net
[2] Wikipedia über asymmetrische Verschlüsselung: http://de.wikipedia.org/wiki/Asymmetrisches_Kryptosystem
[3] Freifunk OpenVPN-Howto: http://freifunk.net/wiki/OpenVPNHowto







Ich habe mir zum Gebrauch in öffentlichen WLANs einen VPN Tunnel ins Internet bei Hotsplots eingerichtet. Leider lässt sich diese Verbindung unter Ubuntu 8.04 nicht mit dem NM einrichten, weil ein MTU Wert von 1500 gefordert und in der hotsplots.conf eingetragen ist, der NM aber einen kleineren Wert (1412) vorgibt. Die Verbindung muss also umständlich von Hand gestartet werden. Bei Ubuntu 8.10 klappt das.
Friedrich