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:
- El directorio .ssh debe tener permisos 700
- El fichero authorized_keys debe tener permisos 600
- 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)
- Puede autenticarse al servidor via ssh usando el usuario root u otro usuario creado para ese próposito
$ ssh root@IP-JumProxy
- Ejecute el siguiente comando:
# su - jumper
- Abra el fichero .ssh/authorized_keys con su editor de texto preferido
- Agregue el contenido de su llave pública: id_rsa.pub
- 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