Ein SSH-Tunnel ist ein gesicherter Kanal, der Netzwerk-Protokolle einbetten und verschlüsselt übertragen kann. Der Tunnel führt dabei meist von einem Rechner innerhalb eines fremden, potenziell unsicheren Netzwerks zu einem Server bzw. Netz des Vertrauens. Durch diese Form der Portweiterleitung können TCP-Protokolle wie HTTP, Telnet, SMTP oder RDP durch ein fremdes Netz hindurch vertraulich genutzt bzw. überhaupt erst zugänglich gemacht werden.
Gründe zum Bau eines Tunnels
Der Bau eines SSH-Tunnels macht Sinn, wenn man sich als mobiler Nutzer mit einem Notebook o.ä. physisch in unbekannten Netzen bewegt (Hotel, Cafe oder Hotspot) und deshalb eine Verschlüsselung des Netzverkehrs wünscht.
Ein weiterer Grund für den Bau eines SSH-Tunnels kann die Firewall bzw. ein anderer Filtermechanismus des fremden Netzes sein, welcher evtl. nicht bei allen Protokollen (Ports, Webseiten…) mitspielen will und den Zugriff auf bestimmte Dienste des entfernten Servers verweigert. Der SSH-Tunnel kann diese Einschränkung umgehen, indem er die Daten des blockierten Protokolls rein über den SSH-Port (i.d.R. Port 22) schickt und sich so trotzdem mit dem gewünschten Dienst verbindet.
„Veranschaulichung SSH Tunneling“ von Christian Mueller; lizenziert unter Creative Commons-Lizenz Namensnennung-Weitergabe unter gleichen Bedingungen 3.0 Unported. Bild anklicken für weitere Lizenzdetails.
Voraussetzung für den Tunnel ist eine funktionierende SSH-Verbindung auf den Server des Vertrauens (im Schaubild hinter der „Firewall 2″). Erlaubt die Fremdnetz-Firewall (im Schaubild „Firewall 1″) die SSH-Verbindung, kann im Prinzip jeder auf dem Server nutzbare Dienst verschlüsselt durch das „unsichere“ Netz getunnelt werden.
SSH-Tunnel: Firewall umgehen und verschlüsselt über Proxy surfen
Das folgenden Szenario zeigt exemplarisch, wie ein SSH-Tunnel zum eigenen, entfernten Proxy (z.B. Squid, Port 3128) aufgebaut wird, z.B. weil die Firewall des Hotels bestimmte Webseiten aus übertriebener Vorsicht blockiert hat oder der schniefende Hotelier W. Eiershark nicht unser Vertrauen genießt. Mit dem SSH-Tunnel auf den eigenen Proxy soll die Sperre umgangen werden und/oder das Surfvergnügen vor neugierigen Augen im Fremdnetz geschützt werden:
ich@hotel: ssh nutzer@meinserver -L 4444:meinserver:3128
Nach der Eingabe des SSH-Passworts ist nun der Port 3128 der entfernten Maschine „meinserver“ an den frei gewählten Port 4444 auf dem lokalen Rechner (im Hotelzimmer) gebunden. Im Schaubild oben wurden die Ports 15900 – 15904 benutzt. Das symbolische „meinserver“ muss natürlich individuell angepasst werden, z.B. mit der IP-Adresse des Zielservers.
Noch einen Tick sicherer geht es mit der Option -N. Diese beschränkt die SSH-Verbindung rein auf ihre Tunnelfunktion und unterbindet die Ausführung von weiteren Befehlen. Mit der Option -f wird SSH in den Hintergrund geschickt. Und mit -C fragen wir eine Komprimierung an, um die Datenübertragung zu beschleunigen. Komprimierung ist jedoch nur sinnvoll, wenn der Flaschenhals eine lahme Verbindung ist. Bei schwachbrüstigen Rechnern kann die Komprimierung soviel Ressourcen beanspruchen, dass sich der Effekt umkehrt. Die optimierte Version des Tunnelbaus könnte also so aussehen:
ich@hotel: ssh -fCN nutzer@meinserver -L 4444:meinserver:3128
Alternative: Tunnelbau mit PuTTy
Als grafische Alternative zum Tunnelbau bietet sich PuTTy an, das für Linux und Windows frei erhältlich ist. Nach der Installation werden zunächst im Sitzungsmenü Zielserver und Zielport für SSH angegeben:
Danach legt man im Untermenü „SSH“ und dann „Tunnels“ den lokalen Port 4444 sowie Zielrechner und Zielport fest (meinserver:3128):
Dann noch auf „Add“ klicken und den Tunnel durch Eingabe des SSH-Passworts öffnen.
Browsereinstellungen anpassen
Ob Kommandozeile oder PuTTy: Nun muss man nur noch dem Browser beibringen, dass er als Proxy „localhost:4444″ nutzen soll. Alle Anfragen an „meinserver:3128″ laufen danach über Port 4444 des lokalen Rechners und werden von dort durch das unsichere Netz verschlüsselt an den Proxy auf „meinserver“ getunnelt – und zurück. Für den Webbrowser Midori z.B. ändert man die Einstellungen wie folgt:
Man kann nun prüfen, ob alles geklappt hat, indem man z.B. What is my IP ansurft. Wenn nun die IP-Adresse von „meinserver“ angezeigt wird, dann werden alle Browseranfragen verschlüsselt zum Proxy getunnelt. Manche Proxies geben jedoch die Ursprungs-Client-ID weiter. Die zuverlässigere Methode ist es daher wohl, den Verkehr mit einem der gängigen Netzwerkanalysetools zu beobachten und sicherzustellen, dass ein Webseitenaufruf keine HTTP-, sondern SSH-Einträge erzeugt.
Nach diesem Prinzip kann man auch andere Dienste auf dem eigenen Server verschlüsselt und unter Umgehung eventueller Firewallhindernisse erreichen (Mailserver, diverse Chatanwendungen usw.). In der Konfiguration des jeweiligen Programms muss man nur die jeweiligen Einstellungen so anpassen, dass das Programm den festgelegten Port auf „localhost“ als Tunneleingang nutzt.
Weiterführende Infos
Dieser Artikel heißt „SSH-Tunnel bauen und sicher surfen“. Die Sicherheit bezieht sich dabei natürlich nur auf den Verkehr, der verschlüsselt zwischen Rechner und Proxy stattfindet. Der Verkehr zwischen Proxy und den angesurften Seiten in der „bösen Wolke“ ist mit Ausnahme von HTTPS-Verbindungen natürlich wie immer unverschlüsselt.
Außerdem sollte man sich darüber im Klaren sein, dass beim Tunnel zum Proxy die DNS-Anfragen weiterhin im unsicheren Netz sichtbar sind und Rückschlüsse auf angesurfte Domains zulassen können (nicht jedoch auf konkrete Seiten).
Des weiteren gibt es die Option einen SOCKS-Proxy aufzusetzen, der eine dynamische Portweiterleitung betreibt und durch den auch TCP-Protokolle generisch getunnelt werden können (ohne einen eigenen Tunnel für jeden einzelnen Dienst aufsetzen zu müssen). Der Server am Tunnelende leitet dabei alle Anfragen (theoretisch) an den zugehörigen Port weiter. Interessenten sollten sich dazu die Option -D von ssh ansehen.
Fehlt nur noch der Hinweis, das das Tunneln ggf. nicht den Richtlinien des Fremdnetzbetreibers entspricht und im Zweifelsfall dessen Einverständnis eingeholt werden muss. Happy Tunneling!
Links:
Wikipedia: Tunnel (Rechnernetz)
Proxy Firefox through a SSH-Tunnel
http://www.revsys.com/writings/quicktips/ssh-tunnel.html
http://paulstamatiou.com/how-to-surf-securely-with-ssh-tunnel
9 KommentareDiesen Beitrag teilen: Google+ Facebook Twitter E-mail
Permalink | © 2011 by Netz 10 | Tags: 3128, bash, browser, DNS, Domain Name System, encrypt, firefox, firewall, hotel, hotspot, howto, http, linux, localhost, midori, netzwerk, proxy, Proxy server, putty, rdp, Secure Shell, server, shell, sicherheit, SMTP, squid, ssh, ssh tunnel, sshd, telnet, tunnel, tunnelbau, ubuntu, verschlüsselung, windows, wlan This feed is for personal, non-commercial use only. Fingerprint: c284f6207b7b716bd675c8214d0cfaa9