En este artículo, le mostraremos cómo configurar conexiones remotas y seguras para MySQL en Ubuntu 16.04 VPS. Si está utilizando una conexión sin cifrar para conectarse a su servidor MariaDB/MySQL remoto, entonces cualquier persona con acceso a la red podría monitorear y analizar los datos que se envían o reciben entre el cliente y el servidor. Esta guía también debería funcionar en otros sistemas Linux VPS, pero fue probada y escrita para un VPS Ubuntu 16.04.
1. Inicie sesión en su VPS a través de SSH
ssh my_sudo_user@my_server
Los pasos de este tutorial asumen que ha instalado MySQL 5.7 con la configuración predeterminada.
Habilitar conexiones SSL:
2. Crear una nueva autoridad certificadora local
Usaremos la autoridad de certificación local como un certificado raíz autofirmado que usaremos para firmar los certificados del servidor y del cliente. Para crear un nuevo archivo de autoridad certificadora local, ejecute los siguientes comandos:
sudo openssl genrsa -out /etc/mysql/ca-key.pem 2048 sudo chmod 600 /etc/mysql/ca-key.pem sudo openssl req -new -key /etc/mysql/ca-key.pem -out /etc/mysql/ca-csr.pem -subj /CN=mysql-CA/ sudo openssl x509 -req -in /etc/mysql/ca-csr.pem -out /etc/mysql/cacert.pem -signkey /etc/mysql/ca-key.pem -days 3650 sudo echo 01 > /etc/mysql/cacert.srl
3. Generar certificado y clave del servidor
Para generar un certificado de servidor y una clave, emita los siguientes comandos:
sudo openssl genrsa -out /etc/mysql/server-key.pem 2048 sudo chmod 600 /etc/mysql/server-key.pem sudo openssl req -new -key /etc/mysql/server-key.pem -out /etc/mysql/server-csr.pem -subj /CN=mysql/ sudo openssl x509 -req -in /etc/mysql/server-csr.pem -out /etc/mysql/server-cert.pem -CA /etc/mysql/cacert.pem -CAkey /etc/mysql/ca-key.pem -days 365
4. Generar Certificado y Clave de Clientes
A continuación, necesitamos generar el certificado de cliente. Ejecute los siguientes comandos para generar un certificado y una clave de cliente:
sudo openssl genrsa -out /etc/mysql/client-key.pem 2048 sudo chmod 600 /etc/mysql/client-key.pem sudo openssl req -new -key /etc/mysql/client-key.pem -out /etc/mysql/client-csr.pem -subj /CN=mysql/ sudo openssl x509 -req -in /etc/mysql/client-csr.pem -out /etc/mysql/client-cert.pem -CA /etc/mysql/cacert.pem -CAkey /etc/mysql/ca-key.pem -days 365
Si desea tener un certificado SSL firmado por una CA, puede comprar un certificado SSL de confianza aquí.
5. Habilitar las conexiones SSL del servidor MySQL
Abra el archivo de configuración de MySQL con su editor de texto:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
y descomente las siguientes líneas:
ssl-ca=/etc/mysql/cacert.pem ssl-cert=/etc/mysql/server-cert.pem ssl-key=/etc/mysql/server-key.pem
Guarde el archivo y reinicie el servicio MySQL:
sudo systemctl restart mysql
Para verificar que SSL está habilitado, inicie sesión en el servidor MySQL
mysql -uroot -p
y ejecuta el siguiente comando:
mysql> show variables LIKE '%ssl%';
La salida debe ser similar a la siguiente:
+---------------+----------------------------+ | Variable_name | Value | +---------------+----------------------------+ | have_openssl | YES | | have_ssl | YES | | ssl_ca | /etc/mysql/cacert.pem | | ssl_capath | | | ssl_cert | /etc/mysql/server-cert.pem | | ssl_cipher | | | ssl_crl | | | ssl_crlpath | | | ssl_key | /etc/mysql/server-key.pem | +---------------+----------------------------+ 9 rows in set (0.15 sec)
6. Habilitar conexiones remotas a través de SSL
De forma predeterminada, MySQL solo escucha conexiones en localhost. Para habilitar las conexiones remotas, debe volver a configurar MySQL en su servidor para escuchar en todas las interfaces, para hacerlo, abra el archivo de configuración de MySQL:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
y cambiar
bind-address = 127.0.0.1
a
bind-address = 0.0.0.0
Para que los cambios surtan efecto, reinicie el servidor MySQL con el siguiente comando:
sudo systemctl restart mysql
Verifique que su servidor MySQL escuche en todas las interfaces:
sudo netstat -anp | grep 3306
la salida debe ser similar a la siguiente:
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 938/mysqld
Para permitir que su cliente MySQL se conecte al servidor MySQL, debe otorgar al usuario de la base de datos acceso a la base de datos en el servidor remoto.
Por ejemplo, si desea otorgar acceso a dbuser
usuario al database_name
base de datos y para forzar SSL, inicie sesión en MySQL shell como root y ejecute el siguiente comando:
GRANT ALL ON database_name.* TO [email protected] IDENTIFIED BY 'dbuserpassword' REQUIRE SSL;
donde 192.168.1.10
es la dirección IP de su máquina cliente MySQL.
A continuación, debe configurar su cliente MySQL para usar el certificado SSL generado anteriormente. Copie los siguientes archivos desde su servidor MySQL a su máquina cliente MySQL:
/etc/mysql/cacert.pem /etc/mysql/client-cert.pem /etc/mysql/client-key.pem
7. Configurar Cliente MySQL
abra la configuración de su cliente MySQL y agregue las siguientes líneas:
[client] ssl-ca=/etc/mysql/cacert.pem ssl-cert=/etc/mysql/client-cert.pem ssl-key=/etc/mysql/client-key.pem
8. Prueba tu conexión
Ahora puede probar su conexión desde la máquina cliente al servidor de la base de datos MySQL:
mysql -udbuser -pdbuserpassword -h 192.168.1.5
donde 192.168.1.5
es la dirección IP de su servidor de base de datos MySQL.
Eso es todo. Ha configurado con éxito conexiones remotas y seguras para MySQL en su Ubuntu 16.04 VPS. Para obtener más información sobre las conexiones seguras de MySQL, consulte la documentación oficial de MySQL.
Por supuesto, no tiene que configurar conexiones remotas y seguras para MySQL en Ubuntu 16.04 si usa uno de nuestros servicios de hospedaje VPS de Ubuntu, en cuyo caso simplemente puede pedirle a nuestros administradores expertos de Linux que configuren conexiones remotas y seguras para MySQL en Ubuntu 16.04 para ti. Están disponibles las 24 horas del día, los 7 días de la semana y atenderán su solicitud de inmediato.
PD . Si le gustó esta publicación sobre cómo configurar conexiones remotas y seguras para MySQL en Ubuntu 16.04, compártala con sus amigos en las redes sociales usando los botones a la izquierda o simplemente deje una respuesta a continuación. Gracias.