SSH Tunnel zur MySQL Datenbank

SSH Tunnel über EC2 Instanz zur 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.