La diferencia en una tabla
| Jump host | Bastion host | |
|---|---|---|
| Qué describe el término | Un papel: un servidor por el que pasas | Una máquina creada solo para ese papel |
| Dónde está | En cualquier sitio: una máquina de desarrollo, una VM de administración, otro servidor | En el borde, accesible desde internet o desde la oficina |
| Qué más se ejecuta en él | A menudo otros servicios | Nada más que SSH |
| Quién puede entrar | Cualquiera con una cuenta | Usuarios con nombre, a menudo solo con reenvío y sin shell |
| Servidores privados | Normalmente accesibles también de otras formas | Solo aceptan SSH desde el bastión |
| Registros | Lo que guarde el servidor | Cada conexión registrada, con los registros fuera de la máquina |
Así que la pregunta no es cuál elegir. Un bastión es un jump host convertido en la única puerta de entrada y protegido como tal. Otros nombres para lo mismo son jump server, jump box y pasarela SSH.
Cómo pasa SSH a través de uno u otro
Desde tu lado, la conexión es igual en ambos casos. Hay dos formas buenas y una que conviene evitar:
# ProxyJump, OpenSSH 7.3 and later
ssh -J user@bastion user@10.0.0.5
# ProxyCommand with -W, the older equivalent
ssh -o ProxyCommand="ssh -W %h:%p user@bastion" user@10.0.0.5
# Two separate logins: avoid
ssh -A user@bastion
ssh user@10.0.0.5
Con las dos primeras, el jump host solo abre una conexión TCP hacia el destino y reenvía los bytes. Tu sesión SSH con 10.0.0.5 va cifrada desde tu equipo, y tu clave se usa desde tu equipo. Con la tercera, obtienes una shell en el jump host y lanzas un nuevo ssh desde allí, así que o tu clave privada está en esa máquina o tu agente se reenvía hasta ella. Cualquiera con root en esa máquina puede entonces usarla.
Las formas para el archivo de configuración, los saltos múltiples y las opciones que no llegan al jump host están en ProxyJump y jump host con ejemplos.
¿ProxyJump o ProxyCommand?
Usa ProxyJump cuando el salto es un servidor SSH. Es más corto, se encadena con comas y cada salto es un Host normal con su propio usuario, puerto y clave:
ssh -J bastion-eu,admin-gw db-internal
Usa ProxyCommand cuando la entrada no es SSH simple: un proxy HTTP o SOCKS a través de nc, o la herramienta de línea de comandos de un proveedor cloud que abre la sesión por ti. ssh ejecuta el comando y se comunica con su entrada y salida estándar.
Las dos opciones compiten: gana la que se define primero, y un -o en la línea de comandos va antes que el archivo de configuración. Para saber cuál se aplica a un host, pregúntale a ssh:
ssh -G db-internal | grep -i '^proxy'
proxyjump bastion-eu,admin-gw
Qué convierte un jump host en un bastión
- Una sola tarea. Un servidor pequeño con SSH y nada más: sin base de datos, sin web, sin herramientas de compilación.
- La única puerta. Los servidores privados aceptan el puerto 22 solo desde la dirección del bastión, en el firewall o en el grupo de seguridad.
- Sin claves en él y sin agent forwarding. Los usuarios pasan a través de él con
ProxyJump. - Solo reenvío. La mayoría de los usuarios no necesita una shell en él. Un bloque
Match GroupconPermitOpenlimita a dónde pueden ir. - Acceso fuerte. Solo claves y, si quieres, un segundo factor con TOTP.
- Registros guardados en otro sitio. Los registros de conexión salen de la máquina, para que un intruso no pueda borrarlos.
- Actualizado a menudo. Está expuesto a internet, así que las actualizaciones de seguridad se instalan solas.
La configuración completa de sshd, con los comandos para comprobar qué se rechaza, está en cómo configurar un bastion host SSH.
¿Sigues necesitando un bastión?
Un bastión resuelve un solo problema: que la gente llegue a los servidores privados por una única entrada vigilada. Otras herramientas resuelven lo mismo de otra manera:
- Una VPN o una red privada superpuesta pone tu equipo en la red privada, y te conectas a los servidores directamente.
- El servicio de sesiones de un proveedor cloud abre una shell o un túnel a través de la API del proveedor, sin ningún puerto SSH abierto.
- Un proxy de acceso basado en identidad comprueba quién eres en cada conexión y graba las sesiones en un solo lugar.
Cada uno traslada la única puerta a otro sitio. El bastión sigue siendo la opción más sencilla cuando quieres OpenSSH tal cual, sin agentes en los servidores y sin otro servicio que mantener.
Preguntas
¿Un jump server y un bastion host son lo mismo?
En el uso diario, casi siempre sí, y jump box significa lo mismo. En sentido estricto, jump server o jump host describe el papel, hacerte pasar, mientras que bastión se refiere a una máquina endurecida en el borde de la red cuya única función es esa.
¿Puede el bastión leer mi sesión SSH?
No con ProxyJump o ProxyCommand ssh -W. Solo reenvía el flujo cifrado, así que ve quién se conectó, cuándo y a qué dirección y puerto. Solo puede leerlo todo si abres una shell en él y vuelves a lanzar ssh desde allí.
¿Debo usar agent forwarding a través de un bastión?
No. Usa ProxyJump. Con ssh -A hacia el bastión, cualquiera con root en él puede usar tus claves mientras estés conectado. Consulta los riesgos del agent forwarding.
¿Necesito un bastión si ya tengo una VPN?
No siempre. Una VPN o una red privada superpuesta puede sustituirlo como puerta de entrada. Muchos equipos mantienen igualmente un bastión como único punto de acceso SSH, porque una sola máquina es fácil de vigilar, registrar y cerrar.
Fuentes
- ssh(1), -J y -W, manual de OpenBSD
- ssh_config(5), ProxyJump y ProxyCommand, manual de OpenBSD
- sshd_config(5), reenvío y Match, manual de OpenBSD
- Notas de la versión 7.3 de OpenSSH, ProxyJump