sshuttle: The poor men’s VPN

Angeregt durch einen Artikel der Zeitschrift “LinuxUser” habe ich mich ein bisschen mit dem Programm sshuttle beschäftigt, ein Tool mit dem man binnen weniger Minuten einen einfachen transparenten Proxy-Server aufsetzen kann, der ähnlich einem VPN verschiedenste Protokolle tunnelt.

Was ist/kann sshuttle?

sshuttle ist laut Angaben der Entwickler ein einfaches Tool um binnen weniger Minuten mithilfe eines SSH-Zugangs (der keine root-Rechte voraussetzt) einen transparenten Proxy zu starten, der beliebige Ports tunneln kann. Dazu öffnet sshuttle eine einfache SSH-Sitzung, kopiert ein Python-Skript auf den Remote-Server, ändert mithilfe von iptables einige Netzwerkregeln und tunnelt fortan alle Verbindungen (bzw. alle die man eben tunneln möchte) durch diese SSH-Verbindung. Damit es keine Probleme bezüglich TCP-over-TCP gibt, wird der TCP-Datenstrom lokale zusammengesetzt und auf dem Server wieder in einzelne Pakete geteilt.

Was benötigt man für sshuttle?

Einen Computer mit Linux, FreeBSD oder MacOSX samt root-Rechten, sowie einen SSH-Zugang auf dem Python installiert ist (keine root-Rechte benötigt). Auf dem lokalen System wird außerdem das Programm iptables benötigt, damit sshuttle die Daten transparent Tunneln kann.

Wo liegt der Vorteil gegenüber SSH-Tunnel?

Ganz einfach, man kann beliebig viele Ports mit nur einem Befehl transparent über ein Remote-System tunneln. Im Gegensatz zu einem SSH-Socks Proxy muss man dabei keinerlei Änderungen am Browser vornehmen und kann noch dazu beliebige andere Ports außer HTTP und HTTPS tunneln. Natürlich könnte man auch händisch einzelne Ports mit SSH tunneln, müsste dazu aber immer noch Firewallregeln anlegen, damit das ganze auch transparent für alle Programme funktioniert.

Ok, ich will es ausprobieren! Was muss ich tun?

Sshuttle lässt sich bequem aus den Repositorien vieler Linux-Distributionen installieren. Unter Ubuntu findet sich etwa das Paket sshuttle im Universe Repository, während man für Arch Linux etwa das Paket sshuttle-git aus dem AUR installiert. Die Installation reicht übrigens auf dem lokalen System, da sich sshuttle wie bereits angesprochen selbst auf das Zielsystem kopiert. Alternativ bezieht man sshuttle direkt aus dem GIT-Repositorium:
git clone git://github.com/apenwarr/sshuttle
Da es vollständig in Python geschrieben ist, kann man es im Prinzip auch gleich ausführen:
sshuttle --dns -r sshserver 0.0.0.0/0
Das war es auch schon! Wer den Befehl ausgeführt hat wird nach dem lokalen root-Passwort gefragt und wer diese Seite anschließend neulädt, sollte nun statt seiner ursprünglichen öffentlichen IP-Adresse, die des Zielhostes sehen:

Öffentliche IP-Adresse: 212.129.34.37

Der Parameter –dns ist übrigens optional und teilt sshuttle mit, dass es auch alle DNS-Anfragen tunneln sollte!

Fazit

Sshuttle ist eine tolle und einfache Möglichkeit binnen kurzer Zeit seinen gesamten Traffic über einen einfachen SSH-Zugang mit Python-Interpretor zu tunneln. Das kann zum Beispiel dann hilfreich sein, wenn man sich vor bestimmten DNS-Attacken schützen möchte oder seinen Traffic vor den neugierigen Augen anderer in einem öffentlichen WLAN schützen möchte. Mir gefällt die Idee und es ist auf alle Fälle schneller eingerichtet als ein OpenVPN-Server oder ähnliches und bietet beinahe die gleiche Funktionalität!

  1. Marek sagt:

    Ein super Tipp. Sehr schöne Sache. Einfach in der Anwendung aber voll funktional.

  1. Es gibt noch keine Trackbacks für diesen Post!

Kommentar hinterlassen