Wenn ein Computer mit dem Internet verbunden ist, ist er ein Teil des „ihn umgebenden Netzes“. Nimmt er eine Verbindung zu einem Virtual Private Network (VPN) auf, so erhält er eine andere IP-Adresse und wird damit auch ein Teil dieses anderen Netzes. Der Vorgang ist vergleichbar mit dem Umstecken des Netzwerkkabels oder der Auswahl eines anderen WiFi Netzes. Meistens werden VPN sinnbildlich als „Verlängerung“ eines Firmen-Netzwerkkabels für Mitarbeiter genutzt, die Zuhause oder beim Kunden auf das Firmennetz zugreifen müssen. Ein Szenario gewinnt allerdings mehr und mehr an Bedeutung.
Bei einem web-basiertes VPN wird kein virtuelles „Verlängerungskabel“ gelegt, sondern ein gesicherter Zugriff auf bestimmte Dienste des VPN (z.B. Firmennetz) realisiert. Diese Dienste müssen als Webanwendung oder Proxy aufgebaut sein.
- Lokale Zugriffsbeschränkungen. Sie sind mit einem Netz verbunden, in dem Zugriffsbeschränkungen herrschen, beispielsweise in Ländern, Hotels oder Umgebungen, die bestimmte Websites/Services blocken. Wenn im VPN-Netz die gewünschten Services erreichbar sind, können Sie sie nutzen.
- Schutz Ihrer Privatsphäre: Sie sind in einem öffentlichen Funknetz mit Ihrem Handy, Tablet oder PC und wollen nicht, dass Ihre Netzwerkanfragen vom Betreiber des öffentlichen Netzes mitgelesen werden können. Wenn das VPN-Netz vertrauenswürdig ist, ist Ihre Privatsphäre besser geschützt.
Ihr Computer muss in der Lage, über das Internet eine Verbindung mit einem VPN-Gateway aufzubauen und alle Netzwerkanfragen über dieses Gateway zu leiten. Der Kontakt zu einem VPN-Gateway sollte über verschlüsselte Verbindungen, sogenannte „VPN-Tunnel“, erfolgen, um eine weitgehend abhör- und manipulationssichere Verbindung durch das ungesicherte, eingeschränkte Netz hindurch zu ermöglichen.
Die Verbindung ist allerdings nur „weitgehend“ sicher, weil die Anzahl und Grösse der Datenpakete Rückschlüsse auf die Daten zulassen. Der VPN-Tunnel ist also an manchen Stellen ein bisschen „durchsichtig“. Sie ist auch nicht wirklich „abhörsicher“, da der Traffic ab dem VPN-Server Standort ja vermutlich unverschlüsselt übertragen wird.
Verbindungsarten
Technisch teilen sich die Verbindungen in
- Site-to-Site: Die Netze der Niederlassungen einer Firma sind untereinander verbunden
- End-to-Site: Sie verbinden sich mit dem einem VPN-Gateway um die gewünschten Services zu nutzen und/oder Ihre Privatsphäre zu schützen. Der Mitarbeiter beim Kunden verbindet sich mit dem VPN des Firmennetzes.
- End-to-End: Der Mitarbeiter verbindet sich nicht direkt mit dem VPN des Firmennetzes, sondern zunächst mit einem VPN-Gateway auf einem anderen Server. Dieser Server stellt dann eine ebenfalls getunnelte Verbindung zum gewünschten Netz her.
- Host-to-Host: Ist der Teil der End-to-End Verbindung, der zwischen zwei Servern stattfindet.
Protokolle
Sicherheit spielt bei der Authentifizierung gegenüber dem VPN und bei der Übertragung der Netzwerkpakete eine Rolle. Wichtig dabei ist die Verschlüsselng der Kommunikationsinhalte und die Authentifizierung aller beteiligten Partner untereinander.
Gängige Protokolle sind beispielsweise IPsec, TLS/SSL und SSH. Diese Protokolle werden auf unterschiedliche Art implementiert.
Eine verbreitete Implementierung ist OpenVPN. In diesem Artikel wollen wir das Open Source Programm auf unserem Root-Server unter Ubuntu 14.04 installieren, mit dem Laptop (MacBook) und Handy (Android) darauf zugreifen und unseren gesamten Netzwerktraffic über diesen Server leiten. Wir müssen dazu den OpenVPN Server auf dem Root-Server installieren und konfigurieren, Zertifikate für Server und Clients erzeugen, sowie die entsprechenden Clients auf Laptop und Telefon installieren und konfigurieren. Als Client nutzen wir auf dem Laptop das Programm Tunnelblick und auf dem Telefon openVPN Connect.
OpenVPN auf Root-Server installieren
Wir installieren folgende Pakete:
sudo apt-get install openvpn sudo apt-get install easy-rsa
In den Paketen sind Beispielkonfigurationen sowie das Verzeichnis für die Schlüsselerzeugung enthalten. Dieses müssen an einen geeigneten Ort entpackt werden:
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/ sudo gunzip /etc/openvpn/server.conf.gz sudo cp -r /usr/share/easy-rsa /etc/openvpn/easy-rsa2
Schlüssel und Zertifikate generieren
Die Schlüssel und Zertifikate sollten auf Ihrem lokalen Rechner generiert und dann auf den Root-Server übertragen werden. Ich mache es in diesem Blogeintrag auf dem Server.
Die Datei vars muss entsprechend Ihrer Daten angepasst werden
nano /etc/openvpn/easy-rsa2/vars
Passen Sie diese Vorlagen in der Datei auf Ihre Daten an
export KEY_COUNTRY="US" export KEY_PROVINCE="CA" export KEY_CITY="SanFrancisco" export KEY_ORG="Fort-Funston" export KEY_EMAIL="me@myhost.mydomain" export KEY_CN=changeme export KEY_NAME=changeme export KEY_OU=changeme export KEY_ALTNAMES=changeme
Bei mir sieht es dann so aus:
export KEY_COUNTRY="CH" export KEY_PROVINCE="ZU" export KEY_CITY="Wallisellen" export KEY_ORG="NOVATREND" export KEY_EMAIL="hagen@novatrend.ch" export KEY_OU="blogvpn" export KEY_ALTNAMES="blogvpn" export KEY_NAME="blogvpn" export KEY_CN="blogvpn"
Aufgrund eines Fehlers wird das Unterverzeichnis für die Keys nicht erstellt (weiterhin in /etc/openvpn/easy-rsa2/):
mkdir keys
Die neueste openssl-x.x.x.cnf muss in openssl.cnf kopiert werden.
cp openssl-1.0.0.cnf openssl.cnf
Die Datei vars muss den Umgebungsvariablen hinzugefügt werden
source ./vars
Nach dieser erstellen wir den Master-Schlüssel und werden eine Certificate Authority (CA)
./clean-all
./build-ca
Wir sind jetzt eine CA und im Verzeichnis /keys wurden die Dateien ca.crt und ca.key erzeugt.
Als nächstes erzeugen wir die Schlüssel für unseren Server
./build-key-server server [name_des_servers]
Nun müssen die Schlüssel für die Clients erzeugt werden, in meinem Fall einen für den PC und einen für das Telefon. Das kann man mit oder ohne Passwort machen. Mit Passwort muss das Passwort bei jedem Anmelden eingegeben werden.
Ohne Passwort:
./build-key client1 ./build-key client2 Mit Passwort:
./build-key-pass client1 ./build-key-pass client2
Jetzt müssen die Diffie-Hellman-Parameter generiert werden. Diese sind nötig, um kryptografische Schlüssel sicher über unsichere Kanäle auszuhandeln.
./build-dh
Alle benötigten Dateien liegen nun im Ordner /keys. Die Dateien mit der Endung .key sind die geheimen Schlüssel, die auf dem Rechner liegen sollten, zu dem sie gehören. Die .crt Dateien sind nicht geheim. server.key bleibt auf dem Server, ca.key muss vom Server entfernt werden und kann auf einem USB Stick gespeichert werden. Jeder Client benötigt noch die Datei ca.crt, damit er den Server identifizieren kann.
Hinweis: Es muss darauf geachtet werden, dass die Dateien nie im ASCII-Modus übertragen werden. Dies kann dazu führen, dass die Datei nicht mehr entschlüsselt werden kann und somit ein Verbinden mit dem openVPN-Server nicht möglich ist. Fehlermeldung: „Error: private key password verification failed“. Man umgeht das Problem, indem man alle zu übertragenden Dateien in ein .tar- oder .rar-Archiv packt.
Konfiguration des openvpn Servers
Die Server-Konfigurationsdatei /etc/openvpn/server.conf muss mit den richtigen Namen der Schlüssel versehen werden.
nano /etc/openvpn/server.conf
Diese Zeilen mit den Schlüsselverweisen müssen angepasst werden:
ca ca.crt cert server1.crt key server1.key dh dh2048.pem
Diese Zeilen müssen auskommentiert werden
push "redirect-gateway def1 bypass-dhcp" user nobody group nogroup
Als letztes muss noch die Datei /etc/rc.local um diese sechs Befehle ergänzt werden
sudo -E nano /etc/rc.local
iptables -A INPUT -i eth0 -m state --state NEW -p udp --dport 1194 -j ACCEPT iptables -A INPUT -i tun+ -j ACCEPT iptables -A FORWARD -i tun+ -j ACCEPT iptables -A FORWARD -i tun+ -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -i eth0 -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
Danach muss der Server neugestartet werden
reboot
Jetzt können Sie den openVPN Server starten
/etc/init.d/openvpn restart
Dann können Sie nachsehen, ob der openVPN Server läuft. So sollte es aussehen
root@server1:~# ifconfig tun0 tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:10.8.0.1 P-t-P:10.8.0.2 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 ...
Client Einrichtung auf Apple OS X
Als Erstes müssen Sie die Dateien ca.crt, client1.crt und client1.key auf Ihrem Max. Zippen Sie die Dateien am besten mit dem Befehl
zip client1.zip ca.crt client1.crt client1.key
Sie müssen nun openVPN auf Ihrem Mac installieren. Es gibt ein Softwarepaket, namens Tunnelblick, das genau das sehr komfortabel tut. Laden Sie es von https://code.google.com/p/tunnelblick/ und installieren Sie es.
Passen Sie diesen Befehl auf die IP-Adresse Ihres Servers an
remote [IP des Root-Servers] 1194
Dann speichern Sie die Datei und entpacken die client1.zip in diesen Ordner, so dass nun die Dateien
ca.crt client1.crt client1.key config.ovpn
enthalten sind. Benennen den Ordner um. Wichtig bei der Umbenennung ist die Endung .tblk.
Aus „Sample Tunnelblick VPN Configuration“ wird so beispielsweise vpn_serverblogger_ch.tblk.
Diese Datei müssen Sie nun doppelt anklicken und Tunnelblick liest die Konfiguration.
Ich wähle Only me
grunzi:~ hagengraf$ ifconfig ... utun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500 inet 10.8.0.6 --> 10.8.0.5 netmask 0xffffffff
Besonders deutlich sehen Sie die Änderung, wenn Sie myipaddress.com aufrufen. Wenn Sie mit dem VPN verbunden sind, sollte dort die IP-Adresse Ihres Root-Servers erscheinen.
Client Einrichtung auf dem Android Telefon
Laden Sie sich die OpenVPN Connect App auf Ihr Android Telefon. Mein grösstes Problem war nun „Wie bekomme ich die Zertifikats- und Konfigurationsdateien auf mein Telefon?
Ich beschreibe dann mal meinen Weg: Ich habe ein Nexus 5 Android Telefon mit Cyanogenmod. Meine Idee war nun einfach ein zip Archiv der vier benötigten Daten auf dem Server zusammenzustellen und dann per Browser vom Telefon herunterzuladen.
Als erstes habe ich mir eine config.ovpn angelegt mit folgendem Inhalt:
client dev tun proto udp remote 46.232.178.78 1194 resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert client2.crt key client2.key comp-lzo verb 3
Dann habe ich die vier Dateien in ein Archiv verpackt
root@server1:/etc/openvpn/easy-rsa/keys# zip client2.zip config.ovpn ca.crt client2.crt client2.key
Auf dem Telefon habe ich mir das Archiv geladen und entpackt
Das Profil wird erfolgreich importiert
- https://help.ubuntu.com/14.04/serverguide/openvpn.html
- http://wiki.ubuntuusers.de/OpenVPN#source-4
- http://ubuntuforums.org/showthread.php?t=2218935
- http://seeseekey.net/blog/110571
- https://code.google.com/p/tunnelblick/
tl;dr: Es ist nicht schwer, ein virtuelles privates Netzwerk auf einem Root-Server, dem PC und dem Mobiltelefon einzurichten und damit ohne Einschränkungen zu arbeiten.
Schreibe einen Kommentar