Una guía segura para habilitar el acceso remoto a MySQL en 2025
Este artículo proporciona métodos seguros para habilitar el acceso remoto a los servidores MySQL y MariaDB.

Una guía segura para habilitar el acceso remoto a MySQL en 2025

Este artículo le enseñará formas seguras y prácticas de habilitar el acceso remoto a los servidores MySQL y MariaDB en 2025. Siguiendo los consejos de seguridad y usando VPN y SSH, puede acceder a sus bases de datos fácilmente y con confianza.
0 acciones
0
0
0
0

 

¿Cómo habilitar el acceso remoto a MySQL/MariaDB de forma segura?

En esta guía actualizada (2025), exploramos formas prácticas y seguras de habilitar el acceso remoto a servidores MySQL y MariaDB. El objetivo es proporcionar una lista de verificación práctica para administradores de sitios, equipos de DevOps, bases de datos y desarrolladores para permitir el acceso únicamente a usuarios y aplicaciones autorizados, sin comprometer la seguridad.

 

Pasos generales y principios de seguridad

Resumen de pasos:

  • Diseño arquitectónico: Nunca No coloque la base de datos directamente en Internet público a menos que sea necesario.
  • Utilice una red privada (VPC/VLAN), VPN o túnel SSH.
  • Restrinja el acceso según direcciones IP y cree usuarios con Puntuación mínima.
  • Cifrado TLS/SSL para el tráfico de bases de datos y uso de autenticación fuerte (*caching_sha2_password* / *X.509*).
  • Habilite el registro y los límites de velocidad, utilice firewalls y sistemas de detección de intrusiones (IDS/IPS).
  • Revise el rendimiento y la latencia y seleccione la ubicación del centro de datos adecuada según la aplicación.

 

¿Por qué no debería exponerse MySQL directamente a Internet?

Las bases de datos son un objetivo atractivo para los hackers, ya que contienen datos y credenciales confidenciales. Abrir el puerto 3306 a internet sin restricciones ni cifrado aumenta el riesgo de fugas de datos, ataques de fuerza bruta y DDoS.

 

Paso a paso: Configuración de MySQL para acceso remoto (Instrucciones prácticas)

 

1) Editar el archivo de configuración

Archivos de configuración comunes:

  • MySQL (Debian/Ubuntu): /etc/mysql/mysql.conf.d/mysqld.cnf
  • María DB: /etc/mysql/mariadb.conf.d/50-server.cnf

De forma predeterminada, la línea puede dirección de enlace A 127.0.0.1 Está configurado. Para aceptar conexiones desde una IP específica o desde todas las direcciones:

Recomendado: Permitir IP específica:

bind-address = 192.0.2.10

No recomendado excepto en una red privada:

bind-address = 0.0.0.0

Después del cambio:

systemctl restart mysql

 

2) Creación de un usuario seguro con restricciones

Nunca del usuario raíz No usar para conexiones remotas. Comandos de ejemplo:

mysql -u root -p
CREATE USER 'appuser'@'203.0.113.45' IDENTIFIED WITH caching_sha2_password BY 'StrongP@ssw0rd!';
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'appuser'@'203.0.113.45';
FLUSH PRIVILEGES;

Puntos importantes:

  • Es mucho más seguro utilizar una dirección IP específica ('203.0.113.45') en lugar de '%'.
  • Determinación Permisos mínimos (menor privilegio).
  • Utilice direcciones privadas para conexiones desde dentro de la red privada (por ejemplo, 10.xxx).

 

3) Habilitación de SSL/TLS para MySQL

Ejemplo rápido de creación de CA y certificados con OpenSSL:

openssl genrsa 4096 -out ca-key.pem
openssl req -new -x509 -nodes -days 3650 -key ca-key.pem -out ca.pem -subj "/CN=MyDB-CA"

openssl genrsa 4096 -out server-key.pem
openssl req -new -key server-key.pem -out server-req.csr -subj "/CN=db.example.com"
openssl x509 -req -in server-req.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -days 3650

openssl genrsa 4096 -out client-key.pem
openssl req -new -key client-key.pem -out client-req.csr -subj "/CN=dbclient"
openssl x509 -req -in client-req.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out client-cert.pem -days 3650

Colocación de certificados en mi.cnf:

[mysqld]
ssl-ca=/etc/mysql/ssl/ca.pem
ssl-cert=/etc/mysql/ssl/server-cert.pem
ssl-key=/etc/mysql/ssl/server-key.pem

Después de reiniciar, la capacidad de requerir que los usuarios utilicen certificados:

ALTER USER 'appuser'@'203.0.113.45' REQUIRE X509;
-- یا فقط TLS بدون client cert:
ALTER USER 'appuser'@'203.0.113.45' REQUIRE SSL;

Conexión segura desde el cliente:

mysql -u appuser -p -h db.example.com --ssl-mode=REQUIRED --ssl-ca=ca.pem

 

4) Uso del túnel SSH

Adecuado para administradores y con acceso limitado cuando TLS no está disponible. En el equipo cliente:

ssh -fN -L 3306:127.0.0.1:3306 [email protected]

Este método lo conecta al puerto local 3306, que está tunelizado al servidor remoto.

 

5) Configuración del firewall

Ejemplo con ufw (permitir sólo la IP especificada):

ufw allow from 203.0.113.45 to any port 3306 proto tcp

Con firewalld:

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.45" port protocol="tcp" port="3306" accept'
firewall-cmd --reload

Comprobación del puerto:

ss -tlnp | grep 3306
telnet db.example.com 3306

 

Más protección: soluciones avanzadas y recomendadas (2025)

 

Uso de una red privada, VPC y VPN

En lugar de abrir el puerto de la base de datos a internet, utilice una red privada entre la aplicación y la base de datos. Si utiliza nuestro servicio, puede usar una red privada y BGP/VRF para una conexión segura.

Para usuarios distribuidos, se recomienda VPN o IPsec para que el tráfico de la base de datos viaje solo por canales cifrados.

 

Bastion Host y Zero Trust

Implementar un host bastión con autenticación de dos factores (MFA) y registro completo de sesiones es un enfoque más seguro que abrir puertos directamente. El modelo de confianza cero implica que cada conexión debe estar autenticada y solo se permiten recursos específicos.

 

Autenticación y algoritmos

  • MySQL 8: Uso de contraseña sha2 de almacenamiento en caché En lugar de contraseña nativa de mysql Es más seguro.
  • En casos sensibles, utilice Certificados de cliente X.509 Recomendado.
  • Administrar contraseñas con un administrador de secretos o una bóveda (como HashiCorp Vault, AWS Secrets Manager) es mejor que colocar contraseñas en archivos o códigos.

 

Protección contra ataques y restricciones

  • Mantenga max_connect_errors bajo y saltar-nombre-resolver Habilitar para evitar retrasos basados en DNS.
  • Usando fail2ban con un filtro especial mysql-auth para bloquear IP maliciosas.
  • Límite de velocidad de conexión general y configuración adecuada de connection_timeout.

 

Monitoreo y registro

Habilitar registros de auditoría, registros generales y registros de consultas lentas y utilizar herramientas como Prometheus + Grafana o Percona Monitoring es esencial para identificar patrones maliciosos y problemas de rendimiento.

 

Consejos prácticos para elegir la ubicación y configuración del centro de datos según la aplicación

Orientación según el tipo de aplicación:

  • Comercio (Forex/Criptomonedas): Es importante que el RTT al servidor de la plataforma de intercambio/operador sea el más bajo; se recomienda elegir una ubicación cercana a la plataforma. Nuestro servicio ofrece esta opción con más de 85 ubicaciones.
  • Juego de azar: Las bases de datos de juegos requieren un ping bajo; el enrutamiento BGP optimizado y una red de baja latencia son importantes. Los servidores VPS para juegos y los servidores anti-DDoS son útiles.
  • IA/Renderizado: Para cargas altas de E/S y de procesamiento, la combinación de servidores de GPU y de base de datos en la misma zona de red privada reduce la latencia.
  • Sitios web y aplicaciones: El uso de una CDN y un caché de capa de aplicación (Redis/Memcached) junto con una base de datos en una red privada proporciona el mejor equilibrio entre velocidad y costo.

 

Ejemplos de configuración de my.cnf sugeridos para diversos usos

Configuración para un servidor de carga media (web/aplicación):

[mysqld]
bind-address = 10.0.1.5
max_connections = 200
innodb_buffer_pool_size = 2G
skip-name-resolve = 1
ssl-ca=/etc/mysql/ssl/ca.pem
ssl-cert=/etc/mysql/ssl/server-cert.pem
ssl-key=/etc/mysql/ssl/server-key.pem

Para servidores de IA/rending dedicados y de alta carga:

innodb_buffer_pool_size = 16G
innodb_flush_method = O_DIRECT
innodb_io_capacity = 2000

Ajuste siempre la configuración en función de las necesidades de RAM, E/S y aplicaciones.

 

Lista de verificación de seguridad final antes de habilitar el acceso remoto

  • Uso de una red privada o VPN para el tráfico de la base de datos
  • Restringir direcciones IP permitidas en el firewall
  • Cree usuarios con privilegios mínimos y utilice algoritmos hash seguros
  • Habilitar TLS/SSL y, si es necesario, los certificados de cliente
  • No usar root para conexiones remotas
  • Habilitar registro; enviar registros a un sistema externo
  • Establecer límites de conexión y usar fail2ban
  • Monitoreo y alerta en caso de aumentos inusuales de tráfico o errores
  • Copias de seguridad periódicas y pruebas de recuperación

 

Conclusión y recomendación final

Habilitar el acceso remoto a MySQL en 2025 debería ser rápido y seguro. La mejor estrategia: Considere primero una red privada o VPN, luego agregue TLS y restricción de IP, y limite el acceso al mínimo indispensable.

Usar Bastion Host, MFA y registro avanzado aumentará su seguridad. Si necesita un servidor altamente estable, una red de baja latencia y funciones de seguridad, nuestros servicios incluyen más de 85 ubicaciones globales, servidores GPU, servidores de cómputo, servidores anti-DDoS, VPS para comercio y juegos, CDN y red BGP, con opciones listas para usar y personalizables.

 

Preguntas frecuentes

También te puede gustar