- ¿Cómo habilitar el acceso remoto a MySQL/MariaDB de forma segura?
- Pasos generales y principios de seguridad
- ¿Por qué no debería exponerse MySQL directamente a Internet?
- Paso a paso: Configuración de MySQL para acceso remoto (Instrucciones prácticas)
- Más protección: soluciones avanzadas y recomendadas (2025)
- Consejos prácticos para elegir la ubicación y configuración del centro de datos según la aplicación
- Ejemplos de configuración de my.cnf sugeridos para diversos usos
- Lista de verificación de seguridad final antes de habilitar el acceso remoto
- Conclusión y recomendación final
- Preguntas frecuentes
¿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.10No recomendado excepto en una red privada:
bind-address = 0.0.0.0Despué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 3650Colocació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.pemDespué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 tcpCon firewalld:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.45" port protocol="tcp" port="3306" accept'
firewall-cmd --reloadComprobació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 decontraseña nativa de mysqlEs 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-resolverHabilitar 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.pemPara servidores de IA/rending dedicados y de alta carga:
innodb_buffer_pool_size = 16G
innodb_flush_method = O_DIRECT
innodb_io_capacity = 2000Ajuste 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.









