Acceso Remoto a MYSQL

  • Por
Cómo acceder a MYSQL vía remota sin tener el puerto abierto y sin que nadie más pueda acceder a él.

En el momento de escribir el artículo Gestor de MySQL HeidiSQL me encontraba con varios años como webmaster en hostings compartidos como muchos de los que leen esto.

Sin embargo, al crecer en visitas y necesidades y estar tan limitado con las características propias de los alojamientos compartidos, migré a VPS y luego a servidores dedicados.

Al final, la administración de servidores dedicados traslada las preocupaciones propias de los proveedores de hosting a tu cabeza, y con el tema más delicado “La seguridad” (ejemplo de ello: en los días en que se escribía este artículo, se descubrió la vulnerabilidad heartbleed, que hizo sudar a todos los administradores, que tuvieron que actualizar rápidamente sistema y generar nuevos certificados).

Claro, existen servicios manejados que aumentan mucho más el costo del hosting en los cuales estás pagando por la administración y mantenimiento con un costo promedio de 100$ adicionales al servicio.

Bien: Queremos acceder a MySQL vía remota, pero no queremos tener el puerto abierto y queremos que solo nosotros podamos acceder.

Este artículo se basa en que tienes el siguiente escenario:

  1. En tu servidor está corriendo una versión de Linux
  2. Usas como cortafuegos “Configure Config Server Firewall” el famoso CSF
  3. Tienes MySQL corriendo y el puerto 3306 se encuentra cerrado (como debe)
  4. En el artículo Gestor de MySQL HeidiSQL tienes el escenario de que, si bien usas el panel para autorizar los IPs que se conectarán a MySQL, tienes la dificultad del propio “meollo móvil” donde te conectarás en diferentes sitios a redes WiFi.
    ...O tu proveedor cambia a cada rato la dirección IP de tu conexión. Así que no resulta práctico estar chequeando a cada rato la dirección IP.

    Lo primero es visitar www.no-ip.org y abrirnos una cuenta gratuita (No-IP permite identificar tu PC con un nombre de dominio fácil de recordar).

    En el formulario de inscripción de una vez podemos escoger el nombre de dominio que queramos gratis.

    También podemos ingresar luego en la opción Hosts/Redirects >> Manage Hosts y crear el dominio que queramos.

    Todo esto es para una sola cosa: asociar nuestra dirección IP dinámica al dominio creado.

    Podemos hacerlo descargando el software DUC de la misma página.

    Después de ingresar nuestros login y contraseña, debemos activar nuestro host en “EDIT HOST”

    Si usamos un router, opcionalmente podemos usarlo también ingresando directamente nuestras credenciales y dominio en la opción Dynamic DNS.

    En este ejemplo un TP-LINK en la opción Dynamic DNS.

    En los dos casos un PING a nuestro dominio debe devolver una respuesta correcta (consola de sistema o CMD si usas Windows).

    Cuando todo está funcionando es hora de hacer que nuestro servidor nos permita ingresar a MySQL desde nuestro computador con MySQL HeidiSQL u otro gestor de conexiones que usemos; incluso podemos usar nuestro MySQL local para conectarnos en el de nuestro servidor.

    La opción –h seguida de nuestro dominio no permite conectarnos a servidores externos (muy útil para hacer backup de nuestras bases de datos o subir grandes cantidades de datos).

    ¡Atención!, antes de intentar ingresar, vamos a configurar nuestro servidor para ello:

    La configuración sería la siguiente:

    Ingresamos a nuestra consola de servidor, editamos el archivo de configuración "/etc/csf/csf.conf" en la línea DYNDNS y cambiamos o escribimos DYNDNS = "600" ---// actualizará nuestra dirección IP cada 10 minutos.
    En mi caso particular lo tengo en 300 --- ( cinco minutos).

    Editamos el archivo "/etc/csf/csf.dyndns" y agregamos nuestro dominio de esta manera:
    tcp:in:d=3306:s=dominiocreadoen-no-ip
    Como se puede ver en la parte tcp:in:d=3306:
    3306 es el número de puerto de conexión MySQL.

    Cuando estemos listos, reiniciamos el firewall con el comando CSF –r
    Esperamos los minutos indicados para que CSF actualice tu dirección y listo.

    Nota: Si administras tus vps o servidor via SSH Puedes usar esto mismo cambiando o agregando "tcp:in:d=22:s= dominiocreadoen-no-ip ", siendo el puerto 22 el puerto de conexión SSH o el que hayas seleccionado para conectarte.

    Es muy importante que abras una ventana/conexión adicional de SSH, pruebes esto y si todo sale mal en la otra ventana conectada puedas recuperar la configuración, (esto en los casos donde tu única administración sea por SSH).

    Con esto solo tu IP tendrá acceso a tu servidor vía SSH ------------

    Tu servidor solo aceptará conexiones desde tu computador hacia MySQL.

    Tendrás el puerto 3306 cerrado para evitar una conexión no autorizada y podrás conectar hacia mySQL remotamente.

    • Inicialmente esto se hacía con dyndns.com pero ya no ofrecen una versión gratuita y en el caso de www.noip.com Vitalwerks Internet Solutions, ofrece este servicio gratis desde 1999 y esperamos que continúe así por muchos años más.
    • Probar si nuestro puerto 3306 se encuentra abierto desde Windows hacia nuestro servidor (abierto para todo el mundo significa que tu servidor es vulnerable).

    Desde la consola de Sistema CMD debes ejecutar el comando
    "telnet nuestraIPdeservidor 3306" o bien
    "telnet nuestrodominio 3306"

    Si recibes este tipo de respuesta tienes el puerto 3306 y debes configurar apropiadamente tu CSF para impedir el acceso por dicho puerto.

    • El usuario que uses para acceder remotamente a MSYQL debe tener los permisos para ello.
    • Recomendamos no usar ROOT para acceder remotamente.
    • Crear nuevo usuario con los permisos correspondientes y la opción % en vez de localhost o 127.0.0.1

    Este artículo fue probado y escrito escuchando el último concierto de Soda Stereo 2007.

Autor

Heisler Palma

Programador autodidacta, músico e investigador de la mente.

Compartir

Comentarios

uzielgl

30/5/2014
También se podría hacer con un tunel SSH
Hola, que tan válido o que incovenientes habría en hacer esta conexión pero con tuneles SSH, el gestor Navicat tiene esta opción. El resultado creo que es el mismo, me puedo conectar por medio de mi navicat cliente a mi servidor de BD, sin que este servidor tenga el puerto abierto. Y lo que hace es que se conecta como ssh (es decir, aparte de la configuración DB le tengo que mandar los datos de SSH), y desde allí hace las consultas (creo).

Saludos!

heislersin

01/6/2014
uzielgl
Hola Uuzielgl
Me gustaria conectar mi mysql local con el remoto de esa forma
me parece que se puede , avisame si lo haces @heislerweb