Sicherheit

Wie können wir helfen?

Anleitungen und technische Dokumentation für Ihren Dedicated Server oder VPS von Server4You.

Dienste über SSH-Tunnel weiterleiten

Diese Anleitung erklärt, wie Sie einen Dienst auf einem entfernten Linux-Server per SSH-Port-Forwarding (ssh -L) über einen Zwischenserver erreichbar machen. Der Datenverkehr ist verschlüsselt, und Sie benötigen nur einen Standard-OpenSSH-Client.

Das Konzept

SSH-Tunneling funktioniert als dreiteilige Kette. Stellen Sie es sich wie eine Weiterleitung über einen Relay-Server vor — Sie verbinden sich mit dem mittleren Server, der den Datenverkehr transparent an das Ziel weiterleitet:

TeilRolleBeispiel
NearDer Client, der den Dienst nutzen möchte — verbindet sich mit dem weitergeleiteten Port auf MiddleIhr Laptop / Workstation
MiddleDer Zwischenserver, auf dem Sie den ssh-Befehl ausführen — er öffnet den weitergeleiteten Port209.239.112.134
FarDas eigentliche Ziel — der Server, auf dem der Dienst läuft; Middle verbindet sich per SSH mit ihmserver935
Terminal
Near <--> Middle <--> Far

Der entscheidende Vorteil: Far muss nicht öffentlich erreichbar sein. Solange Middle zu Far und Sie zu Middle eine Verbindung aufbauen können, schlägt der Tunnel die Brücke.

SSH-Flags erklärt

Der Tunnel-Befehl nutzt folgende SSH-Flags:

FlagBedeutung
-NKein Remote-Befehl ausführen — die Verbindung bleibt ausschließlich für das Port-Forwarding offen, ohne in eine Shell zu wechseln.
-LLokales Port-Forwarding — öffnet einen Port auf dem Rechner, auf dem Sie ssh ausführen (hier: der mittlere Server), und leitet den Datenverkehr durch die SSH-Verbindung zum Zielserver weiter. Format: bind-address/lokaler-port/ziel-server/ziel-port
-fOptional — startet SSH im Hintergrund. In Kombination mit -N läuft der Tunnel als Hintergrundprozess.
-vOptional — ausführliche Ausgabe, hilfreich bei der Fehlersuche.

Der Befehl

Allgemeine Syntax

Führen Sie den Befehl auf dem mittleren Server aus und ersetzen Sie die Platzhalter durch Ihre tatsächlichen Server-Adressen, IP-Adressen und Portnummern:

Terminal
ssh -N root@far-server -L middle-IP/middle-port/far-server/far-port

Konkretes Beispiel

Auf dem mittleren Server ausgeführt, öffnet dieser Befehl Port 110 auf dessen IP 209.239.112.134 und leitet alle Verbindungen zu Port 22 (SSH) auf dem Zielserver (server935) weiter:

Terminal
ssh -N root@server935 -L 209.239.112.134/110/server935/22

Jede Verbindung zu 209.239.112.134:110 wird transparent zu server935:22 weitergeleitet — der SSH-Dienst des Zielservers ist damit über den mittleren Server erreichbar.

Tunnel im Hintergrund starten

Mit dem Flag -f wird der Tunnel im Hintergrund gestartet, sodass das Terminal frei bleibt:

Terminal
ssh -fN root@server935 -L 209.239.112.134/110/server935/22

Um einen Hintergrund-Tunnel zu beenden, ermitteln Sie die Prozess-ID und beenden den Prozess:

Terminal
ps aux | grep ssh kill <PID>

Der Tunnel bleibt aktiv, solange die SSH-Verbindung aufrechterhalten wird. Bricht die Verbindung ab, muss der Befehl erneut ausgeführt werden. Für persistente Tunnel mit automatischem Reconnect empfiehlt sich das Tool autossh.

Typische Anwendungsfälle

Zugriff auf einen gesperrten Dienst
Einen Datenbank- oder Admin-Port, der nicht öffentlich zugänglich ist, über einen Server weiterleiten, der internen Netzwerkzugriff hat.
Temporären Zugriff gewähren
Einen Dienst auf einem bestimmten Port für Dritte zugänglich machen, ohne Firewall-Regeln dauerhaft zu ändern — Tunnel einfach schließen, wenn er nicht mehr benötigt wird.
Verschlüsselte Weiterleitung
Alle Daten durch den Tunnel werden von SSH verschlüsselt — ideal für Dienste ohne eigene TLS-Verschlüsselung.
Jump-Host-Muster
Einen öffentlich erreichbaren Server als Relay nutzen, um interne Server zu erreichen, die nicht direkt aus dem Internet zugänglich sind.

Fehlerbehebung

ProblemUrsache & Lösung
Verbindung zum weitergeleiteten Port wird abgelehntDer Tunnel läuft nicht, oder die Firewall des mittleren Servers blockiert den Port. Prüfen Sie den ssh-Prozess und öffnen Sie den Port in iptables oder nftables auf dem mittleren Server.
Tunnel verbindet sich, bricht aber sofort abSSH-Keepalive ist möglicherweise nicht konfiguriert. Fügen Sie ServerAliveInterval 30 in ~/.ssh/config hinzu.
Port-Forwarding wird vom Server abgelehntDer SSH-Server, mit dem Sie sich verbinden (der Zielserver), hat möglicherweise AllowTcpForwarding no in seiner /etc/ssh/sshd_config. Setzen Sie den Wert auf yes und starten Sie den SSH-Dienst neu.
Bind an die IP des mittleren Servers schlägt fehlPorts unter 1024 (z. B. 110) kann nur root öffnen, und der Port darf nicht bereits belegt sein. Prüfen Sie außerdem, ob die Bind-Adresse eine IP des mittleren Servers ist. Ohne explizite Bind-Adresse bindet SSH nur an localhost.

Weiterführende Dokumentation

Die vollständige Referenz aller SSH-Port-Forwarding-Optionen finden Sie im offiziellen OpenSSH-Handbuch.