SSH-tunneloplossing
Stel een SSH-tunnel in naar uw MySQL-databaseserver (via een Jumpbox-proxy voor beveiliging).
(A) GUI-tools
Afhankelijk van uw vereisten kunt u een GUI MySQL-client gebruiken met ingebouwde SSH Tunneling-ondersteuning, zoals Visual Studio Code Een poort doorsturen / SSH-tunnel maken , TablePlus of gebruik PuTTY om lokaal in te stellen poort doorsturen.
Op macOS vind ik Secure Pipes leuk of TablePlus .
(B) Opdrachtregel
Stap 1.
ssh -fNg -L 3307:10.3.1.55:3306 [email protected]
De sleutel hier is de '-L' schakelaar die ssh vertelt dat we lokaal aanvragen poort doorsturen.
Ik heb ervoor gekozen om poort 3307 te gebruiken boven. Al het verkeer op mijn lokale machine die naar deze poort wordt geleid, wordt nu 'port-forwarded' via mijn ssh-client naar de ssh-server draait op de host op adres ssh-jumpbox.com
.
De Jumpbox ssh-proxyserver decodeert het verkeer en brengt namens u een netwerkverbinding tot stand met uw MySQL-databaseserver, 10.3.1.55:3306
, in dit geval. De MySQL-databaseserver ziet de verbinding binnenkomen vanaf het interne netwerkadres van uw Jumpbox.
Syntaxis voor lokale poortdoorschakeling
De syntaxis is een beetje lastig, maar kan worden gezien als:
<local_workstation_port>:<database_server_addr_remote_end_of_tunnel>:<database_server_port_remote_end> [email protected]_proxy_host.com
Als je geïnteresseerd bent in de andere schakelaars, dit zijn:
-f (ga naar achtergrond)
-N (voer geen commando op afstand uit)
-g (laat hosts op afstand verbinding maken met lokale doorgestuurde poorten)
Private Key Authentication, voeg (-i) schakelaar toe aan hierboven:
-i /pad/naar/private-sleutel
Stap 2.
Vertel uw lokale MySQL-client om verbinding te maken via uw SSH-tunnel via de lokale poort 3307 op uw computer (-h 127.0.0.1) die nu al het verkeer dat ernaar wordt verzonden doorstuurt via de SSH-tunnel die u in stap 1 hebt ingesteld.
mysql -h 127.0.0.1 -P 3307 -u dbuser -p passphrase
Gegevensuitwisseling tussen client en server gaat nu over de versleutelde SSH-verbinding en is veilig.
Beveiligingsnota
Tunnel niet rechtstreeks naar uw databaseserver. Het hebben van een databaseserver die direct vanaf internet toegankelijk is, is een enorme beveiligingsaansprakelijkheid. Maak van het tunneldoeladres het internetadres van uw Jumpbox/Bastion Host (zie voorbeeld in stap 1) en uw databasedoel het interne IP-adres van uw databaseserver op het externe netwerk. SSH doet de rest.
Stap 3.
Verbind nu uw PHP-applicatie met:
<?php
$smysql = mysql_connect( "127.0.0.1:3307", "dbuser", "passphrase" );
mysql_select_db( "db", $smysql );
?>
Met dank aan Chris Snyder's geweldig artikel detaillering van ssh-opdrachtregeltunneling voor MySQL-connectiviteit.