SSH Tunnel zur MySQL Datenbank
Die Datenbank Server liegen in einem privaten Netzwerk in der Cloud. Für administrative Zwecke oder Datenauswertungen muss direkt auf die Datenbank zugegriffen werden ohne diese aus dem Internet erreichbar zu machen. Um dies zu ermöglichen ist der SSH Tunnel eine leichte Möglichkeit, die ich hier beschreiben möchte.
Server link
Für den SSH Tunnel reicht ein sehr kleiner Server im öffentlichen Netzwerk (bei Amazon AWS z.B. eine t2.nano). Je nach Ökosystem sollten bei diesem alle eingehenden Verbindungen außer SSH mit Sicherheitsgruppen, Firewall oder ähnlichem unterbunden werden.
Da der Root Zugang zu dem Server nur für Updates oder zum Hinzufügen von persönlichen SSH Keys benötigt wird, macht es ggf. Sinn für diesen einen neuen eigenen SSH Key zu erzeugen und zur ~/.ssh/authorized_keys
hinzuzufügen. Je nach Anbieter wird dies teilweise automatisiert erledigt.
SSH Tunnel User erstellen link
Für den eigentlichen Datenbankzugriff wird ein eigener SSH User gebraucht.
sudo adduser USERNAME
Als nächster Schritt muss in den neuen User per su
gewechselt werden und die persönlichen public ssh keys hinzugefügt werden.
su USERNAME
nano ~/.ssh/authorized_keys
exit
Userrechte beschneiden link
Mit der folgenden Konfiguration kann der User ausschließlich eine Portweiterleitung über den Server auf die definierte interne Datenbank Adresse einrichten. Beim Versuch sich als User anzumelden, SFTP zu nutzen oder einen Befehl auszuführen, kommt nur die als ForceCommand
definierte Nachricht. Wichtig ist, dass der SSH Tunnel Server intern die Datenbank erreicht.
Dafür muss in der /etc/ssh/sshd_config
der folgende Absatz hinzugefügt werden. Der USERNAME
und die MEINE-INTERNE-DOMAIN
müssen ausgetauscht werden.
Match User USERNAME
AllowTCPForwarding yes
X11Forwarding no
PermitTunnel no
GatewayPorts no
AllowAgentForwarding no
PermitOpen MEINE-INTERNE-DOMAIN.rds.amazonaws.com:3306
ForceCommand echo 'Unknown Error ;)'
Verbindung link
Datenbank Programme wie TablePlus können sich direkt über einen SSH Tunnel zur Datenbank verbinden. Hierfür einfach Username, SSH Serveradresse und Key angeben. Die Datenbank-Zugangsdaten bleiben dieselben, die auch ohne SSH Tunnel nötig gewesen wären.
Alternativ kann unter Linux das Port Forwarding auch im Terminal gestartet werden.
ssh -N USERNAME@my-ssh-server.example.com -L 3306: my-ssh-server.example.com:3306
IP Whitelist link
Datenbank Server, Betriebssysteme oder SSH kann Lücken und Fehler enthalten die ggf. noch nicht bekannt sind. Daher ist es nicht verkehrt, nur die statische IP-Adresse des Büros zu erlauben. An diese kommt man aus dem HomeOffice auch über das Büro VPN-Netz.