Umfassender Leitfaden zu Reverse-SSH-Tunneling in Linux
Reverse-SSH-Tunneling von A bis Z
Da der Zugriff auf Rechner im Geschäftsleben immer wichtiger wird, insbesondere mit der zunehmenden Verwendung von Cloud-Anwendungen, haben sich Nutzer an einen vollständigen oder eingeschränkten Remote-Zugriff gewöhnt. Deshalb ist es heute unverzichtbar, remote auf Rechner zugreifen zu können.
Die anhaltenden Covid-19-Pandemie hat die Notwendigkeit von Remote-Zugriffen zusätzlich unterstrichen, da Unternehmen ihre Arbeitsabläufe dezentralisieren und sich an Remote-Arbeitsumgebungen anpassen mussten. Aus diesem Grund greifen sowohl Unternehmen als auch Einzelpersonen auf verschiedene ihnen zur Verfügung stehenden Lokalisierungsverfahren zurück.
Dieser Artikel bietet eine Schritt-für-Schritt-Anleitung zur Einrichtung und Nutzung von Reverse-SSH-Tunneling in Linux-basierten Umgebungen. Konkret führt der Artikel zunächst in das Konzept des SSH-Tunnelings ein und erläutert dessen Definition, Einsatzmöglichkeiten und Nachteile, bevor anschließend auf Reverse-SSH-Tunneling eingegangen wird.
SSH-Tunneling
SSH ist das kryptografische Netzwerkprotokoll, das auf Port 22 läuft und die Verbindung mit der Shell eines Remote-Rechners ermöglicht. SSH-Tunneling/Portweiterleitung (Port Forwarding) hingegen ist ein Verfahren, bei dem eine sichere SSH-Verbindung zwischen einem lokalen und einem Remote-Rechner herstellt wird. Aufgrund der Verschlüsselung können Sie SSH-Tunneling nutzen, um Daten zu übertragen, die unverschlüsselte Protokolle wie IMAP, VNC oder IRC nutzen.
Es gibt drei Arten der Portweiterleitung:
- Lokale Portweiterleitung
Diese Verbindung ermöglicht es Ihnen, von Ihrem lokalen Rechner aus auf einen anderen Server zuzugreifen. Dafür müssen Sie jedoch zwei Portnummern sowie den Zielserver kennen. Wenn Sie beispielsweise remote auf www.HackerOne.com zugreifen möchten, wäre Ihr SSH-Tunnel:
ssh -L 8080:www.HackerOne.com:80 <host>
Dabei ersetzen Sie <host> durch den Namen Ihres Laptops. Die Option -L gibt die lokale Portweiterleitung an. Sie können eine beliebige Quellportnummer verwenden (siehe die Wikipedia-Liste der TCP- und UDP-Portnummern). Portnummern, die kleiner als 1.024 oder größer als 49.151 sind, sind jedoch für Systemzwecke reserviert und können nur mit bestimmten Quellports verwendet werden.
- Remote-Portweiterleitung
Im Gegensatz zur lokalen Portweiterleitung ermöglicht die Remote-Portweiterleitung eine Verbindung von einem Remote-SSH-Server zu einem Remote-Netzwerkdienst, der sich auf der Client-Seite des Tunnels befindet. Geben Sie dazu den folgenden Befehl in Ihrem Terminal ein:
SSH -R 5900:localhost:5900 guest@janes-pc
Die Option -R legt die Remote-Port-Weiterleitung fest. So kann Jane auf Ihren Laptop (localhost) zugreifen, indem sie einen VNC-Client mit Port 5900 verbindet.
Eine Remote-Weiterleitung ist nützlich, wenn jemand außerhalb eines Unternehmens auf einen internen Webserver zugreifen muss oder eine interne Webanwendung über das öffentliche Internet verfügbar gemacht werden soll.
- Dynamische Portweiterleitung
Bei dieser Art des SSH-Tunnelings fungiert ein Client als SOCKS-Proxy-Server. Daher müssen alle Programme des Proxy-Servers entsprechend konfiguriert und nach der Nutzung erneut konfiguriert werden.
Wie unten gezeigt, verwenden Sie die Option -D, um eine dynamische Portweiterleitung festzulegen.
SSH -C -D 1080 laptop.
Sie können für die Verbindung auch eine beliebige Nummer verwenden. Der Standard-SOCKS-Port ist jedoch 1.080. Es kann passieren, dass einige Programme nicht funktionieren, wenn andere Ports verwendet werden.
Risiken von SSH-Tunneling
Das SSH-Protokoll kann von verschiedenen Arten von Malware missbraucht werden, um Datenlecks und die Quellen von Angriffen zu verschleiern. Auch unrechtmäßig erlangte SSH-Schlüssel wurden bereits für Netzwerkangriffe eingesetzt. Beispielsweise ermöglicht SSH-Tunneling in Verbindung mit nicht verwalteten SSH-Schlüsseln Angreifern, gestohlene SSH-Schlüssel zu nutzen, um über öffentliche Kanäle auf private Netzwerke zuzugreifen.
Laut SSH Academy können solche Angriffe dazu dienen, die eigentliche Angriffsquelle zu verschleiern, indem Hacker Angriffe über andere Systeme und Geräte umleiten. Dadurch können Angreifer nach Schwachstellen suchen und diese ausnutzen, ohne entdeckt zu werden.
Zu den häufig durchgeführten böswilligen Aktivitäten gehören das Ausprobieren verschiedener Anmeldedaten sowie der Einsatz von Angriffs-Tools gegen E-Mail- und Webprotokolle. Daher ist es bei Tunneling-Techniken entscheidend, einen sicheren Remote-Zugriff und eine sichere Remote-Steuerung zu gewährleisten sowie für Sicherheit innerhalb des Netzwerkes, auf das zugegriffen wird, zu sorgen.
Reverse-SSH-Tunnel
Eine Firewall auf einem Router blockiert alle eingehenden Verbindungs- oder Übertragungsanfragen, denen kein ausgehender Request vorangegangen ist, und verhindert so, dass sie den Remote-Rechner erreichen. Dadurch sind nur Verbindungen zulässig, die vom Remote-Rechner angefordert wurden. Das führt zu einem Problem: Die Firewall lehnt von einem Client initiierte SSH-Verbindungen ab und verhindert so den Zugriff auf den Remote-Rechner, wenn sich dieser hinter einem NAT-Router befindet.
Reverse SSH löst dieses Problem, indem eine SSH-Verbindung zum Remote-Server simuliert wird. In diesem Fall lauscht der Remote-Rechner auf dem Netzwerkport des lokalen Computers. Er leitet SSH-Verbindungsanfragen auf diesem Port an sich selbst zurück und stellt dadurch eine neue Verbindung zwischen dem lokalen und dem Remote-Rechner her. Mit anderen Worten: Sie verwenden einen Tunnel innerhalb eines Tunnels, um einen Server, den Remote-Rechner und Ihren eigenen Rechner miteinander zu verbinden (siehe Abbildung 1).

Um einen Reverse-SSH-Tunnel zu erstellen, muss der betreffende Rechner zuerst eine SSH-Verbindung durch die Firewall nach außen herstellen und anschließend einen -R-Tunnel am Verbindungsport des Remote-Rechners einrichten. Auf der Manpage lautet die Beschreibung für SSH -R: -R [bind_address:]port:host:hostport.
Damit wird festgelegt, dass der angegebene Port auf dem Remote-Host (Server) an den angegebenen Host und Port auf der lokalen Seite weitergeleitet wird. Das funktioniert, indem ein Socket zugewiesen wird, der auf den Port der Remote-Seite lauscht. Sobald eine Verbindung zu diesem Port hergestellt wird, wird sie über den sicheren Kanal weitergeleitet und es wird vom lokalen Rechner aus eine Verbindung wird zum Host-Port hergestellt.
Schritt-für-Schritt-Anleitung zur Einrichtung eines Reverse-SSH-Tunnels unter Linux
Stellen Sie vor dem Aufbau einer Verbindung sicher, dass SSH bereits auf Ihrem Linux-/Ubuntu-Rechner installiert ist. Sollte das nicht der Fall sein, führen Sie die folgenden Schritte aus, um SSH zu aktivieren:
- Führen Sie den folgenden Befehl im Terminal aus, um das OpenSSH-Server-Paket zu installieren:
$ sudo apt install OpenSSH-server
Geben Sie Ihr Passwort ein, wenn Sie dazu aufgefordert werden, und bestätigen Sie mit Y, um mit der Installation fortzufahren.
- Der SSH-Dienst wird nach Abschluss der Installation automatisch gestartet. Sie sollten jedoch überprüfen, ob die Installation erfolgreich war und der Service tatsächlich ausgeführt wird. Führen Sie dazu folgenden Befeh aus:
$ sudo systemctl status SSH
Wenn die Installation erfolgreich war und der Dienst läuft, wird Active: active (running) angezeigt. Drücken Sie q, um zur Befehlszeile zurückzukehren.
- Wenn Sie einen Ubuntu-Rechner verwenden, stellen Sie sicher, dass Sie den SSH-Port mit dem folgenden Befehl öffnen:
$ sudo UWF allow SSH.
Auf Linux-basierten Systemen und macOS sind SSH-Clients bereits vorinstalliert. Wenn Sie jedoch von einem Windows-Rechner aus eine Verbdindung herstellen möchten, verwenden Sie einen SSH-Client für Windows, z. B. PuTTY.
Falls der lokale Computer zuvor noch keine SSH-Verbindungen akzeptiert hat, starten Sie den SSH-Daemon (sshd) mit folgendem Befehl im Terminal:
$ sudo systemctl start sshd
Damit der Daemon beim Hochfahren Ihres Computers automatisch startet, verwenden Sie den folgenden Befehl:
$ sudo systemctl enable sshd
Wie funktioniert das?
- Verbindung zu einem Remote-Server herstellen
Um eine Verbindung zu einem Remote-Server herzustellen, verwenden Sie den ssh-Befehl:
$ ssh [your-account-login]@[server-ip]
- Einen Reverse-SSH-Tunnel erstellen
Nachdem Sie die Verbindung hergestellt haben, sollte eine Person auf der Remote-Server-Seite, beispielsweise ein Systemadministrator, den folgenden Befehl auf ihrem Rechner ausführen:
ssh -fN -R 7010:localhost:23 username@yourMachine-ipaddress.
Diese Verbindungsanfrage stellt sicher, dass SSH-Verbindungsanfragen für Port 7010 auf Ihrem Rechner an Port 23 des Remote-Servers weitergeleitet werden.
- Eine SSH-Verbindungsanfrage von Ihrem Rechner an Ihren Rechner senden
In diesem Schritt stellen Sie eine Verbindung über Port 7000 her:
ssh username@localhost -p 7000
Ihre Anfrage wird anschließend an den Remote-Host weitergeleitet. Verwenden Sie daher den Benutzernamen Ihres Accounts auf dem Remote-Server und geben Sie Ihr Passwort ein, wenn Sie dazu aufgefordert werden.
Sie können auch SSH-Schlüssel einrichten, um die Verbindung vom Remote-Rechner zum lokalen Rechner sicherer zu gestalten. Geben Sie dazu auf dem Remote-Rechner den folgenden Befehl ein:
$ ssh-keygen
Anschließend werden Sie zur Eingabe einer Passphrase aufgefordert.
Es empfiehlt sich, eine robuste Passphrase aus vier Wörtern zu verwenden, die durch Sonderzeichen voneinander getrennt sind. Stellen Sie sicher, dass nur Personen mit dieser Passphrase eine SSH-Verbindung zu Ihrem Rechner herstellen können, ohne nach einem Passwort gefragt zu werden. Außerdem müssen Sie den generierten Schlüssel mit dem Befehl ssh-copy-id username@localhost auf den lokalen Rechner übertragen.
Fazit
Network Address Translation (NAT) verbirgt legitime IP-Adressen, indem nicht öffentlich sichtbare IP-Netzwerke verwendet werden, die auf nicht registrierten, im Internet verfügbaren IP-Adressen basieren. Insofern verbindet NAT zwei Netzwerke miteinander, befindet sich auf einem Router und kann so konfiguriert werden, dass für das gesamte Netzwerk global nur eine einzige IP-Adresse sichtbar ist.
Reverse-SSH-Tunneling ermöglicht den Zugriff auf Remote-Rechner, die sich hinter NAT-Routern befinden. So können Sie beispielsweise von zu Hause aus auf einen Rechner im Büro zugreifen. Reverse-SSH-Tunneling ist damit eine Technik, mit der Sie per SSH auf Ihr Linux-basierten System zugreifen können, das über keine öffentliche IP-Adresse verfügt.
Starten Sie noch heute mit JFrog Connect und greifen Sie innerhalb weniger Sekunden einfach und über eine sichere Verbindung auf alle Ihre Remote-Geräte zu.
Unterstützt werden alle Linux-basierten Betriebssysteme sowie zahlreiche verfügbare SBCs (Single-Board Computer = Einplatinencomputer) wie: Raspberry Pi, Beaglebone, Jetson Nano und mehr.
Klicken Sie hier, um mehr über JFrog Connect zu erfahren, und vereinbaren Sie noch heute eine Demo!
