Sichere WLAN-Vernetzung mit verschlüsseltem OpenVPN-Tunnel

Aus LinuxUser 10/2002

Sichere WLAN-Vernetzung mit verschlüsseltem OpenVPN-Tunnel

Geschützter Tunnel

Drahtlose Netzwerke sind zwar praktisch, aber auch gefährlich: Die eingebaute WEP-Verschlüsselung ist für einen Angreifer kein ernstes Hindernis, er kann Daten abhören, manipulieren und Pakete einschmuggeln. Abhilfe schafft ein verschlüsselter Tunnel: OpenVPN schützt die Daten.

Bei einem Wireless-LAN genügt es, wenn ein Angreifer mit seinem Laptop vor dem Grundstück des Opfers steht. Schon finden alle Datenpakete den Weg über die WLAN-Karte in das Notebook des Bösewichts. Fast so, als hätte das Opfer an der nächsten Bushaltestelle eine Netzwerkdose montiert und gehofft, dass sich niemand einklinkt. Besonders in Großstädten ist das Risiko auch für Privatanwender sehr hoch. So genannte Wardriver sind auf der Suche nach WLANs, um den Internetzugang zu schnorren, Daten abzuhören oder den internen Server zu hacken und lahm zu legen.

Während bei drahtgebundenen Netzwerken ein Angreifer Zugang zu einer Netzwerkdose oder zum Kabel braucht, lässt sich ein WLAN nicht durch Mauern und Zäune aufhalten. Um die Daten dennoch zu schützen, gibt es seit der Anfangszeit der drahtlosen Netze ein Verfahren namens “Wireless Equivalent Privacy”. WEP sollte eine Sicherheit bieten, die der drahtgebundener Netze gleicht. Dazu nutzt es einen eigenen Verschlüsselungsalgorithmus. Zunächst waren Schlüssellängen von 40 Bit vorgesehen, heutige Geräte arbeiten mit 128 Bit. Doch der verwendete Algorithmus ist schwach: 40-Bit-Schlüssel sind in wenigen Minuten zu knacken, selbst die 128-Bit-Keys halten einem Angriff nur wenige Tage stand. WEP bietet also kaum Schutz.

Verschlüsselung

Abhilfe bringt ein Virtuelles Privates Netz (VPN), das alle Daten entgegen nimmt, verschlüsselt, drahtlos überträgt und am anderen Ende wieder auspackt. Ein VPN nutzt das herkömmliche WLAN, sieht für den Client aber aus wie ein zusätzliches Netz – eben virtuell. Abbildung 1 verdeutlicht das Prinzip anhand des VPN-Pakets OpenVPN [1]: Laptop und Desktop sind über ein WLAN miteinander verbunden. Im drahtlosen Netz sind beide über ihre reale IP-Adresse zu erreichen. Das VPN gibt Laptop und Desktop je eine zusätzliche IP-Adresse. Alle Daten, die über die virtuellen Adressen gesendet werden, verpackt das VPN und sendet sie an die reale IP des Gegenübers. Der Empfänger packt die Daten wieder aus und tut so, als ob sie über seine virtuelle Adresse hereingekommen wären. Dadurch entsteht ein Tunnel zwischen Laptop und Desktop.

Abbildung 1: Das Virtuelle Private Netz wird durch einen Tunnel geleitet, der an den realen IP-Adressen von Laptop und Desktop beginnt und endet

Abbildung 1: Das Virtuelle Private Netz wird durch einen Tunnel geleitet, der an den realen IP-Adressen von Laptop und Desktop beginnt und endet

Zusätzliche Firewall-Regeln sorgen dafür, dass beide Rechner nur die Daten annehmen, die durch den Tunnel gekommen sind. Pakete, die ein Angreifer direkt in das WLAN einschleust, haben damit keine Chance.

Das VPN benutzt kryptographische Verfahren, um den Tunnel zu schützen. Im Gegensatz zum unsicheren WEP kommen dabei bekannte und geprüfte Algorithmen zum Einsatz, die ein hohes Maß an Sicherheit bieten. Der Tunnel schützt damit die Daten, die durch ihn geleitet werden, vor neugierigen Blicken. Er stellt auch sicher, dass sich niemand als berechtigter Laptop ausgeben und ebenfalls durch den Tunnel senden kann – die Tunnelwände halten dicht.

OpenVPN

Das VPN-Prinzip wird von verschiedenen Protokollen, Produkten und Projekten umgesetzt. Eine stabile und einfache Umsetzung, die ohne Eingriff in den Kernel oder den IP-Stack auskommt, ist OpenVPN. Es sammelt an beiden Enden des Tunnels die Datenpakete, die für die Gegenseite bestimmt sind. Dann verschlüsselt es sie mithilfe eines lokal hinterlegten Schlüssels und sendet die so geschützten Pakete zur anderen Seite. Diese packt die Daten aus und prüft die Herkunft. Nur Daten, die mit dem richtigen (nur den beiden Seiten bekannten) Schlüssel verpackt wurden, werden ausgepackt und weitergeleitet, andere verworfen. So tunneln Datenpakete in sicheren Containern durch ein Meer der Unsicherheit.

Das folgende Beispiel geht davon aus, dass das drahtlose Netz über wlan0 angebunden ist. Der Desktop-Rechner hat zusätzliche eine herkömmliche, drahtgebundene Netzwerkkarte, die mit eth0 angesprochen wird. Über dieses Ethernet sind andere Rechner im heimischen Netz sowie das Internet zu erreichen.

Installation

Um OpenVPN zu installieren, holt man sich am besten von [1] das Source-Paket openvpn-1.3.1.tar.gz, packt es aus, übersetzt und installiert es (als Root).

tar -xvzf openvpn-1.3.1.tar.gz
cd openvpn-1.3.1
./configure --disable-lzo
make
make install

Der Configure-Aufruf ist hier mit dem Parameter --disable-lzo angegeben, der schaltet die Kompression ab. Alternativ kann man auch die LZO-Bibliothek [3] installieren. Auf jeden Fall nötig ist die OpenSSL-Bibliothek, zusammen mit den Entwickler-Dateien. Bei SuSE sind das zwei getrennte Pakete: openssl und openssl-devel.

Wer Debian benutzt, hat es leichter. Ihm genügt folgender Aufruf, um OpenVPN zu installieren:

apt-get install openvpn

Die OpenVPN-Entwickler stellen auch RPM-Pakete für Red Hat 7.2 und 7.3 zur Verfügung.

TUN-Device

Das Tunnel-Device ist in aktuellen Kernel bereits enthalten, für ältere Versionen ist das Paket auf [2] erhältlich. Wer den aktuellen Kernel selbst übersetzt, findet in make xconfig das TUN-Modul in der Sektion “Network device support” unter dem Namen “Universal TUN/TAP device driver support”.

Das Modul lässt sich auch einzeln nachträglich übersetzen und nachinstallieren, ohne den ganzen Kernel auszutauschen. Nach dem Konfigurieren des Kernels genügt:

make modules
make modules_install

Nun muss noch das Device-File /dev/net/tun angelegt werden. Falls das Verzeichnis /dev/net/ noch nicht vorhanden ist: mkdir /dev/net/. Dann noch das Device anlegen:

mknod /dev/net/tun c 10 200

Erste Schritte

Falls nicht schon vorhanden, ist als erstes das OpenVPN-Paket zu installieren (siehe Kasten “Installation”). Die im Folgenden beschriebene einfache Prozedur setzt statische IP-Adressen voraus, die Computer müssen also eine feste Adresse haben und sie nicht nach jedem Reboot ändern. Mit dynamischen Adressen, die ein DHCP-Server verteilt, wäre das Verfahren komplizierter.

OpenVPN nimmt keine Änderungen am Kernel vor. Damit das Umleiten der Pakete dennoch klappt, nutzt es den TUN/TAP-Treiber [2]. Das geht ziemlich einfach, da das entsprechende Kernelmodul längst zur Standardausstattung der großen Distributionen gehört.

Das Modul muss nur noch geladen werden. Folgendes Kommando als Root-User eingeben genügt:

modprobe tun

OpenVPN benötigt Schlüssel, um sicher zu arbeiten. In der einfachsten Variante haben beide zu verbindenden Rechner den gleichen geheimen Schlüssel, shared secret nennt sich das. Das Kommando

openvpn --genkey --secret\geheimer.key

erzeugt so einen Schlüssel und legt ihn in der Datei geheimer.key ab. Diesen Key dürfen nur die beiden Rechner kennen, und dort nur für Root lesbar sein – wer den Schlüssel kennt, kann den Tunnel problemlos knacken.

Die Key-Datei muss auf den zweiten Rechner kopiert werden, und dieser Vorgang muss abhörsicher sein. Auf der Funkstrecke könnte schon jemand mitlauschen – am besten nimmt man eine Diskette, die man anschließend vollständig formatiert. Wer bereits OpenSSH, PGP, GnuPG oder Ähnliches installiert hat, kann auch diese Programme benutzen.

Tunnel graben

Nun geht es daran, den Tunnel zu erzeugen. Dazu benötigt OpenVPN die (feste) IP-Adresse des Zielrechners, den Namen des Tunnel-Devices (standardmäßig tun0) sowie die beiden virtuellen IP-Adressen für das VPN. Und natürlich die Datei mit dem Schlüssel. Auf dem Laptop sieht das so aus:

openvpn --dev tun0\
--remote [Reale_DesktopIP]\
--ifconfig [Virtuelle_LaptopIP]\[Virtuelle_DesktopIP]\
--secret geheimer.key

Das Kommando muss von Root aufgerufen werden, wie auch alle folgenden Befehle. Auf dem Desktop lautet dieser Aufruf mit angepassten IP-Adressen:

openvpn --dev tun0\
--remote [Reale_LaptopIP]\
--ifconfig [Virtuelle_DesktopIP]\[Virtuelle_LaptopIP]\
--secret geheimer.key

Die virtuellen Tunneladressen sind (fast) beliebig, es müssen aber private Adressen sein. Die virtuellen Adressen sollten auch aus einem anderen Block stammen als die realen Adressen, da somit das Routing einfacher wird – reales und virtuelles Netz sind leicht zu unterscheiden.

Adressvergabe

Als konkretes Beispiel könnte die WLAN-Karte des Laptops die reale IP-Adresse 172.16.0.1 haben, der Desktop 172.16.0.2. Das VPN braucht eigene Adressen aus einem privaten Adressraum, etwa 10.0.0.1 als virtuelle Laptop-IP-Adresse und 10.0.0.2 für den Desktop. Damit lautet das Kommando auf dem Laptop:

openvpn --dev tun0\
--remote 172.16.0.2\
--ifconfig 10.0.0.1  10.0.0.2\
--secret geheimer.key

Und auf dem Desktop:

openvpn --dev tun0\
--remote 172.16.0.1\
--ifconfig 10.0.0.2  10.0.0.1\
--secret geheimer.key

Ob der Tunnel steht, zeigt ein abschließender Ping-Test. Auf dem Laptop sollte ping 10.0.0.2 funktionieren und zeigen, dass die virtuelle IP-Adresse des Desktops erreichbar ist.

Wenn alles klappt, kann man OpenVPN auch als Daemon starten, der im Hintergund arbeitet und seine Meldungen über Syslog ausgibt. Dazu muss der Aufruf die Option --daemon enthalten. Aber Vorsicht: Jetzt muss man die Datei, die den geheimen Schlüssel enthält, mit ihrem absoluten Pfad angeben.

Der richtige Weg

Der Tunnel steht und die Pakete wandern brav zum anderen Ende – aber Laptop und Desktop müssen auch wissen, welche Pakete durch den Tunnel gehen sollen. Ist die virtuelle IP-Adresse des Gegenübers angegeben, dann klappt das schon. Der OpenVPN-Aufruf setzt die Route für genau diese Adresse passend. Alle anderen Adressen werden wie vorher geroutet – am Tunnel vorbei.

Der Weg vom Desktop zum Laptop klappt schon, wenn der Laptop mit seiner neuen virtuellen Adresse angesprochen wird. Die alten realen Adressen der WLAN-Karten in Laptop und Desktop erfüllen nur noch einen Zweck: Sie sind die Endpunkte des Tunnels. In normalen Verbindungen haben sie nichts zu suchen.

Der Weg vom Laptop zurück zum Desktop und weiter zu den anderen Rechnern im eigenen Netz und im Internet benötigt noch etwas Handarbeit: Die Default-Route ist neu zu setzen. Mit folgendem Aufruf sendet der Laptop alle Pakete durch den Tunnel:

route del default
route add default gw 10.0.0.2

Nicht von der Default-Route betroffen sind die Pakete, die zur realen WLAN-IP-Adresse des Desktops (172.16.0.2) gehen. Das ist auch gut so, da der Tunnel selbst an dieser Adresse angedockt ist. Nun muss der Desktop noch wissen, dass er die ausgepackten Pakete bei Bedarf weiterzuleiten hat. Dies geschieht mit folgendem Befehl:

echo "1" > /proc/sys/net/ipv4/\
ip_forward

Feuerdämmend

Damit ist es auf beiden Seiten schon fast getan. Von sich aus nutzen Laptop und Desktop den Tunnel, die Daten sind geschützt und niemand kann sie abhören. Neue Pakete einschleusen ist aber immer noch möglich: So schnorrt ein Angreifer die Internet-Anbindung des Desktops. Selbst wer eine Flatrate hat, wird die Bandbreite nicht gern verschenken. Netz-Dienste, die Client und Server anbieten (etwa Web-, SSH- oder FTP-Server), sind vom WLAN aus angreifbar. Wer ein eigenes Netz betreibt, sieht sich noch einer weiteren Gefahr ausgesetzt: Die Pakete, die ins WLAN eingeschleust werden, umgehen eine Firewall, die zwischen Internet und lokalem Netz steht.

Gegen diese Lücke schützt eine geeignete Firewall-Konfiguration [4]. Der Artikel in der Mai-Ausgabe beschreibt, wie eine Firewall mit iptables funktioniert. Die OpenVPN-Distribution enthält auch ein Beispiel-Firewall-Skript. Für die WLAN-Tunnel-Kombination sind aber zusätzliche Regeln nötig. Abbildung 2 zeigt, an welchen Stellen diese Regeln ansetzen.

Abbildung 2: Einige Firewall-Regeln verhindern, dass Fremde durch das WLAN eindringen. Über das WLAN-Interface darf nur der OpenVPN-Tunnel senden

Abbildung 2: Einige Firewall-Regeln verhindern, dass Fremde durch das WLAN eindringen. Über das WLAN-Interface darf nur der OpenVPN-Tunnel senden

OpenVPN versendet die verschlüsselten Pakete mit UDP an Port 5000 der Gegenseite. Dazu benutzt es das WLAN. Deshalb muss am Interface wlan0 der UDP-Port 5000 freigeschaltet sein. Für das Empfangen von Paketen erledigt das folgender Aufruf:

iptables -A INPUT -i wlan0\
  -p udp --dport 5000 -j ACCEPT
iptables -A INPUT -i wlan0\
  -j DROP

Die letzte Zeile sorgt dafür, dass der Rechner über das WLAN keine anderen Pakete annimmt. Die erste Input-Regel könnte sogar noch strenger sein und mit -s RealeIP vorgeben, von welcher IP-Adresse die Pakete stammen dürfen. Hier wäre die reale IP-Adresse des jeweiligen Gegenübers anzugeben, auf dem Laptop also -s 172.16.0.2.

Auch das Senden und Weiterleiten von Paketen ist einzuschränken:

iptables -A OUTPUT -o wlan0\
  -p udp --dport 5000 -j ACCEPT
iptables -A OUTPUT -o wlan0\
  -j DROP
iptables -A FORWARD -i wlan0\
  -j DROP

Die Tunnel-Enden leiten nur Pakete weiter, die von einem bekannten Partner stammen, der den richtigen (geheimen) Schlüssel benutzt hat. Daher kann man den Paketen vertrauen, die von einem tun-Device stammen, sie annehmen und verarbeiten. Auch das Senden in den Tunnel hinein muss erlaubt sein. Folgende Aufrufen erlauben das Empfangen und Senden:

iptables -A INPUT -i tun0\
  -j ACCEPT
iptables -A OUTPUT -o tun0\
  -j ACCEPT

Auf dem Laptop genügt das schon. An ihm sind keine weiteren Netzwerke angeschlossen, er muss daher keine Pakete weiterleiten. Der Desktop benötigt noch eine Forwarding-Regel und sollte außerdem Masquerading einsetzen, damit der Laptop auch nach außen senden kann:

iptables -A FORWARD -i tun0\
  -j ACCEPT
iptables -t nat -A POSTROUTING\
  -o eth0 -j MASQUERADE

Grenzen der Sicherheit

Der Haken der hier beschriebenen Methode ist, dass sie nur PCs und Laptops sicher anbinden kann. Ein mit WLAN ausgerüsteter Netzwerkdrucker bleibt außen vor: WLAN-fähige Drucker bieten nur WEP als Verschlüsselung an, oft sogar nur WEP-40. Auf den ersten Blick mag der Missbrauch eines Druckers sinnlos erscheinen, weil der Angreifer nicht an seine Ausdrucke herankommt. Eine Lücke im Sicherheitsnetz ist er aber dennoch.

Das Netzwerk ist immer nur so sicher wie die angeschlossenen Rechner. Hat ein Unbefugter Zugriff auf einen OpenVPN-Laptop, dann kennt er den Schlüssel und hat Zugang zum LAN. Drahtlose Geräte sind daher besonders gegen Diebstahl zu sichern. Auch Passwörter für angebotene Dienste sind wichtig. Das mag im Einzelfall unbequem sein, ein Eindringling ist aber deutlich lästiger. (fjl)

Glossar

private Adressen
Normale, öffentliche IP-Adressen sind weltweit eindeutig. Nur so kann ein Paket den Weg zum richtig Ziel finden. Im Gegensatz dazu sind die privaten IP-Adressen nur im lokalen Netz gültig, sie werden nicht in das öffentliche Internet geroutet. Dadurch können mehrere Netze die selben privaten Adressen nutzen. Für diesen Zweck sind einige IP-Bereiche reserviert: 10.x.x.x und 192.168.z.z sowie 172.16.y.y bis 172.31.y.y.
Routing
Wegewahl für IP-Pakete. Linux entscheidet anhand einer Routing-Tabelle, über welches Interface es ein Paket senden muss, damit es seinem Ziel näher kommt. Bei einem Einzelplatz-Rechner ist die Entscheidung einfach: 127.0.0.1 geht über das Loopback-Device lo, der Rest über die Default-Route über eth0 oder Ähnliches. Router mit vielen Netzwerk-Karten müssen hier komplizierter entscheiden.

Infos

[1] OpenVPN: http://openvpn.sourceforge.net

[2] TUN/TAP-Treiber: http://vtun.sourceforge.net/tun/

[3] LZO-Bibliothek: http://www.oberhumer.com/opensource/lzo/

[4] Marc André Selig: Paketfilter-Firewall, LinuxUser 05/2002, S. 30.

LinuxUser 10/2002 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben