sql >> Base de Datos >  >> RDS >> Mysql

Uso de túneles SSH como alternativa de VPN

Usar una conexión VPN es la forma más segura de acceder a una red si está trabajando de forma remota, pero como esta configuración podría requerir hardware, tiempo y conocimientos, probablemente desee conocer alternativas para hacerlo. . El uso de SSH también es una forma segura de acceder a una red remota sin hardware adicional, requiere menos tiempo y menos esfuerzo que configurar un servidor VPN. En este blog, veremos cómo configurar SSH Tunneling para acceder a sus bases de datos de forma segura.

¿Qué es SSH?

SSH (Secure SHell), es un programa/protocolo que le permite acceder a una red/host remoto, ejecutar comandos o compartir información. Puede configurar diferentes métodos de autenticación encriptados y usa el puerto 22/TCP de manera predeterminada, pero se recomienda cambiarlo por razones de seguridad.

¿Cómo usar SSH?

La forma más segura de usarlo es creando un par de claves SSH. Con esto, no solo necesita tener la contraseña sino también la clave privada para poder acceder al host remoto.

Además, debe tener un host con solo la función de servidor SSH y mantenerlo lo más aislado posible, de modo que, en caso de un ataque externo, no afecte a sus servidores locales. Algo como esto:

Veamos primero, cómo configurar el servidor SSH.

Configuración del servidor

La mayor parte de la instalación de Linux tiene el servidor SSH instalado de forma predeterminada, pero hay algunos casos en los que podría faltar (ISO mínimo), por lo que para instalarlo, solo necesita instalar los siguientes paquetes:

SO basado en RedHat

$ yum install openssh-clients openssh-server

SO basado en Debian

$ apt update; apt install openssh-client openssh-server

Ahora que tiene instalado el servidor SSH, puede configurarlo para que solo acepte conexiones usando una clave.

vi /etc/ssh/sshd_config

PasswordAuthentication no

Asegúrese de cambiarlo después de tener la clave pública en su lugar, de lo contrario no podrá iniciar sesión.

También puede cambiar el puerto y denegar el acceso raíz para hacerlo más seguro:

Port 20022

PermitRootLogin no

Debe verificar si el puerto seleccionado está abierto en la configuración del firewall para poder acceder a él.

Esta es una configuración básica. Hay diferentes parámetros para cambiar aquí para mejorar la seguridad de SSH, por lo que puede seguir la documentación para esta tarea.

Configuración del cliente

Ahora, generemos el par de claves para que el usuario local "remoto" acceda al servidor SSH. Hay diferentes tipos de claves, en este caso generaremos una clave RSA.

$ ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/home/remote/.ssh/id_rsa):

Created directory '/home/remote/.ssh'.

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /home/remote/.ssh/id_rsa.

Your public key has been saved in /home/remote/.ssh/id_rsa.pub.

The key fingerprint is:

SHA256:hT/36miDBbRa3Povz2FktC/zNb8ehAsjNZOiX7eSO4w [email protected]

The key's randomart image is:

+---[RSA 3072]----+

|                 |

|        ..  .    |

|       o.+.=.    |

|        *o+.o..  |

|       +S+o+=o . |

|      . o +==o+  |

|         =oo=ooo.|

|        .E=*o* .+|

|         ..BB ooo|

+----[SHA256]-----+

Esto generará los siguientes archivos en un directorio llamado “.ssh” dentro del directorio de inicio del usuario:

$ whoami

remote

$ pwd

/home/remote/.ssh

$ ls -la

total 20

drwx------ 2 remote remote 4096 Apr 16 15:40 .

drwx------ 3 remote remote 4096 Apr 16 15:27 ..

-rw------- 1 remote remote 2655 Apr 16 15:26 id_rsa

-rw-r--r-- 1 remote remote  569 Apr 16 15:26 id_rsa.pub

El archivo “id_rsa” es la clave privada (manténgala lo más segura posible), y “id_rsa.pub” es la pública que debe copiarse en el host remoto para acceder a ella. Para ello, ejecute el siguiente comando como el usuario correspondiente:

$ whoami

remote

$ ssh-copy-id -p 20022 [email protected]

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/remote/.ssh/id_rsa.pub"

/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed

/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys

[email protected]'s password:



Number of key(s) added:        1



Now try logging into the machine, with:   "ssh -p '20022' '[email protected]"

and check to make sure that only the key(s) you wanted were added.

En este ejemplo, estoy usando el puerto 20022 para SSH y mi host remoto es 35.166.37.12. También tengo el mismo usuario (remoto) creado en hosts locales y remotos. Puede usar otro usuario en el host remoto, por lo que en ese caso, debe cambiar el usuario al correcto en el comando ssh-copy-id:

$ ssh-copy-id -p 20022 [email protected]

Este comando copiará la clave pública en el archivo authorized_keys en el directorio remoto .ssh. Entonces, en el servidor SSH deberías tener esto ahora:

$ pwd

/home/remote/.ssh

$ ls -la

total 20

drwx------ 2 remote remote 4096 Apr 16 15:40 .

drwx------ 3 remote remote 4096 Apr 16 15:27 ..

-rw------- 1 remote remote  422 Apr 16 15:40 authorized_keys

-rw------- 1 remote remote 2655 Apr 16 15:26 id_rsa

-rw-r--r-- 1 remote remote  569 Apr 16 15:26 id_rsa.pub

Ahora, debería poder acceder al host remoto:

$ ssh -p 20022 [email protected]

Pero esto no es suficiente para acceder a su nodo de base de datos, ya que todavía se encuentra en el servidor SSH.

Acceso a la base de datos SSH

Para acceder a su nodo de base de datos tiene dos opciones. La forma clásica es, si estás en el servidor SSH, puedes acceder desde allí ya que estás en la misma red, pero para esto, debes abrir dos o tres conexiones.

Primero, la conexión SSH establecida al servidor SSH:

$ ssh -p 20022 [email protected]

Luego, la conexión SSH al nodo de la base de datos:

$ ssh [email protected]

Y finalmente, la conexión a la base de datos, que en el caso de MySQL, es:

$ mysql -h localhost -P3306 -udbuser -p

Y para PostgreSQL:

$ psql -h localhost -p 5432 -Udbuser postgres

Si tiene el cliente de la base de datos instalado en el servidor SSH, puede evitar la segunda conexión SSH y simplemente ejecutar la conexión de la base de datos directamente desde el servidor SSH:

$ mysql -h 192.168.100.120 -P3306 -udbuser -p

o:

$ psql -h 192.168.100.120 -p 5432 -Udbuser postgres

Pero, esto podría ser molesto ya que solía usar la conexión de la base de datos directamente desde su computadora conectada en la oficina, así que veamos cómo usar SSH Tunneling para esto.

Tunelización SSH

Siguiendo el mismo ejemplo, tenemos:

  • Dirección IP pública del servidor SSH:35.166.37.12
  • Puerto del servidor SSH:20022
  • Dirección IP privada del nodo de la base de datos:192.168.100.120
  • Puerto de base de datos:3306/5432
  • Usuario SSH (local y remoto):remoto
  • Usuario de base de datos:dbuser

Línea de comandos

Entonces, si ejecuta el siguiente comando en su máquina local:

$ ssh -L 8888:192.168.100.120:3306 [email protected] -p 20022 -N

Esto abrirá el puerto 8888 en su máquina local, que accederá al nodo de la base de datos remota, puerto 3306, a través del servidor SSH, puerto 20022, utilizando el usuario "remoto".

Entonces, para que quede más claro, después de ejecutar este comando, puede acceder al nodo de la base de datos remota, ejecutando esto en su máquina local:

$ mysql -h localhost -P8888 -udbuser -p

Herramientas gráficas

Si está utilizando una herramienta gráfica para administrar bases de datos, lo más probable es que tenga la opción de usar SSH Tunneling para acceder al nodo de la base de datos.

Veamos un ejemplo usando MySQL Workbench:

Y lo mismo para PgAdmin:

Como puede ver, la información solicitada aquí es bastante similar a la utilizada para la línea de comandos SSH Tunneling connection.

Conclusión

La seguridad es importante para todas las empresas, por lo que si trabaja desde casa, debe mantener los datos tan seguros como cuando trabaja en la oficina. Como mencionamos, para esto, probablemente la mejor solución sea tener una conexión VPN para acceder a las bases de datos, pero si por alguna razón no es posible, es necesario tener una alternativa para evitar el manejo de datos a través de Internet de manera insegura. Como puede ver, configurar SSH Tunneling para acceder a sus bases de datos no es ciencia espacial, y es probablemente la mejor alternativa en este caso.