Cómo conectar remotamente a la base de datos MySQL / MariaDB en forma segura Imprimir

  • pci, mysql, conexión remota
  • 0

Conectate a MySQL remotamente por un SSH Tunnel. Debido a las normas PCI DSS no es permitido conectar directamente a MySQL por razones de seguridad, como puede observarse en este escaneo de la red mediante un proveedor de escaneo aprobado ("ASV")

Pero esto no te impide conectarte remotamente a MySQL en forma segura. 

Para ello lo que debes hacer es conectarte por un tunel SSH y desde ahí a MySQL como si se tratara de una conexión local usando a localhost como host/servidor de la base de datos.

Por pasos:

1. En cPanel crea una nueva SSH Key y autorízala, esta será usada para conectar al servidor por SSH, para generar y autorizar la SSH key te puedes apoyar de este tutorial de SFTP

2. En el cliente que usas para conectar a la base de datos le vas a indicar que use un tunel SSH y para los datos de conexión a MySQL use localhost como host/servidor, el usuario, contraseña, nombre de base de datos que has creado en cPanel -> Bases de datos MySQL. Aqui te vamos a dejar los manuales de algunos clientes/lenguajes para que revises como configurar el tunel SSH y conectar al servidor de base de datos.

  • MySQL Workbench: https://dev.mysql.com/doc/workbench/en/wb-mysql-connections-methods-ssh.html
  • PHP: Esto solo aplica si el código no se ejecuta en el mismo Hosting, sino en forma remota en otro Hosting/Dispositivo pero requiere conectar al MySQL remotamente. Adapta este código y agregalo para que se ejecute antes de la conexión a MySQL, a la conexión a MySQL solo le cambias el puerto de 3306 a 3307:
    $opensshprivatekey = escapeshellarg("opensshprivatekey.txt");// Aqui configuras donde está la key
    //Desde aquí solo se requiere si PHP será ejecutado en Windows
    $runninguser = get_current_user();
    shell_exec("TakeOwn /F $opensshprivatekey 2>&1");
    shell_exec("icacls $opensshprivatekey /reset 2>&1");
    shell_exec("icacls $opensshprivatekey /inheritance:r 2>&1");
    shell_exec("Icacls $opensshprivatekey /c /t /Grant $runninguser:F 2>&1");
    //Fin del código que solo se requiere si PHP es ejecutado en Windows
    //la siguiente línea si es Windows
    $command = "start /B ssh -i $opensshprivatekey -o StrictHostKeyChecking=no -vg -L 3307:127.0.0.1:3306 TUUSUARIO@server3.hostingfacil.co sleep 10 > NUL";//TUUSUARIO lo reemplazas por el usuario de cPanel. server3.hostingfacil.co por el servidor donde está tu cuenta.
    //Esta línea si no es Windows
    $command = "ssh -i $opensshprivatekey -o StrictHostKeyChecking=no -vg -L 3307:127.0.0.1:3306 TUUSUARIO@server3.hostingfacil.co sleep 10 &> /dev/null &";//TUUSUARIO lo reemplazas por el usuario de cPanel. server3.hostingfacil.co por el servidor donde está tu cuenta.
    pclose( popen( $command, 'r' ) );

  • C++ https://www.libssh2.org/examples/direct_tcpip.html
  • Javascript: https://www.npmjs.com/package/mysql-ssh2
  • Python: https://stackoverflow.com/a/51116269
  • Java: Con este ejemplo, pero no usando SSH Password, sino SSH key: https://stackoverflow.com/a/14136488
  • .NET Con esta libreria https://github.com/sshnet/SSH.NET y guiandote con este código, solo que no conectas con SSH Password, sino SSH key. 
  • Si el cliente / lenguaje de programación que usas no lo hemos mencionado aquí, es cuestión de buscar en Google, por ejemplo VB.net SSH Tunnel MySQL
  • En caso tengas inconvenientes intentando conectar prueba lo siguiente:
  1. Usando la SSH Key que generaste en el paso #1 conecta via SFTP usando por ejemplo Filezilla guiandote con el mismo tutorial, si la conexión no es exitosa, verifica que el usuario, servidor/hostname, SSH Key y puerto esté correcto. Si conecta, indica que los datos de conexión SSH están correctos.
  2. Conecta a MySQL desde cPanel -> Terminal, por ejemplo escribe
    mysql -h localhost -u USUARIO -p DATABASE
    Al presionar Enter, digita ó pega con click derecho -> pegar la contraseña, esta no se verá en pantalla, y luego presiona enter
    USUARIO lo reemplazas por el usuario que creaste en cPanel -> Base de datos MySQL
    DATABASE por la base de datos que creaste en cPanel -> Base de datos MySQL
    la contraseña es la que le asignaste al usuario MySQL al crearlo en cPanel -> Base de datos MySQL
    Si te conecta (No sale error), indica que los datos de acceso a MySQL están correctos.
    Si habiendo verificado que los datos de acceso SSH y MySQL están correctos, se trata de un error de programación, la sugerencia sería hacer debug para encontrar el texto exacto de error y así poder saber si la falla está en la creación del SSH Tunnel o también conocido como SSH Forward o en la conexión a MySQL usando dicho tunel.

    Con esta conexión a MySQL por medio de SSH la información que viaja por Internet así la intercepten no será posible que la puedan leer/conocer, gracias al nivel de cifrado seguro y moderno que maneja SSH, que podemos decir que es el protocolo más auditado del mundo, lo que lo hace muy seguro cuando se configura correctamente sus ciphers y seguridad en general.

 


¿Fue útil la respuesta?

« Atrás