Qué es proxyjump, por qué y cómo deberías usarlo

Una de las cosas que tengo en mente para 2021 es dejar de usar Docker para mis soluciones Self Hosted y pasarlas a un pequeño y modesto cluster de Kubernetes en Azure o DigitalOcean y en ese movimiento es que decidí adoptar ciertas practicas de seguridad, como la configuración de una pequeña VM que haga de Bastión, de esta manera, cierro el puerto 22 de los nodos y hago que solo queden accesible a través de esta máquina.

Una vez que esta todo configurado y quiero acceder a uno de esos nodos desde mi maquina, uso Proxyjump, que basicamente lo que hace es, generarme la conexión hacia el nodo del cluster que me interesa, pero usando como proxy o como "escala" al bastión.

Qué es ProxyJump

Tecnicamente proxyjump es una directiva del protocolo SSH que nos va a permitir conectarnos a un nodo remoto a través de otro. Logrando así armar un tunel entre nuestra maquina y la maquina de destino sin necesidad de exponer esta misma a Internet u otras redes para accederla.

Por qué deberías usarlo...

Cuando armamos una arquitectura de este estilo, con servidores en la nube, es buena idea reducir las posibilidades de ataque a esos servidores. Como seguramente sabrás, hay botnets que se encargan de escanear los rangos de los proveedores de servicio para así buscar vulnerabilidades o posibilidades de ataque.

Cuando reducimos la superficie de ataque, reducimos las posibilidades de que nuestros servicios dejen de funcionar y si en todo caso tenemos ataques de fuerza bruta o denegación de servicio, los tendremos en el bastión en donde no tenemos nada critico corriendo.

Creo que es una excelente práctica de seguridad, que combinadas con algunas otras, como doble factor de autenticación para loguearnos y el uso de llaves SSH hace que intentar "hackearnos" sea más complicado.

Cómo configurar 2FA para autenticarse en Ubuntu Server
Agregar un segundo factor de autenticación a un servidor cuando nos conectamos por SSH es una excelente idea. En este artículo, te muestro cómo configurarlo en Ubuntu Server.

Cómo usarlo...

Ahora bien, repasemos un poco, para conectarte por SSH, normalmente usas un comando así:

$ ssh user@remote-host

Si usas llaves SSH (Que deberías a esta altura de la vida) entras directamente al servidor.

Para el caso del uso de proxyjump, funciona de esta manera:

$ ssh -J user@bastion user@remote-host

Esto es lo que hace es que se conecta al remote-host, en mi caso, el nodo de Kubernetes al cual quiero conectarme, a través del bastión.

Ahora, vos me diras, pero es un parto tenés que escribir todo eso y tal vez, si sobre todo si tenés que andar acordandote de direcciones IP o nombres de hosts.

Para eso, te recomiendo que uses config. Config, es un archivo que se guarda en el directorio ~/.ssh/. En este archivo, podés guardar los nombres de los hosts, direcciones IP, usuario con cual conectarte y ProxyJump.

El archivo, en mi caso, se ve más o menos así:

Host bastion
Hostname 'IP o Hostname'
User tu_usuario

### nodo-1
Host nodo-1
Hostname 'IP o Hostname'
User root
ProxyJump bastion

Tenemos el host bastión y el nodo-1, ahora, como recordarán, no tengo habilitado el acceso SSH directo hacia el nodo-1, entonces lo que hago es conectarme a través del bastión. En este caso, quedaría de la siguiente manera:

$ ssh nodo-1

De esta manera, me voy a poder conectar al nodo-1 pero a través del bastion. Fijense que en el config esta especificada la directiva que me permitirá hacerlo.

Para ir cerrando

Como ves, esta es otra herramienta para que puedas gestionar tus servidores que están de manera remota de manera un poco más segura, como decía más arriba, la idea es que si lo combinas con otras practicas, el riesgo de que realmente nuestros sistemas sean vulnerados baja considerablemente.

Contame, ¿usas un bastión y proxyjump para conectarte o seguis accediendo a tus servidores directamente?

Foto de portada: Victor Rodriguez

Victor Rodriguez (@vimarovi) | Unsplash Photo Community
See the best free to download photos, images, and wallpapers by Victor Rodriguez on Unsplash.