Surfen via ssh
Manchmal ist es hilfreich, über eine ssh-Verbindung zu surfen. Besonders dann, wenn man eine unverschlüsselten Verbindung nutzt und die Daten möglichst “verschlossen” gehalten werden sollten. Eine sehr einfache und zugleich effektive Methode besteht in der Möglichkeit, einen ssh-Tunnel zu einem Gerät herzustellen, das selbst in das Internet routen kann, zum Beispiel zu einem Server. Dazu braucht es folgende, einfache Zeile im Terminal:
ssh -D 127.0.0.1:8080 benutzername@servername.tld
Damit wird der Localhost über den Port 8080 auf den angegebenen Server umgeleitet und verschlüsselt. Man sollte aber beachten, dass die Verschlüsselung nur bis zum Server und in der Regel nicht darüber hinaus erfolgt. Allerdings muss man den Applikationen, mit den auf das Internet zugegriffen werden soll, diesen Weg mitteilen. Beim Firefox reichen dazu einige Einstellungen unter der Reiterkarte “Erweitert” und dort in der Unterrubrik “Netzwerk”. Unter “Festlegen, wie sich Firefox mit dem Internet verbindet” muss folgendes eingestellt werden:
Alle Felder leer lassen, ausser das Feld “SOCKS-Host” muss den gleichen Wert wie oben beschrieben aufweisen:
127.0.0.1 auf dem Port 8080
Damit wird der Verkehr vom Feuerfuchs über die ssh-Verbindung gelenkt und ist damit sauber in einem Tunnel untergebracht. Das funktioniert einwandfrei, zumindest bei meinen Versuchen.

Dieses Vorgehen muss natürlich bei allen Programmen gemacht werden, welche über jenen Tunnel mit dem Internet kommunizieren müssen. Von alleine merken die das nicht, dass sie den Tunnel nutzen sollten.
Wahrscheinlich gibt es noch weitaus elegantere Lösungen als die hier angesprochene. Aber zur Not reicht sie allemal.
Nachtrag:
Wie hier in den Kommentaren Marco beschrieben hat, ist es erforderlich, dem Firefox beizubringen, dass er auch für DNS-Auflösungen den Weg über SSH nutzt. Dazu muss folgende Zeile in der Adresszeile der Firefox eingetragen werden:
about:config
Darauf erscheint eine liebliche Warnung, die man am besten einmal durchlist. Danach verspricht man in der deutschen Version, dass man vorsichtig beim Editieren sein will.

In der ellenlangen Liste sucht man nun nach dem Wert
network.proxy.socks_remote_dns
und setzt ihn durch anklicken auf true. Das ist dann schon alles, was bei Firefox (nebst dem Proxy-Eintrag in den Einstellungen) gemacht werden muss.



08. Mai 2010 um 17:24:23 Uhr
Wichtig: In Firefox unbedingt noch network.proxy.socks_remote_dns auf true setzen. Sonst versucht der Client DNS Namen aufzulösen – ohne Nutzung des SSH Tunnels.
08. Mai 2010 um 17:49:44 Uhr
Danke für den Hinweis, Marco!
Das macht man übrigens mit about:config in der Adresszeile des Firefox.
08. Mai 2010 um 18:49:52 Uhr
Danke für den Tipp. So bekomme ich endlich Zugang zu meinem Firmennetz von einigen WiFi-Netzen, die unsere IP blocken. Ich habe zusätzlich noch -P 1234 eingefügt, weil man nicht zwangsweise seinen SSH-Port auf 22 laufen hat… Skript-Kiddies-Schutz für Arme.
08. Mai 2010 um 19:37:00 Uhr
Wie schon gesagt, nicht socks remote dns vergessen (ich finde es btw bescheuert dass das nicht die defaulteinstellung ist). Ansonsten kann das Ganze auch sinnvoll sein, wenn man grad mit GSM unterwegs ist, denn mittels -C kriegt man auch Compression rein (das CompressionLevel kann man in der ssh.conf-Datei festlegen).
Gute Software (Firefox, Pidgin) unterstützt das Ganze, für die weniger gute Software unterstützt wenigstens normalerweise dann HTTP-Proxies, dafür gibt es dann z.B. sowas wie tinyproxy. Geht auch mit APT.
Weiterhin gibt es so Sachen wie Socksify und Tsocks, das mittels ld_preload auch einige andere Programme dazu bringt, Socks zu benutzen.
Außerdem gibt es Transocks, das leitet TCP-Verbindungen an Socks weiter, und erzeugt ein eigenes Netzwerkinterface.
Natürlich muss man sich, wenn man schon bei Transocks angekommen ist, überlegen, warum man nicht gleich ein VPN benutzt.
08. Mai 2010 um 19:41:16 Uhr
wenn man privoxy einsetzt (ja das geht auch ohne tor) kann man in die config
“forward-socks5 / 127.0.0.1:9999 .”
eintragen (port anpassen; ohne “”, aber mit .)
und kann dann in jedem programm das kein socks kann (opera z.b.) den http-proxy localhost:8118 stattdessen verwenden. vorteil: keine dns-probleme
10. Mai 2010 um 10:29:07 Uhr
SSH ist schon eines der Schweizer Taschenmesser, das man dringend im Werkzeugkasten haben sollte. Der von Dir beschriebene “Poor Man’s Proxy” ist nur eines der Highlights, es gibt noch eine ganze Reihe weiterer spannender Möglichkeiten.
12. Mai 2010 um 13:34:32 Uhr
Bitte verwende wie in /etc/services dokumentiert doch den Port 1080 fuer SOCKS.
ssh -D 1080 user@proxy.example.org
Mit tsocks kannst du SOCKS-Proxy fuer andere Programme spielen.
12. Mai 2010 um 16:44:27 Uhr
@foobar: Danke! Wusste ich gar nicht, dass für SOCKS ein Port zugewiesen wurde.