SSH-Tunnel – Definition, Anwendungsgebiete und Einrichtung

Um auf Websites zugreifen zu können, die aus Ihrem Netzwerk nicht erreichbar sind, bietet sich ein SSH-Tunnel an: Statt die Website direkt aus Ihrem Netzwerk heraus anzusteuern, nehmen Sie beim SSH-Tunneling den Umweg über einen SSH-Server.

vServer (VPS) von IONOS

Günstige und starke VPS für Webserver, Mailserver und eigene Anwendungen mit persönlichem Berater und 24/7 Support!

100 % SSD-Speicher
Bereit in 55 Sek.
SSL Zertifikat

Was genau ist ein SSH-Tunnel?

Einen SSH-Tunnel können Sie sich, ganz wie einen echten Tunnel, als eine Verbindung zwischen zwei Punkten vorstellen. Der erste dieser Punkte, sozusagen der Startpunkt, ist ein Rechner, der sich im Normalfall in einem ungesicherten Netzwerk befindet. Ziel des Tunnels sind Server oder Netzadressen, auf die Sie aus Ihrem Netzwerk heraus nicht zugreifen können oder wollen. Ein SSH-Tunnel fungiert also als Verbindung zwischen verschiedenen Servern und verknüpft hierzu die TCP-Ports zweier Rechner miteinander. Grundsätzlich kann mit SSH-Tunneling jeder TCP-Port weitergeleitet werden. Deshalb ist dieser Prozess auch als Portweiterleitung oder Portforwarding bekannt.

Als SSH-Server können Sie einen beliebigen Server verwenden. Dafür kann beispielsweise auch ein Raspberry Pi SSH-Server eingesetzt werden.

Tipp

Sie haben noch keine passenden Server gefunden? Kein Problem! Bei IONOS finden Sie den richtigen Cloud Server für jeden Anlass.

Doch was genau „transportiert“ eigentlich ein SSH-Tunnel? Durch den SSH-Tunnel können bestimmte TCP-Protokolle gesichert verwendet werden. Hierzu zählt beispielsweise HTTP. Auch SMTP, ein wichtiges Protokoll für den E-Mail-Versand, nutzt SSH-Tunneling. Für die Sicherheit der im Tunnel übertragenen Daten sorgt SSH.

Wofür werden SSH-Tunnels eingesetzt?

Es gibt verschiedene Anwendungsszenarien für das Portforwarding mittels Secure Shell. In den meisten Fällen wird der SSH-Tunnel genutzt, um eine verschlüsselte Verbindung zwischen einem lokalen Rechner, dem localhost, und einem entfernten Rechner aufzubauen. Durch den Umweg über dieses virtuelle Netzwerk können bestimmte Zugriffsbeschränkungen auf Websites aufgehoben werden. Es hat dann den Anschein, als befänden Sie sich in dem Netzwerk, auf das Sie eigentlich nur mit einem SSH-Tunnel zugreifen. Diese Art der Anwendung weist zwar Ähnlichkeiten zu einem Virtual Private Network (VPN) auf, sollte aber nicht damit verwechselt werden.

Wenn Sie Daten von Diensten transportieren, die ein unverschlüsseltes Protokoll verwenden, können Sie SSH-Tunneling benutzen, um den Datenverkehr dennoch zu verschlüsseln. Hierfür wird das sogenannte SSH File Transfer Protocol, kurz SFTP, eingesetzt. Erhöhte Sicherheit bietet ein SSH-Tunnel außerdem beim Surfen in fremden Netzwerken, etwa in Hotels. Für besonders hohe Sicherheit können Sie auf SSH-Keys für Ihre Netzwerkverbindung setzen. Diese nutzen asymmetrische Verschlüsselung.

Portforwarding ist außerdem eine Technik, die von Hackerinnen und Hackern gerne eingesetzt wird. Mit SSH-Tunneling können Hintertüren in internen Netzwerken eingebaut werden, mittels derer Angreifende ohne großen Aufwand auf interne Daten zugreifen können.

Tipp

Sie möchten die Vorteile von SSH auch für Ihre Website nutzen? Das IONOS Webhosting-Paket beinhaltet ein SSL-Zertifikat und sorgt dafür, dass es Ihnen an nichts fehlt! Wollen Sie lediglich Ihre Website nachrüsten, bietet Ihnen IONOS hierzu mit einem SSL-Zertifikat die Möglichkeit. Für eine erhöhte Sicherheit Ihrer Website, u. a. mittels Zwei-Faktor-Authentifizierung, sorgt zudem der IONOS Domain Guard.

SSH-Tunnel unter Linux verwenden

Für die Einrichtung eines SSH-Tunnels stehen Ihnen verschiedene Methoden zur Verfügung.

Lokale Portweiterleitung

Die wohl am häufigsten verwendete Methode ist die sogenannte lokale Portweiterleitung. Hierbei können Sie von Ihrem Rechner aus auf lokale Netzwerkressourcen zugreifen, indem Sie einen Port Ihres lokalen Rechners an einen Port auf dem SSH-Server weiterleiten. Dieser wird dann wiederum an einen Port auf dem Zielcomputer weitergeleitet.

Um eine lokale Portweiterleitung einzurichten, nutzen Sie in Unix-basierten Betriebssystemen wie Linux oder macOS folgenden Terminalbefehl:

ssh -L lokaler_port: remote_adresse: remote_port username@server.com

Zunächst müssen Sie bestimmen, welchen Port Sie weiterleiten möchten (lokaler_port). Hierfür steht Ihnen eine beliebige Portnummer zur Verfügung, die größer als 1024 ist. Auf die Ports mit kleinerer Portnummer hat nur der Root Zugriff, da es sich um privilegierte Ports handelt. Als nächstes müssen Sie die IP-Adresse des Zielservers (remote_adresse) sowie Ihre Zugangsdaten (remote_port) eingeben.

Das Ganze wird deutlicher an einem Beispiel: Sie möchten sich mit einem Server in Ihrem Büro verbinden, der sich unter der Adresse 123.234.1.111 im Büronetzwerk befindet. Außerdem können Sie auf den SSH-Server Ihres Büros mit ssh.test.com zugreifen. Ihr Benutzername ist „Testuser“. Der Befehl, um den SSH-Tunnel für Ihren Port 1234 einzurichten, lautet dann wie folgt:

ssh -L 8888: 123.234.1.111: 1234 Testuser@ssh.test.com

Nach Ausführung dieses Befehls können Sie über Port 8888 auf den Büroserver zugreifen. Unterstützt dieser zusätzlich einen Webzugriff, können Sie auch über

localhost

auf den Büroserver zugreifen. Der Datenverkehr, den Sie an Port 8888 Ihres Computers senden, wird nun durch den SSH-Tunnel an Port 1234 des Zielrechners geleitet.

Remote-Portweiterleitung

Gewissermaßen das Gegenstück zur lokalen Portweiterleitung bildet die sogenannte Remote-Portweiterleitung. Hierbei tunneln Sie einen Port des SSH-Servers an einen Port auf dem Client-Rechner. Dieser kann dann eine Verbindung zum Zielcomputer, beispielsweise Ihrem lokalen Rechner, herstellen. Diese Form des Portforwardings wird in den meisten Fällen genutzt, um jemandem von außerhalb Zugriff auf interne Dienste zu ermöglichen. Der Befehl, um einen Remote-SSH-Tunnel im Terminal einzurichten, sieht wie folgt aus:

ssh -R remote_port: ziel_adresse: ziel_port user@ssh_server_adresse

Möchten Sie nun beispielsweise den Port mit der Portnummer 8080 abhören und die Daten an die Portnummer 3000 Ihres lokalen Rechners senden, sieht der Befehl wie folgt aus:

ssh -R 8080: 127.0.0.1:3000 user@remote.host

Im obigen Beispiel hat der SSH-Server die Adresse remote.host. Der externe Zugriff auf die Daten, die Sie tunneln, kann nun in einem Browser erfolgen, indem ebendiese Adresse aufgerufen wird, gefolgt vom Port, den sie zuvor angegeben haben:

remote.host:8080

Wenn Sie Probleme damit haben, eine Remote-Portweiterleitung einzurichten, kann es gut sein, dass Sie noch die Konfiguration Ihres SSH-Servers verändern müssen. Standardmäßig ist die Remote-Portweiterleitung nämlich deaktiviert. Dies können Sie ändern, indem Sie die Konfigurationseinstellung GatewayPorts in Ihrer SSH-Server-Konfigurationsdatei aktivieren. Hierzu öffnen Sie die Datei und setzen die erforderliche Direktive GatewayPorts auf „yes“.

Tipp

Sie haben andere Probleme bei der Verbindung zu einem SSH-Server? Mit unseren praktischen Tipps zum Beheben von SSH-Fehlern finden Sie bestimmt eine Lösung.

Dynamische Portweiterleitung

Eine dritte Art, SSH-Tunnel zu verwenden, ist die dynamische Portweiterleitung. Diese ermöglicht es Ihnen, einen Socket auf Ihrem lokalen Rechner zu verwenden, der als eine Art SOCKS Proxy fungiert. Alle Anwendungen, die den SOCKS Proxy nutzen, verbinden sich auf diese Weise mit dem SSH-Server und leiten Ihren gesamten Traffic durch den Tunnel. Ein häufiges Einsatzgebiet dieser Art der Portweiterleitung ist das Tunneln des Traffics eines Webbrowsers.

Um eine dynamische Portweiterleitung einzurichten, nutzen Sie einen Terminalbefehl nach folgendem Schema:

ssh -D [lokale_ip_adresse:]lokaler_port user@ssh_server_adresse

Wenn Sie auf die Angabe einer lokalen IP-Adresse verzichten, wird automatisch die IP-Adresse 127.0.0.1, localhost, ausgewählt. Wenn Sie beispielsweise einen SOCKS Tunnel für Port 9090 einrichten wollen, lautet der Befehl für einen Server mit der Adresse remote.host wie folgt:

ssh -D 9090 -N -f user@remote.host

Im Anschluss an die Einrichtung des SOCKS-Proxy müssen Sie die Anwendungen, die den Proxy nutzen sollen, entsprechend konfigurieren.

SSH-Tunnel unter Windows verwenden

Auch bei Windows können SSH-Tunnel eingerichtet werden. Da das Terminal unter Windows einen weniger großen Stellenwert einnimmt, gibt es praktische Tools mit eigener GUI, z. B. PuTTY. Hiermit ist die Einrichtung eines SSH-Tunnels ein Kinderspiel.

Nachdem Sie PuTTY heruntergeladen und erfolgreich installiert haben, können Sie das Tool öffnen. Geben Sie im Startmenü bei „Hostname“ die IP-Adresse des SSH-Servers an, mit dem Sie sich verbinden möchten. Navigieren Sie anschließend zu „Connection/SSH/Tunnels“. Dort haben Sie die Möglichkeit, den Quell- und den Zielport in den Feldern „Source Port“ und „Destination“ anzugeben. Im Anschluss können Sie über den „Open“-Button die Verbindung aufbauen und im Browser wie gewohnt über 127.0.0.1:port_nummer auf den weitergeleiteten Port zugreifen.

Reverse-SSH-Tunnel

Für den Zugriff auf Rechnern mit privaten IP-Adresse benötigt man einen Reverse-SSH-Tunnel. Der interne Rechner, der von außerhalb nicht erreichbar ist, muss einen SSH-Tunnel umgekehrt, also reverse, zu einem externen Rechner aufbauen. Dieser muss im Gegensatz zu den bereits vorgestellten SSH-Tunnels auch Verbindungen von externen Rechnern mit dem internen Rechner zulassen.

Folgender Befehl dient dazu, einen Reverse-SSH-Tunnel einzurichten:

ssh -Nf -R 2222:localhost:22 user@externer.rechner

Der externe Rechner kann sich im Anschluss durch

ssh localhost -p 2222

mit dem internen Rechner verbinden.