AA_hole_atirme_sxc_1069988.jpg

© Atirme, sxc.hu

Sicherer Durchgang

Quick-and-Dirty-Tunnel mit SSH und Sshuttle

23.04.2012
Für den schnellen Zugriff von unterwegs auf private Daten ist ein VPN oft überdimensioniert. Das geniale kleine Tool Sshuttle dagegen durchtunnelt unsichere Netze auch ohne langwierige Vorbereitungen auf dem Server.

Beim Fernzugriff über unsichere Transportwege wie das Internet lauern Gefahren: Das Abhören von WLAN-Verbindungen an öffentlichen Zugangspunkten stellt für einen Angreifer kaum ein Problem dar. Der Markt hält daher unzählige Lösungen und Produkte parat, um aus der Ferne sicher auf den eigenen Arbeitsplatz oder Server zuzugreifen. Wie komplex das dabei zum Einsatz kommende Instrumentarium ausfällt, hängt von Einsatzart und Sicherheitsbedürfnis ab – also primär von der Frage, was man unter "zugreifen" versteht, also welche Protokolle es im Einzelnen zu tunneln gilt. Klassische VPNs auf Basis von IPSec oder SSL (OpenVPN) bieten hier maximale Transparenz, die man aber mit minimaler Flexibilität erkauft.

Mit einem VPN nutzen Sie die Ressourcen des entfernten Rechners genau so, als säßen Sie direkt davor. Sie greifen dann nach Belieben auf lokale Verzeichnisse, Netzwerkfreigaben und Drucker des entfernten Rechners zu. Beim Aufruf einer Webseite wie www.meineip.de verhält sich der PC im Internet-Café exakt so, als wäre er der entfernte Rechner. VPNs erreichen diesen Grad an Transparenz, indem sie das komplette Netzwerk durch den aufgebauten Tunnel schicken, also sämtliche OSI-Layer und gegebenenfalls auch den DNS-Dienst. Einfache Fernzugriffslösungen auf Proxy-Basis tunneln dagegen je nach Einsatzzweck nur bestimmte Protokolle, etwa HTTP(S).

Allerdings ist ein VPN technisch aufwendig und mitunter relativ langsam. Für das angenommene Ad-hoc-Szenario scheiden VPNs jedoch aus: Sie bestehen stets aus je einer Server- und Client-Komponente und erfordern ein vorheriges Konfigurieren, in deren Verlauf Sie beispielsweise die virtuellen Netzwerkschnittstellen einrichten sowie die erforderlichen Nutzerrechte konfigurieren müssen.

SSH-Tunnel

Möchten Sie mit wenig Aufwand und zudem ad hoc auf einen entfernten Rechner zugreifen, gibt es noch eine Reihe anderer Verfahren, die etwa auf SSH oder Tsocks (siehe Kasten "Dynamic Forwarding mit SSH") basieren und im Einzelnen relativ umständlich ausfallen, wie etwa der doppelte SSH-Tunnel.

Nicht jeder Linux-Nutzer weiß, dass SSH nicht nur ein sicheres, verschlüsseltes Login auf einem entfernten Rechner ermöglicht, sondern auch verschiedene Tunnel-Arten beherrscht. So können Sie mit SSH (beinahe) beliebige andere Protokolle absichern, wozu die SSH-Funktion des Port Forwarding zum Einsatz kommt. Mit SSH-Portforwarding (siehe Kasten "Tunnelbau mit SSH") leiten Sie SSH-Verbindung um, wobei SSH selbst als Proxy fungiert: Auf der einen Seite des Tunnels nimmt es die Verbindung entgegen und stellt sie auf der anderen Seite zum adressierten Server durch, dem Verbindungsendpunkt. Das funktioniert allerdings nur für ein explizit angegebenes Protokoll.

Seit der Version 4.3 von OpenSSH können Sie zudem auch ein vollwertiges VPN als Layer-2- oder Layer-3-Tunnel mit virtuellen Netzwerk-Adaptern (TUN/TAP-Interfaces) aufbauen. Dazu müssen Sie jedoch auf Server- und Client-Seite die entsprechenden TUN/TAP-Devices durch Laden der zugehörigen Kernel-Module einrichten, zudem erweist sich TCP-over-TCP als umständliche und daher eher langsame Angelegenheit. Mit dem neuen Tool Sshuttle kommen Sie dagegen schneller ans Ziel.

Dynamic Forwarding mit SSH

Mit der Dynamic-Option -D verhält sich der SSH-Client wie ein SOCKS-Server (SOCKS-Proxy). Daher ist Dynamic Port Forwarding nützlich, wenn Sie via SSH von einem öffentlichen WLAN-Hotspot über einen gesicherten Tunnel lediglich auf einen einzelnen Dienst des entfernten Rechners zugreifen möchten. Dabei muss es sich allerdings um einen Dienst handelt, für den es einen passenden SOCKS-Client gibt, etwa den Webbrowser. Sie tragen dann in dessen Verbindungsoptionen den lokalen SSH-Client als SOCKS-Proxy mit der frei wählbaren Portnummer ein. Der Aufbau des Tunnels zum entfernten Sshd erfolgt dann mit

$ ssh -D Port Nutzer@Ziel-Host

Möchten Sie nur auf eine Web-Anwendung des entfernten PCs zugreifen, bietet SSH Dynamic Portforwarding also eine ideale Lösung. Möchten Sie andere Dienste auf diese Weise via SSH tunneln, gilt es zu beachten, dass manche Programme keine SOCKS-Proxies unterstützen. In einem solchen Fall können Sie den Wrapper Tsocks installieren.

Tunnelbau mit SSH

SSH kann nicht nur ein sicheres Shell-Login auf einem entfernten Server zu Verfügung zu stellen, sondern sichert mithilfe der Port-Forwarding-Option auch beliebige andere Protokolle ab, wobei SSH als Proxy fungiert. Das ist zwar kein vollwertiger VPN-Ersatz, weil es nur die angegeben Protokolle umleitet, reicht aber für viele Szenarien aus. Das SSH-Portforwarding kennt die zwei Betriebsarten Local Port Forwarding und Remote Port Forwarding. Die Richtung des Tunnelsbaus geben Sie mit den Parametern -L und -R an. Local Port Forwarding leitet eine Verbindung, die an einem frei wählbaren lokalen Client-Port eintrifft, durch den sicheren SSH-Tunnel auf einen Port eines entfernten Servers um:

# ssh User@Ziel-Host -L Port:Ziel-Host:Ziel-Port

So tunneln Sie beispielsweise eine unsichere FTP-Verbindung auf Port 21 über eine sichere SSH-Verbindung, sofern auf dem entfernten Rechner ein FTP- und der SSH-Server (sshd) laufen. Der Verbindungsaufbau beim Local Portforwarding sieht dann so aus wie in Zeile 1 von Listing 1. Mit diesem Kommando bauen Sie am Client-Rechner eine sichere SSH-Verbindung als Benutzer drilling zum entfernten Rechner www.thomas-drilling.de auf. Dabei lauscht der SSH-Client außerdem auf sämtliche Anfragen, die auf dem lokalen Port 5555 eingehen, und leitet diese zum entfernten Rechner www.thomas-drilling.de auf Port 21 um. Steht der Tunnel, starten Sie in einer zweiten Terminal-Sitzung den FTP-Client mit der Zieladresse localhost und dem Port Ziel-Port (Listing 1, Zeile 2).

Listing 1

$ sudo ssh drilling@www.thomas-drilling.de -L 5555:www.thomas-drilling.de:21
$ sudo ftp localhost 5555

Beispielszenario

Stellen Sie sich vor, Sie möchten von einem öffentlichen WLAN-Hotspot aus mit maximaler Transparenz und möglichst geringem Aufwand sicher auf Ihren Arbeitsrechner in der Firma oder auf den privaten Server zugreifen. Der entfernte Server stellt allerdings kein VPN zur Verfügung, oder lediglich eine VPN-Lösung, die komplexe (IPSec) beziehungsweise umständliche Protokolle (PPTP) benutzt, für die Sie keinen passenden Client zur Hand haben.

SSH-Portforwarding möchten Sie aus den oben genannten Gründen auch nicht verwenden. Das im Kasten "TUN/TAP-Tunnel" geschilderte SSH-Tunnel-Feature können Sie ebenfalls nicht nutzen: Zum Einen ist es per Default in OpenSSH auf dem Server deaktiviert, zum Anderen haben Sie weder auf dem Server noch auf dem Client die Möglichkeit, Kernel-Module für TUN- und oder TAP-Devices nachzuladen. Sie stehen damit vor dem gleichen Problem wie zahlreiche Admins beim Thema Traffic-Tunneling in öffentlichen Netzen: Diese verwenden im Normalfall entweder ein VPN, einen SSH-Tunnel oder diverse Proxy-Lösungen, die allesamt port- oder protokollbasiert funktionieren und ein im Einzelfall sehr komplexes Einrichten erfordern.

Zwar verfügt ein Admin in der Regel sowohl über das notwendige Fachwissen als auch über die administrativen Voraussetzungen. Dennoch dürfte sich auch der Fachmann über eine Lösung freuen, die so elegant und einfach funktioniert wie das relativ neue Tool Sshuttle [1] des kanadischen Studenten Avery Pennarun. Sshuttle erfordert auf dem Server nichts weiter als ein SSH-Benutzerkonto (also nicht notwendigerweise root) und Python.

TUN/TAP-Tunnel

OpenSSH ermöglicht es ab der Version 4.3 mit Hilfe der Option -w ein vollwertiges VPN mit einem Layer-2- oder Layer-3-Tunnel mit virtuellen Netzwerk-Adaptern (TUN/TAP-Interfaces) aufzubauen. Allerdings scheidet dieses Verfahren für das vorliegende Beispiel aus, weil es auf Server- und Client-Seite ein Aufsetzen der entsprechenden TUN/TAP-Devices durch Laden der zugehörigen Kernel-Module erfordert. Weiterhin setzt es voraus, dass in der Konfiguration des SSH-Daemons auf dem Server die Option PermitTunnel yes aktiviert ist, was per Default nicht der Fall ist. Die Befehle zum Aufsetzen der virtuellen Netzwerkadapter auf Server und Client sowie den Aufbau des Tunnels via SSH vom Client aus zeigt Listing 2.

Listing 2

# Client
$ sudo ifconfig tun0 10.0.2.1 netmask 255.255.255.252
# Server (IP-Adresse auf dem Zielrechner)
$ sudo ifconfig tun0 10.0.2.2 netmask 255.255.255.252
$ sudo route add -host Ziel-Host dev eth0
# Verbindungsaufbau
$ ssh -l User -p Sshd-Port -w0:0 Ziel-Host

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 4 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

  • Beinahe-VPN per SSH
    Der in OpenSSH eingebaute SOCKS-Proxy und das auf SSH aufbauende Python-Programm Sshuttle springen in die Bresche zwischen einfachem Port-Forwarding und einem vollwertigen VPN.
Kommentare

Infos zur Publikation

LU 11/2014: VIDEOS BEARBEITEN

Digitale Ausgabe: Preis € 4,95
(inkl. 19% MwSt.)

Mit der Zeitschrift LinuxUser sind Sie als Power-User, Shell-Guru oder Administrator im kleinen Unternehmen monatlich auf dem aktuelle Stand in Sachen Linux und Open Source.

Sie sind sich nicht sicher, ob die Themen Ihnen liegen? Im Probeabo erhalten Sie drei Ausgaben zum reduzierten Preis. Einzelhefte, Abonnements sowie digitale Ausgaben erwerben Sie ganz einfach in unserem Online-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

HINWEIS ZU PAYPAL: Die Zahlung ist auch ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!       

Tipp der Woche

Schnell Multi-Boot-Medien mit MultiCD erstellen
Schnell Multi-Boot-Medien mit MultiCD erstellen
Tim Schürmann, 24.06.2014 12:40, 0 Kommentare

Wer mehrere nützliche Live-Systeme auf eine DVD brennen möchte, kommt mit den Startmedienerstellern der Distributionen nicht besonders weit: Diese ...

Aktuelle Fragen

WLAN-Signalqualität vom Treiber abhängig
GoaSkin , 29.10.2014 14:16, 0 Antworten
Hallo, für einen WLAN-Stick mit Ralink 2870 Chipsatz gibt es einen Treiber von Ralink sowie (m...
Artikelsuche
Erwin Ruitenberg, 09.10.2014 07:51, 1 Antworten
Ich habe seit einige Jahre ein Dugisub LinuxUser. Dann weiß ich das irgendwann ein bestimmtes Art...
Windows 8 startet nur mit externer Festplatte
Anne La, 10.09.2014 17:25, 6 Antworten
Hallo Leute, also, ich bin auf folgendes Problem gestoßen: Ich habe Ubuntu 14.04 auf meiner...
Videoüberwachung mit Zoneminder
Heinz Becker, 10.08.2014 17:57, 0 Antworten
Hallo, ich habe den ZONEMINDER erfolgreich installiert. Das Bild erscheint jedoch nicht,...
internes Wlan und USB-Wlan-Srick
Gerhard Blobner, 04.08.2014 15:20, 2 Antworten
Hallo Linux-Forum: ich bin ein neuer Linux-User (ca. 25 Jahre Windows) und bin von WIN 8 auf Mint...