Wer sich regelmäßig mit entfernten Linux Systemen beschäftigt und auch Dienste anbietet, kommt früher oder später in die Situation einen Port vom Server und/oder vom Client über einen SSH-Tunnel zu reichen zu müssen.

Ganz wichtig, es gibt 3 unterschiedliche Methoden und Richtungen wie ein Port/Dienst über den Tunnel gereicht wird.

  • Local Port Forwarding – Hierbei wird bei dir auf dem PC ein Port geöffnet, welcher einen entfernten Dienst erreichen soll.
  • Remote Port Forwarding – Du öffnest einen neuen Port auf dem entfernten System, welcher mit einem Port auf deinem Client verbunden ist.
  • Dynamic Port Forwarding – Erstellt einen SOCKS Proxy.

Local Port Forwarding

Das Lokale Port Forwarding ist sicherlich die meist genutzte Variante. Dabei kann man entfernte Systeme und Dienste erreichen, ohne das diese Dienste öffentlich zugänglich sind. Es können sogar Dienst zugänglich gemacht werden, welche auf dem Zielsystem nur auf localhost (127.0.0.1) hören.

Was auch ganz wichtig zu verstehen ist, das dass Ziel nicht zwingend auf dem SSH-Ziel System sein muss, sondern auch ein System was erst von dem entfernten System erreichbar ist.

Beispiel: Wir haben einen Server, welcher über SSH erreichbar ist und einen Webserver hosted. Aber die Webseite ist nur für interne Zwecke und nicht öffentlich erreichbar.

ssh -L [LOCAL_IP:]LOCAL_PORT:DESTINATION:DESTINATION_PORT [USER@]SSH_SERVER

ssh -L 4567:11.22.33.44:80 root@11.22.33.44

Wenn der SSH-Login erfolgreich ist, dann ist bei dir auf dem PC der Port 4567 (Lokal) verknüpft mit dem Webserverdienst auf dem entfernten System. Du kannst jetzt bei dir auf dem PC den Browser öffnen und „localhost:4567“ eingeben und du siehst die Webseite über eine sichere SSH-Verbindung.

Man kann aber auch ein entferntes System tunneln was nur von deinem Zielsystem erreichbar ist.

ssh -L 4567:192.168.150.10:80 root@11.22.33.44

Dabei wird der Port 4567 bei dir Lokal geöffnet und mit dem Ziel 192.168.150.10:80 verknüpft. Dein SSH Ziel muss natürlich das System „192.168.150.10:80“ erreichen können.

Remote Port Forwarding

Bei der Remote Port Forwarding Methode wird ein Lokaler Dienst auf dem entfernten System verfügbar gemacht.

Du hast in diesem Beispiel einen Webdienst bei dir auf dem Client/PC und möchtest das dass Zielsystem diesen Dienst öffnen kann. Dabei imitierst du die Verbindung und schiebst deinen Dienst dem entfernten System diesen unter.

ssh -R [REMOTE:]REMOTE_PORT:DESTINATION:DESTINATION_PORT [USER@]SSH_SERVER

ssh -R 4567:127.0.0.1:80 root@11.22.33.44

Nach dem erfolgreichen Verbindungsaufbau ist auf dem Zielsystem der Port 4567 verfügbar und wird auf deinen Client auf den Port 80 weitergeleitet. Jetzt kannst du oder ein User auf dem Zielsystem auf dem Port 4567 den Dienst erreichen.