Die VPN Provider sprießen, dank der “Sicherheits-Politik” in Europa und den USA, wie Pilze aus dem Boden. Seit Juli 2008 gibt es Ivacy, einem durchaus interessanten VPN-Anbieter über den es möglich ist sich der Vorratsdatenspeicherung Europas zu entziehen. Hier geht es mir darum zu zeigen wie man Ivacy unter Linux nutzen kann, genauer gesagt wie man OpenVPN und PPTP unter Linux einrichtet, die Country-Selection Funktion von Ivacy nutzt und wie man einen Socks5 Proxy einrichtet der Verbindungen über Ivacy weiterleitet, dazu später mehr. Diese Anleitung sollte nicht nur mit Ivacy funktionieren, alle VPN-Anbieter bieten OpenVPN oder PPTP(das proprietäre VPN Protokoll von Microsoft).
Update: Habe einen OpenVPN-Abschnitt eingefügt.
Update 4.2.09@20:50: OpenVPN-Abschnitt überarbeitet.
Update 8.2.09@22:15: Artikel nochmals überarbeitet.
Update 21.4.09@22:00: Privoxy-Abschnitt eingefügt.
Bevor es losgeht sollte ich vielleicht noch erwähnen das es sich hierbei um keine Anleitung für Linux-Anfänger oder Ubuntu/Suse-”Profis” handelt. *g*
[toc hint="hover hint" class="toc-right" style=""]
0. Einleitung und Sicherheit
Ich stelle die Verbindung zu Ivacy über eine extra eingerichtete Virtuelle Maschine her, die auf dem VMWare Server meiner 24/7 Kiste läuft. Darauf habe ich eine minimale Arch Linux-Installation am laufen. Dieser Server dient mir als Socks5-Gateway ins Ivacy VPN-Netz.
In wie weit Ivacy auch Genial ist, bleibt die Frage der Vertrauenswürdigkeit eines VPN-Dienstleisters bestehen, insbesondere wenn er so günstig wie Ivacy ist. Die Frage muss sich jeder selbst stellen und daraufhin entscheiden welche Art von Traffic er über das VPN schicken will. Ein Socks5-Gateway erlaubt es sehr viel genauer zu bestimmen und zu kontrollieren was über Ivacy ins Internet geht.
0.1. NAT und DoubleVPN
Bei Ivacy bekommt man keine statische oder dynamische IP. Vielmehr bekommt jeder die gleiche, per NAT werden alle Anfragen nach außen geleitet. Wenn sich so hunderte User hinter einer einzigen IP verbergen, verhilft das allen zu einem erheblichen Grad an Anonymität. Benötigt man einen offenen Port der zu einem Geforwarded wird, so kann man diesen einfach auf der Webseite anfordern und bekommt einen zufälligen zugewiesen.
Außerdem ist es möglich seinen Traffic über 2 Hops von Ivacy zu leiten um so die Anonymität noch zusätzlich zu erhöhen.
1. OpenVPN
OpenVPN muss in einer Version >= 2.1 installiert sein(!). Je nach Distribution installieren und darauf achten das ein tun-Device entsteht. In Arch Linux muss man sich selbst um das erstellen kümmern. Im Windows XP(nicht im Linux Abschnitt warum auch immer) gibt es die notwendigen Konfigurations-Dateien sowie Zertifikate(!). Die Konfigurationsdatei für OpenVPN kann praktisch übernommen werden:
client dev tun proto udp remote openvpn.ivacy.com 1194 resolv-retry infinite nobind persist-key persist-tun ca /etc/openvpn/ivacy-ca.crt cert /etc/openvpn/ivacy-client.crt key /etc/openvpn/ivacy-client.key tls-auth /etc/openvpn/ivacy-tls.key 1 ns-cert-type server comp-lzo verb 3 # Mit Passwort Datei: (geht nur wenn openvpn # mit "--enable-password-save" kompiliert wurde!): auth-user-pass /etc/openvpn/password # sonst so: auth-user-pass redirect-gateway reneg-sec 0 up /etc/openvpn/ivacy-up.sh down /etc/openvpn/ivacy-down.sh |
Die /etc/openvpn/password-Datei enthält Username – neue Zeile – Password, doch wie schon erwähnt kann es sein, das dies nicht funktioniert wenn openvpn ohne “–enable-password-save” kompiliert wurde. Danach noch die Zertifikat-Dateien erstellen die es auf der oben erwähnten Seite auf ivacy.com gibt und die richtigen Berechtigungen(600) geben.
Die up und down Scripte können wohl auch durch /etc/openvpn/update-resolv.conf ersetzt werden(sofern vorhanden), siehe dazu auch den Artikel auf Geekosphere. Ich verwende die Scripte auch dazu um den Socks-Daemon zu starten/beenden. Hier die Scripte:
/etc/openvpn/ivacy-up.sh:
#!/bin/bash cp /etc/resolv.conf /etc/resolv.conf.last echo "nameserver 1.254.2.2" > /etc/resolv.conf echo "nameserver 1.254.2.3" >> /etc/resolv.conf /usr/sbin/sockd -D |
/etc/openvpn/ivacy-down.sh:
#!/bin/bash cp /etc/resolv.conf.last /etc/resolv.conf killall -9 sockd |
Die DNS-Server können der Tabelle unten entnommen werden, jedoch ist mir nur ein OpenVPN-Server von Ivacy bekannt, eben der in Russland, deshalb ist auch keine Country-Selection über OpenVPN möglich! (höchstens über die Double-VPN Funktion) Die OpenVPN Verbindung startet man darauf mit:
openvpn --script-security 3 system --config /etc/openvpn/ivacy.conf |
Nicht vergessen in der /etc/socksd.conf-Datei, “external” auf das verwendete tun-Device(tun0 z.B.) einzustellen.
2. PPTP
Hierfür braucht es pptp(nicht den Server, den Client!), in Arch-Linux heisst das Paket “pptp-linux” in Ubuntu “pptpclient” und auch sonst gibt es das bestimmt bei jeder Distribution als Paket. Also zuerst vergewissern wir uns das pptp installiert ist:
$ pptp --version
pptp version 1.7.2 |
Die Konfiguration besteht nur 2 Dateien, zunächst /etc/ppp/chap-secrets:
[Username] PPTP [Password] * |
Dein Benutzername und Passwort von Ivacy eintragen. /etc/ppp/peers/ivacy
pty "pptp pptp2.ivacy.com --nolaunchpppd" name [Username] remotename PPTP require-mppe-128 file /etc/ppp/options.pptp |
Auch hier den Usernamen ändern. Die Verbindung kann mit
$ pon ivacy debug dump logfd 2 nodetach |
getestet werden. Wird die local und remote IP angezeigt funktioniert alles.
2.1. Country Selection
Ivacy ermöglicht es den VPN-Server nach Land auszuwählen. Zur Verfügung steht USA, England und Russland. Auswählen kann man das unter Windows mit ihren Ivacy Monitor(und den anderen Programmen von Ivycy). Der PPTP-Host bestimmt das Land:
pptp2.ivacy.com Russland pptp3.ivacy.com England pptp4.ivacy.com USA |
Dies also entsprechend oben anpassen, je nach aus welchem Land man ins Internet will. (VDS gilt übrigens auch in England)
Die wichtigsten Einstellungen, das kann sich natürlich alles ändern und man sollte das entsprechend ändern sofern ifconfig ppp0 eine andere IP zeigt:
Russland:
PPTP-Server: 213.232.208.167 (pptp2.ivacy.com)
Gateway: 1.254.2.167
DNS Primary: 1.254.2.2
DNS Secondary: 1.254.2.3
England:
PPTP-Server: 81.222.64.214 (pptp3.ivacy.com)
Gateway: 1.254.3.131
DNS Primary: 1.254.3.2
DNS Secondary: 1.254.3.3
USA:
PPTP-Server: 208.88.226.38 (pptp4.ivacy.com)
Gateway: 1.254.4.128
DNS Primary: 1.254.4.2
DNS Secondary: 1.254.4.3
2.2. Verbindung herstellen
Hier ein Auszug wie das Verbinden funktionieren kann(mit pptp2.ivacy.com, IP: 213.232.208.167):
$ route del -net default # Das Entfernen des Default-Gateways # Der PPTP-Server soll über den eben gelöschten Default-Gateway geroutet werden: $ route add -host 213.232.208.167 gw 10.0.0.1 $ pon ivacy # Die PPTP-Verbindung wird hergestellt # Nach ein paar Sekunden sollte die Verbindung aufgebaut sein... $ ifconfig ppp0 ppp0 Link encap:Point-to-Point Protocol inet addr:1.2.127.104 P-t-P:1.254.2.167 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1406 Metric:1 RX packets:21 errors:0 dropped:0 overruns:0 frame:0 TX packets:24 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:3 RX bytes:2774 (2.7 Kb) TX bytes:1189 (1.1 Kb) # Die P-t-P IP wird als neuer Default-Gateway eingetragen: $ route add -net default gw 1.254.2.167 $ echo "nameserver 1.254.2.2" > /etc/resolv.conf # Eintragen der DNS Adressen: $ echo "nameserver 1.254.2.3" >> /etc/resolv.conf # Noch als kleiner Hint: $ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 213.232.208.167 10.0.0.1 255.255.255.255 UGH 0 0 0 eth0 1.254.2.167 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0 10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 0.0.0.0 1.254.2.167 0.0.0.0 UG 0 0 0 ppp0 |
Die Verbindung sollte jetzt stehen. Ich bin ziemlich sicher das das alles viel einfacher geht, aber mir erschien dieser Weg als der logischste, natürlich schreibt man sich das alles in ein entsprechendes Shell-Skript. (Update: siehe Unten, ivacyConnect.rb)
Hier noch das Gegenstück, das beenden der Verbindung und umleiten der Route:
$ poff ivacy $ route add -net default gw 10.0.0.1 # Bei mir ist 10.0.0.1 der Gateway, entsp. ändern $ echo "nameserver 10.0.0.1" > /etc/resolv.conf # Was auch immer euer DNS ist. |
2.3. Connect Script
Ich dachte ich stelle auch mal mein Script online mit dem ich die Ivacy Verbindung aufbaue: ivacyConnect.rb
Das ganze ist ein Ruby Script, muss natürlich als root ausgeführt werden. Außerdem sollten die Werte am Anfang an das eigene Netzwerk angepasst werden. Es basiert darauf das in der /etc/ppp/peers/ivacy als Hostnamen für den PPTP-Server, “pptp.ivacy.com” eingetragen ist. Je nach Land ändert es dann die IP dieser Domain über die /etc/hosts Datei.
3. Socks v5 Server
Der Vorteil eines solchen Socks5 > Ivacy Gateways liegt einfach darin, das man pro Anwendung entscheiden kann ob sie über Ivacy gehen soll oder nicht. Dazu im nächsten Teil mehr, erstmal zum Einrichten des Socks5 Servers. Zum Einsatz kommt Dante, einem einfach zu konfigurierenden Socks-Server. (Bei Arch Linux ist Dante im AUR zu finden.) /etc/sockd.conf:
logoutput: syslog stdout internal: eth0 port = 1080 external: ppp0 # -- bei OpenVPN zu tun0 oder besser gesagt tunN ändern. method: none clientmethod: none extension: bind connecttimeout: 120 # on a lan, this should be enough if method is "none". iotimeout: 0 # or perhaps 86400, for a day. client pass { from: 10.0.0.0/8 port 1-65535 to: 0.0.0.0/0 } pass { from: 10.0.0.0/8 to: 0.0.0.0/0 command: bind log: connect error } pass { from: 0.0.0.0/0 to: 10.0.0.0/8 command: bindreply udpreply log: connect error } pass { from: 10.0.0.0/8 to: 0.0.0.0/0 protocol: tcp udp } |
Da der Server ohnehin nur in meinem LAN erreichbar ist, verzichte ich auf jedwede Authentifikation. Gestartet wird der Socks5-Dante mit:
$ sockd $ sockd -d # Debug Mode, nützlich bei fehlerhafter Konfiguration |
3.1. Firefox
Von Haus aus kann Firefox Socks Proxy verwenden. In den Netzwerk Einstellungen also die IP des VPN-Gateways und 1080 als Port einstellen. DNS-Requests werden per Default nicht über den Socks geleitet. Um dies zu aktivieren, verändert man die Config-Variable “network.proxy.socks_remote_dns” über “about:config”.
Eine weitere Möglichkeit ist z.B. das FoxyProxy-AddOn. Damit kann sehr schnell der Socks aktiviert werden, oder zwischen eingestellten Proxys ausgewählt werden. Wichtig ist auch hier die DNS über Socks Funktion zu aktivieren. Zu finden in den FoxyProxy Options -> Global Settings -> Use SOCKS proxy for DNS lookups.
Um sich nicht durch Cookies usw. zu verraten empfiehlt es sich ein neues Profil fürs Surfen per VPN anzulegen. Praktisch ist es auch einen zweiten Firefox mit Proxy laufen zu lassen.
3.2. TSocks
Das kleine Programm tsocks erlaubt das transparente Umleiten des Traffics. Nachdem es eingerichtet ist kann man so jedes beliebige Programm über den Socks5 Ivacy Gateway laufen lassen. Nachdem man tsocks installiert hat muss noch folgende Konfigurationsdatei angelegt werden:
/etc/tsocks.conf
local = 10.0.0.0/255.255.255.0 server = 10.0.0.30 server_port = 1080 server_type = 5 |
Jedes beliebige Programm kann jetzt über den Socks-Server geleitet werden, auch dann wenn es selbst gar keinen Socks-Proxy unterstützt. Dazu wird einfach tsocks vorangestellt, z.B.:
tsocks wget http://google.com/ |
Zu beachten ist, das die DNS-Aufrufe weiterhin über den in resolv.conf eingestellten DNS-Server laufen und so neben dem kleinen Anonymitätsverlust, auch die internen Ivacy-Seiten(.site) nicht aufgelöst werden können.
4. Privoxy: HTTP Proxy Server
Viele Anwendungen unterstützen keine Socks5 Proxys, daher ist ein gewöhnlicher HTTP-Proxy manchmal ganz praktisch. Privoxy kennen bestimmt viele in Verbindung mit Tor, für unsere VPN-Gateway VM muss lediglich die folgende Zeile in der Konfiguration(/etc/privoxy/config) geändert werden:
listen-address 127.0.0.1:8118 ändern auf die lokale IP: listen-address 10.0.0.30:8118 |
Das war dann schon alles zum Thema Ivacy, ich werde den Artikel auch in Zukunft überarbeiten wenn mir neues dazu einfällt. Anmerkungen und Feedback ist natürlich wie immer gern gesehn, ich hoffe einigen Linux-Usern damit geholfen zu haben.