Einleitung

Bevor man einen Port eines Servers/Programms/Applikation im offenen Netz frei gibt sollten man lieber über Tunnel nachdenken. Oftmals sind Verbindungen zu Programmen/Servern nicht verschlüsselt und so ist man schneller angriffen ausgeliefert.

Mittels SSH kann man eine Verbindung zu einem anderen Server herstellen und diese Verbindung dann für andere Dinge benutzen.
Z.b. für MYSQL. Meine lokale Applikation soll regelmässig zum Webserver und Daten abrufen. Der MYSQL Port sollte aber nicht nach draussen aufgemacht werden.

Beispiel:

ssh -L lokalFreierPort:lokaleServerIP:destPort -l username hostnameOderIPWebServer
oder
ssh -L lokalFreierPort:lokaleServerIP:destPort username@hostnameOderIPWebServer

Um Remote auf MYSQL zu Port 3306 zugreifen zu können muss ich lokal einen anderen Port verwenden wenn dieser nicht durch eine eigene MYSQL Instanz belegt ist. ich verwende einfach den Port 13306 (via netstat prüfen ob der Port auch wirklich frei ist sonnst klappt es nicht.)

ssh -L 13306:127.0.0.1:3306 username@webserverIP
Hiemit wir eine SSH Verbindung hergestellt (Ggf. werde Sie gefragt ob sie den Schlüssel des Hosts akzeptieren wollen).

Nun kann man mit einer weiteren Shell lokal testen ob es klappt:
mysql -u username -h 127.0.0.1 -P 13306 -p

Nach Eingabe des Passwortes für den username sollten sie erfolgreich in der MYSQL Shell gelandet sein.
Ein:
mysql> SHOW VARIABLES;

zeigt Details mit welchem Server sie gerade Verbunden sind. Es sollte der Remote Server sein.
So lange die erste Shell offen bleibt (bzw. die Hergestellte Verbindung) können sie nun MYSQL auf dem Webserver über 127.0.0.1 auf Port 13306 erreichen. Das sollte nun in Ihren Scripten angepasst werden die mit MYSQL Remote sprechen wollen.

Eine andere/ ähnliche ggf. gesuchte Variante wäre AUTOSSH. Sobald der Rechner startet soll die SSH Verbindung hergestellt werden.

Alternativen:

Klar sollte sein: Nur dieser einzige Port wir durch SSH getunnelt.
Es macht i.d.R Sinn die Ganze Internet Leitung zu Tunneln. Z.b. um ins Firmen Netzwerk zu kommen und so zu arbeiten als wäre man vor Ort oder zum Webserver und über diesen seinen gesamten Traffik laufen zu lassen. Damit ist man geschützter mit den verschiedenen Verbindungen die man vielleicht benötigt. Hiezur verwendet man oftmals VPN/ OpenVPN

SSH Tunnel mit autossh könnte eine gute alternative sein. Z.b. so.

Weiterführende Links

  • https://gist.github.com/scy/6781836
  • https://superuser.com/questions/96489/an-ssh-tunnel-via-multiple-hops