¿Cómo configurar un Jump Proxy?

«Security» by CarbonNYC [in SF!] is licensed with CC BY 2.0.

Un Jump Proxy o Jump Host es un servidor o dispositivo que se usa como puente para conectarse a otro dispositivo que por lo general está en una red de área local, de ahí que el Jump Proxy es accesible vía IP externa y en el mismo se debe implementar reglas de seguridad que permitan proteger tanto al Jump Proxy como a la LAN.

El primer paso para configurar un Jump Proxy es crear un usuario para este próposito.

Crear usuario

$ adduser jumper

Luego de creado el usuario debemos configurar el servicio SSH para que solo permita hacer redirección TCP (Jump) para ello editamos el fichero de configuración del servicio ssh

Editar fichero de configuración del servicio SSH

Use su editor de texto preferido y edite el fichero: /etc/ssh/sshd_config agregando la siguiente configuración

Match User jumper
   AllowAgentForwarding no
   AllowTcpForwarding yes
   X11Forwarding no
   PermitTunnel no
   GatewayPorts no
   ForceCommand echo 'This account can only be used for ProxyJump (ssh -J)'

Si tratamos de conectarnos al servidor ejecutando:

$ ssh jumper@IP-Del-Servidor

obtendrá el mensaje:

This account can only be used for ProxyJump (ssh -J)

Agregar las máquinas virtuales/físicas al /etc/hosts

Este paso no es necesario si tiene un servicio de DNS en su LAN, lo importante es que el servidor JumpProxy conozca las direcciones IPs de los dispositivos a los cuales desea conectarse.

# VM IPs
192.168.100.2 vm1
192.168.100.3 vm2
192.168.100.4 vm3

Conectarse a las máquinas virtuales

Para conectarnos a lás máquinas virtuales debemos usar un cliente que tenga la opción Jump (-J)

$ ssh -J jumper@IP-JumProxy admin@VM

Donde:

  • IP-JumProxy: es la IP del servidor JumpProxy
  • VM: puede ser cualquiera de los nombres agregados al /etc/hosts (vm1, vm2, vm3)

En este caso le va a solicitar la contraseña para jumper y contraseña para el usuario admin (El usuario admin debió haberse creado con anterioridad en cada una de las VM), más adelante explico como usar llaves públicas y privadas en lugar de usuario y contraseña.

Usar Cygwin

Si usas Windows recomiendo instalar Cygwin para realizar la conexión a la máquina virtual ya que Putty no tiene la opción -J

Descargar Cygwin

Puede descargar el instalador en setup-x86_64.exe

Instalar

Ejecute el instalador es importante que seleccione el paque OpenSSH, luego le da Next, Next, Next …

Ejecute Cygwin

Ejecute el programa Cygwin y le aparecerá una terminal en la cuál puede ejecutar el siguiente comando:

$ ssh -J jumper@IP admin@VM

Usar llaves públicas y privadas

Las llaves públicas y privadas nos permiten conectarnos al servidor sin necesidad de conocer la clave del usuario con el cual nos conectamos pero tiene la desventaja de que hay que mantener el fichero authorized_keys que se encuentra debajo del directorio .ssh, para que este mecanismo funcione debe cumplirse las siguientes reglas:

  1. El directorio .ssh debe tener permisos 700
  2. El fichero authorized_keys debe tener permisos 600
  3. La llave pública no debe contener ni espacio ni un caracter de más.

Generar llaves

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/tester/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/tester/.ssh/id_rsa
Your public key has been saved in /home/tester/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:arSKOaNmL/YX1Y7IwuiLVicHh8bjrQDidqMXzXfY58U tester@testing
The key's randomart image is:
+---[RSA 3072]----+
|                 |
|                 |
|  . .   .        |
|o  * . . .       |
|+ = O + S   .    |
| = X @ * + . E   |
|o = O * . o .    |
|.Oo= +     .     |
|BoO=o            |
+----[SHA256]-----+

Deje vacío el passphrase de lo contrario tendrá que teclear la frase cada vez que se conecte a la VM, el comando anterior generó 2 ficheros:

id_rsa  
id_rsa.pub

Ahora debe copiar/agregar el contenido de llave pública al fichero authorized_keys. Nunca provea su llave privada porque es como la llave del candado de su casa.

Copiar llave pública al servidor principal (IP-JumProxy)

  1. Puede autenticarse al servidor via ssh usando el usuario root u otro usuario creado para ese próposito
    $ ssh root@IP-JumProxy
    
  2. Ejecute el siguiente comando:
    # su - jumper
    
  3. Abra el fichero .ssh/authorized_keys con su editor de texto preferido
  4. Agregue el contenido de su llave pública: id_rsa.pub
  5. Salve el fichero

Copiar llave pública a la máquina virtual

El procedimiento para la máquina virtual es más sencillo, solo ejecute:

$ ssh-copy-id -i .ssh/id_rsa.pub -o 'ProxyJump jumper@IP-JumProxy' admin@VM

Teclee la contraseña para el usuario admin, luego ya puede conectarse a la máquina virtual usando llaves públicas y privadas.

$ ssh -J jumper@IP admin@VM

Si el comando anterior le parece demasiado largo entonces cree el fichero .ssh/config en su PC y agregue:

Host proxy
    HostName IP-JumProxy
    Port 22
    User jumper
Host vm1
    HostName vm1
    Port 22
    User admin
    ProxyJump proxy
Host vm2
    HostName vm2 
    Port 22
    User admin
    ProxyJump proxy
Host vm3
    HostName vm3 
    Port 22
    User admin
    ProxyJump proxy

Ahora bastaría con ejecutar

$ ssh hostname

donde hostname = vm1, vm2 o vm3.

Lecturas recomendadas

  • man ssh
  • man sshd_config
YouTube video

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.