Ports über SSH tunneln um Whitelists oder komplexe Netzwerktopologien zu umgehen.

Stell dir vor, du hast einen Webserver aufgesetzt der intern mit einer Datenbank kommuniziert. Diese Datenbank willst du üblicherweise nicht öffentlich erreichbar haben. Stattdessen soll ausschließlich der Webserver mit dieser Datenbank kommunizieren.

Das ist übliches Vorgehen bei Kubernetes Clustern. Normalerweise willst du möglichst wenige Schnittstellen nach außen haben, um Sicherheitslücken vorzubeugen.

Vor allem in der Aufbauphase kann es aber vonnöten sein hin und wieder mal manuell in die Datenbank hereinzuschauen. Dabei kann dir SSH Tunneling helfen!

In diesem Beitrag lernst du wie du SSH Tunneling sowohl mit Linux als auch mit Windows konfigurierst. Dadurch kannst du auf Netzwerkservices zugreifen die eigentlich hinter einer Firewall oder einem NAT Netzwerk stehen.

Theorie SSH Port Tunneling

Ausgangspunkt ist, dass du einen SSH Server hast, der auf eine bestimmte IP:Port Adresse zugreifen kann. Gleichzeitig kann dein eigener Rechner nicht auf diese Adresse zugreifen.

SSH Port Tunneling gibt dir die Möglichkeit, die Verbindung über den SSH Server zu tunneln und über diesen Umweg auf die Adresse zugreifen zu können. Aus netzwerktechnischer Sicht sieht es dann so aus, als ob der SSH Server auf die IP-Adresse zugreift und sämtliche Ausgaben an deinen Rechner weiterleitet. So wird dem eigenen Rechner quasi vorgetäuscht direkt mit der Adresse verbunden zu sein.

Darstellung von Port Tunneling über SSH

SSH Port Tunneling mit Linux

Mit Linux kannst du das mit dem ssh Tool machen. Dies ist bei so gut wie jeder Linux Distribution dabei. Das Tunneling startest du so wie eine normale SSH Verbindung und nutzt dabei den -L Parameter.

ssh -L PORTLOCAL:TARGET:PORTTARGET SSH

Jetzt ersetzt du Folgendes:

  • PORTLOCAL: Irgendein ungenutzter Port auf deinem Rechner. Am besten irgendeine Zahl über 8000
  • TARGET: IP-Adresse oder DNS Namen des Hosts, zu dem du dich verbinden willst (aber noch nicht kannst)
  • PORTTARGET: Port TARGET mit dem du dich verbinden willst. Zum Beispiel 80 für HTTP.
  • SSH: Die IP-Adresse oder der DNS Name des SSH Servers

Also zum Beispiel:

ssh -L 8000:10.0.0.3:80 10.0.0.2

Solange die SSH Session läuft, kannst du auf localhost:8000 zugreifen.

SSH Port Tunneling mit Putty (Windows)

Wenn du auf Windows arbeitest, kannst du das kostenlose Tool “Putty” nutzen.

Dazu musst du Putty öffnen und im Startfenster bei Host Name die Adresse bzw. den DNS Namen des SSH Servers (10.0.0.2) eintragen.

Dann im Reiter Connection -> SSH -> Tunnels als Source Port 8000 und bei Destination die Adresse und den Port des Zielservers. Also 10.0.0.3:80.

Anschließend kannst du es mit Add und Open bestätigen.

Solange die SSH Session läuft, kannst du auf localhost:8000 zugreifen.

Konfiguration eines SSH Tunnels mit Putty

Abschluss

Du solltest nun in deinem Browser localhost:8000 eingeben können und dabei den Service auf deinem Rechner angezeigt kriegen können, den eigentlich nur der SSH Server sehen würde. Das funktioniert natürlich nicht nur mit Webseiten, sondern auch mit Datenbanken und allen anderen Netzwerkdiensten.

Solange das Tunneling aktiv ist, verhält sich dein Computer als hätte er eine direkte Verbindung zu 10.0.0.3.


Konnte ich helfen? Ich freue mich über einen Drink! 💙