Viele WLAN-Geräte verschlüsseln die Verbindungen nur unzureichend. Mit OpenVPN und wenigen Befehlen richten Sie ihr eigenes verschlüsseltes Netzwerk ein und können sich sogar aus dem Internet zu Hause einloggen.
Die große Verbreitung von WLAN-Netzen stellt nicht nur in Firmen ein ernstes Sicherheitsproblem dar, sondern betrifft auch Privatanwender: Die meisten Geräte verschlüsseln noch nach dem leicht knackbaren WEP-Standard (Wired Equivalent Privacy) – was Angreifern ermöglicht, selbst aus einigen hundert Metern Entfernung in das Hausnetz einzubrechen. Das Ziel sind dann entweder die Computer des Anwenders oder aber dessen Internet-Verbindung, die der Einbrecher zum Spammen, zu Denial-of-Service-Attacken oder zu Angriffe gegen Dritte missbrauchen will. Der Dumme ist im Zweifel der Anwender, von dessen Computer aus die Angriffe gestartet wurden.
Die Lösung ist, zusätzlich zur WEP-Verschlüsselung ein VPN zu verwenden, das die Daten nur verschlüsselt zwischen den Computern überträgt. OpenVPN [1] zeichnete sich von je her durch die einfache Konfiguration aus: Anstelle einer ellenlangen Konfigurationsdatei, wie sie bei vielen IP-Sec-Lösungen üblich ist, genügen wenige Parameter für einen verschlüsselten Tunnel. Die Einfachheit geht dabei nicht zulasten der Sicherheit, wie eine einschlägige Untersuchung [3] nachweist.
Einfache Einrichtung
Ab Version 2.0 können Sie OpenVPN auch als Server für dutzende Clients einsetzen, was zusammen mit dem Schlüssel-Management allerdings schnell unübersichtlich und kompliziert wird. Wer für den Hausgebrauch nur ein oder zwei Rechner über OpenVPN verbinden möchte, weil er der WEP-Verschlüsselung seines WLANs nicht traut, sollte besser weiterhin für jeden Client einen OpenVPN-Prozess auf dem Server starten.
Für die verschlüsselte Kommunikation benutzt Open-VPN eigene Netzwerk-Devices, im nachfolgenden Beispiel tun0. Für Programme, die für ihre Kommunikation Gerätedateien benötigen, gibt es zudem das Gerät /dev/tun0. Alle Daten, die in /dev/tun0 oder tun0 geschrieben werden, transportiert OpenVPN zur Gegenstelle und gibt sie dort wiederum über das entsprechende Tunnel-Device aus. Somit funktioniert der Tunnel wie eine virtuelle Netzwerkkarte und bekommt auch eine eigene IP zugewiesen, die in einem anderen Class-C-Netz liegen sollte als die IP Ihrer Netzwerkkarte.
IP-Adressen und Subnetze
In den folgenden Beispielen besitzen die WLAN-Karten des Notebooks und des Desktop-Rechners die IP-Adressen 192.168.1.109 und 192.168.1.1, während die Tunnel-Devices die IP-Adressen 192.168.8.96 und 192.168.8.254 besitzen (Abbildung 1). Die IP-Adressen der Tunnel-Devices wurden übrigens willkürlich gewählt. Wichtig ist nur, dass sie nicht zwischen 192.168.1.0 und 192.168.1.255 liegen, da dies das Class-C-Netz (Subnetz) der WLAN-Karten ist.
Der Grund dafür, dass Sie für die Tunnel-Devices IP-Adressen aus einem anderen Subnetz wählen sollen, ist das Routing: Linux geht nach dem Standard davon aus, dass ein Gerät mit einer IP-Adresse aus dem Bereich 192.168.0.x bis 192.168.255.x an einem Class-C-Subnetz mit der Netzmaske 255.255.255.0 betrieben wird – und erwartet, dass sich auch alle anderen Geräte aus dem gleichen Adressbereich direkt und ohne Gateway über das Netzwerkgerät erreichen lassen. Dies könnten Sie zwar ändern, jedoch wäre zusätzlicher Konfigurationsaufwand damit verbunden. Es ist daher einfacher, ein anderes Class-C-Netz rein für die Tunnel zu verwenden.
Für Zugriffe vom Notebook auf den Desktop müssen Sie allerdings ebenfalls die Tunnel-IP-Adresse des Desktops, also 192.168.8.254 angeben: Wenn Sie sich etwa per FTP über die IP-Adresse 192.168.1.1 auf dem Desktop einloggen, verwendet das Notebook die nur unzureichend verschlüsselte WLAN-Schnittstelle, da die IP-Adresse 192.168.1.1 im gleichen Subnetz wie die IP-Adresse der Notebook-WLAN-Karte liegt und folglich direkt über WLAN erreichbar sein müsste. Öffnen Sie hingegen eine FTP-Verbindung zur IP-Adresse 192.168.8.254, landen Sie zwar ebenfalls auf dem Desktop-Rechner – die IP-Adresse liegt jedoch im gleichen Subnetz wie die IP-Adresse des Notebook-Tunnel-Devices, folglich läuft der Datentransfer durch den Tunnel und wird verschlüsselt.
Die Schlüsselfrage
OpenVPN unterstützt zwar auch Public- und Private-Key-Paare, für den Einsatz im Heimnetz ist dies aber nicht erforderlich – hier reicht es, wenn sich Server und Client den gleichen Schlüssel teilen. Auch können so mehrere Clients mit dem gleichen Schlüssel arbeiten. Um das VPN nicht zu kompromittieren, darf der Schlüssel jedoch nur für Root lesbar sein und sollte in einem Verzeichnis liegen, das nur Root lesen kann – etwa /etc/openvpn. Den Schlüssel erzeugt dann OpenVPN selbst mit dem Aufruf:
openvpn --genkey --secret /etc/openvpn/geheimer.key
Die Schlüssel-Datei müssen Sie nun auf sicherem Weg auf den Client, etwa ein Notebook mit einer WLAN-Karte, transferieren. Am besten eignet sich dafür das Programm scp, da es die Daten ohnehin verschlüsselt. Einen USB-Stick oder gar eine CD sollten Sie besser nicht einsetzen, wenn Ihnen die Sicherheit des VPN etwas wert ist: Um den Schlüssel vollständig vom USB-Stick zu entfernen, müssten Sie den Flash-Speicher mehrmals komplett mit Nullen und Einsen überschreiben. Bei CDs hilft es nicht einmal, das Medium durchzubrechen, die Informationen ließen sich noch immer mittels Mikroskop auslesen.
Tunnelbohrung leicht gemacht
Der Aufruf von OpenVPN ist einfach und erfordert ab Version 2.0 nur wenige Parameter. Auf dem Desktop-Rechner, der die Internet-Verbindung für das Notebook bereit stellt, rufen Sie OpenVPN folgendermaßen auf:
openvpn --daemon --dev tun0 --remote 192.168.1.109 --ifconfig 192.168.8.254 192.168.8.96 --secret /etc/openvpn/geheimer.key
Der Parameter --daemon sorgt dafür, dass OpenVPN im Hintergrund läuft. Strenggenommen ist es nicht nötig, das Tunnel-Device per --dev tun0 festzulegen: Ohne diesen Parameter würde OpenVPN das nächste freie Tunnel-Device verwenden. Wenn Sie jedoch ihre eigene Firewall betreiben, ist es einfacher, wenn Sie die Regeln auf ein bestimmtes Netzwerk-Device ausrichten können. Der Angabe --remote 192.168.1.109 entnimmt OpenVPN, welchen Rechner es kontaktieren soll. Da der Parameter --port mit der Port-Nummer fehlt, versucht OpenVPN dies über den Standard-Port 1194.
Die Angabe --ifconfig 192.168.8.254 192.168.8.96 beeinflusst die Netzmaske für das Tunnel-Device: Normalerweise würde das System erwarten, alle anderen Geräte aus dem IP-Bereich 192.168.8.0 bis 192.168.8.255 ebenfalls über tun0 zu erreichen (Netzmaske 255.255.255.0). Der Parameter --ifconfig sorgt jedoch dafür, dass lediglich die IP-Adresse 192.168.8.96 dem Tunnel-Device zugeordnet wird, was einer Netmask 255.255.255.255 entspricht. Dies ist auch sinnvoll, da der Tunnel stets nur zu einer Gegenstelle besteht.
Auf dem Notebook kommt der Parameter --redirect-gateway zum OpenVPN-Aufruf hinzu, außerdem ändern sich die IP-Adressen bei den Parametern --remote und --ifconfig:
openvpn --daemon --dev tun0 --remote 192.168.1.1 --ifconfig 192.168.8.96 192.168.8.254 --redirect-gateway --secret /etc/openvpn/geheimer.key
Auch die Option --redirect-gateway beeinflusst nur das Routing: Ist der Tunnel aufgebaut, trägt sie die Gegenstelle fest in der Routing-Tabelle ein und leitet alle zukünftigen Datentransfers über den Tunnel um. Bricht der Tunnel zusammen oder wird das Programm beendet, stellt OpenVPN die alten Einstellungen wieder her. Die Entwickler von OpenVPN haben diesen Parameter noch als experimentell eingestuft, im Test funktionierte OpenVPN jedoch einwandfrei.
Von draußen rein
Eine beliebte Anwendung von OpenVPN ist, sich von unterwegs mit dem heimischen Netz zu verbinden. Da ein per DSL oder ISDN angebundener Rechner jedoch keine feste IP-Adresse besitzt, müssen Sie zum Beispiel bei DynDNS [4] eine dynamische IP-Adresse registrieren, die der Desktop-Computer bei jeder Einwahl aktualisiert. Da der Desktop die spätere offizielle Adresse des Notebook-Computers nicht kennt, fehlt beim Aufruf der Parameter --remote – damit wartet OpenVPN darauf, dass sich das Notebook meldet:
openvpn --daemon --dev tun0 --ifconfig 192.168.8.254 192.168.8.96 --secret /etc/openvpn/geheimer.key
Der OpenVPN-Aufruf beim Notebook unterscheidet sich nur geringfügig von der Variante für das eigene WLAN – die Remote-IP des Desktop-Rechners ersetzen Sie einfach nur durch die dynamische Adresse:
openvpn --daemon --dev tun0 --remote desktop.dyndns.org --ifconfig 192.168.8.96 192.168.8.254 --redirect-gateway --secret /etc/openvpn/geheimer.key
Durch die Firewall
OpenVPN verwendet normalerweise das verbindungslose Protokoll UDP für den verschlüsselten Tunnel, was bei vielen Firmen-Firewalls oder auch in Internet-Cafes ein Problem darstellt. Viele Firewalls erlauben nur den normalen Surf-Betrieb, die UDP-Pakete von OpenVPN kommen also nicht durch. Die Lösung sind die Parameter --proto tcp-server auf dem Desktop-Rechner und --proto tcp-client auf dem Notebook: Das Notebook baut eine TCP-Verbindung, ähnlich der eines Browsers, zum Desktop-Rechner auf; der Desktop wartet wie bisher auf die eingehende Verbindung. Auf diese Weise lassen sich nahezu alle Firewalls problemlos untertunneln – was allerdings ein Sicherheitsproblem darstellt, schließlich könnte ein Angreifer nun vom Desktop-Rechner aus das Firmen-Netzwerk angreifen, mit dem das Notebook gerade verbunden ist.
Neuerungen in OpenVPN 2.0
Die wichtigsten Neuerungen in OpenVPN 2.0 betreffen den Einsatz als VPN-Server für mehrere Rechner oder gar Firmen-Netzwerke. Aber auch für den privaten Einsatz bei einem oder zwei VPN-Clients gibt es ein paar interessante neue Optionen – die meisten betreffen das Routing.
War ein Tunnel eingerichtet, musste sich der Benutzer bisher selbst um das Routing kümmern, es also von Hand einrichten oder ein Skript dafür benutzen. Die Schwierigkeit bestand darin, festzustellen, ab wann ein Tunnel tatsächlich etabliert war – so fragen die OpenVPN-Skripte von [5] per ifconfig den Status des Netzwerkgeräts ab und versuchen dann, die Routen einzurichten. Dies kann durchaus auch fehlschlagen. Damit die Skripte nicht in einer Endlosschleife hängen bleiben, unternehmen sie maximal zehn Versuche, das Routing einzurichten.
In der Version 2.0 kennt OpenVPN die Parameter --route, --route-gateway sowie --redirect-gateway: Ist der Tunnel aufgebaut und in Betrieb, richtet OpenVPN gleich die angegebenen Routen ein, ändert das Standard-Gateway oder leitet gar den gesamten Datentransfer über den Tunnel um. Bricht die VPN-Verbindung zusammen, setzt OpenVPN automatisch das Routing wieder auf die Anfangswerte zurück. Über die Parameter --up und --down lassen sich nun sogar externe Skripte aufrufen, die zum Beispiel zusätzliche Dienste starten oder beenden, sobald der Tunnel auf- oder abgebaut ist.
Glossar
-
VPN
-
Virtual Private Network. Ein virtuelles Netz, bei dem ein öffentliches Netzwerk zum Austausch privater Daten genutzt wird.
-
Tunnel
-
Zum Transport der privaten Daten verpackt das VPN diese in verschlüsselter Form in Pakete des genutzten öffentlichen Netzwerks. So baut es quasi einen Tunnel zwischen Sender und Empfänger durch das öffentliche Netz auf.
Infos
[1] OpenVPN: http://openvpn.net
[2] Windows-Frontend für OpenVPN: http://openvpn.se
[3] Peter Guntmann, “Schutz (be)dürftig”: Linux-Magazin 01/2004, S. 84
[4] DynDNS, Dynamische Adressen: http://www.dyndns.org
[5] Server- und Client-Skript für OpenVPN 1.x: http://www.mirko-doelle.de/linux/openvpn-server.sh, http://…/openvpn-client.sh





