Universo Ssh III. Guía Completa de Túneles SSH y Port Forwarding: Acceso Seguro a Servicios Internos
Después de la primera entrega, llego la segunda entrega. Como dicen que no hay dos sin tres pues vamos con la tercera entrega. Esta vez toca hablar de los túneles, popularmente conocidos como “ la vpn del pobre “. Algo que te pude sacar de muchos apuros.
El port forwarding con SSH es una técnica esencial para administradores de sistemas y desarrolladores que necesitan acceder de forma segura a servicios internos, publicar aplicaciones o navegar por redes públicas sin riesgos. Sus funcionalidades son inmensas, se pueden aplicar en las mas variopintas situaciones. Ahora veremos varias de ellas con supuestos meramente prácticos. Un problema, una solución. Vamos a partir del siguiente esquema de red para poder explicar los casos de uso:
+----------+ +----------+ +----------+ +----------+ +----------+
| externo2 | --- | externo1 | --- | firewall | --- | interno1 | --- | interno2 |
+----------+ +----------+ +----------+ +----------+ +----------+
🔑 ¿Qué es el Port Forwarding con SSH?
El port forwarding permite redirigir tráfico TCP a través de un túnel seguro SSH, cifrando la conexión y habilitando accesos controlados a servicios internos.
Beneficios:
- Cifrado de conexiones inseguras.
- Acceso a servicios internos detrás de firewalls o NAT, ZeroConfig en el destino.
- Publicación de servicios internos de manera segura.
ℹ️ Nota: Configura correctamente en tu servidor ssh, revisa tu
sshd_configy revisaAllowTcpForwardingpara mantener la seguridad.
🧭 Tipos de Túneles SSH
1. Local Port Forwarding (-L)
Redirige un puerto local a un destino remoto.
ssh -L 8080:servidor_interno:80 usuario@puente
2. Remote Port Forwarding (-R)
Redirige un puerto remoto hacia tu máquina local o un destino accesible desde esta.
ssh -R 9090:localhost:22 usuario@servidor
3. Dynamic Port Forwarding (-D)
Crea un proxy SOCKS dinámico para redirigir múltiples conexiones TCP.
ssh -D 1080 usuario@servidor
🌐 8 Escenarios de Túneles TCP/IP
A continuación se detallan los 8 escenarios clásicos de port forwarding con diagramas ASCII y comandos prácticos.
Escenario 1: externo1 → interno1
ssh -L 7900:localhost:5900 usuario@interno1
[externo1] --(SSH)--> [interno1:5900]
^
| localhost:7900
Escenario 2: externo2 → interno1 (via externo1)
ssh -L 7900:localhost:7900 usuario@externo1
[externo2] --(L:7900)--> [externo1:7900] --(SSH)--> [interno1:5900]
Escenario 3: interno1 → externo1 (Remote Forwarding)
ssh -R 9000:localhost:80 usuario@externo1
[interno1:80] --(R:9000)--> [externo1:9000]
Escenario 4: interno2 → externo1 (via interno1)
[interno2] --> [interno1] --(R)--> [externo1]
Escenario 5: externo2 → interno2 (via externo1, interno1)
ssh -L 8000:interno2:80 usuario@externo1
[externo2] --> [externo1] --(SSH)--> [interno1] --> [interno2:80]
Escenario 6: interno2 → externo2 (via interno1, externo1)
ssh -R 8022:externo2:22 usuario@interno1
[interno2] --> [interno1] --(R:8022)--> [externo1] --> [externo2:22]
Escenario 7: Forwarding local encadenado (interno2 → externo2)
ssh -L 7000:externo2:22 usuario@interno1
ssh -L 7000:localhost:7000 usuario@interno2
[interno2] --(L:7000)--> [interno1] --(L:7000)--> [externo1] --(L:22)--> [externo2]
Escenario 8: Forwarding remoto encadenado (externo2 → interno2)
ssh -R 8500:interno2:80 usuario@externo1
ssh -R 8500:localhost:8500 usuario@externo2
[externo2] --(R:8500)--> [externo1] --(R:8500)--> [interno1] --(R:80)--> [interno2]
📊 Resumen de Escenarios y Comandos
| Escenario | Descripción | Comando Principal |
|---|---|---|
| 1 | externo1 → interno1 | ssh -L 7900:localhost:5900 usuario@interno1 |
| 2 | externo2 → interno1 (via externo1) | ssh -L 7900:localhost:7900 usuario@externo1 |
| 3 | interno1 → externo1 (remote) | ssh -R 9000:localhost:80 usuario@externo1 |
| 4 | interno2 → externo1 (via interno1) | Encadenado con -R en interno1 |
| 5 | externo2 → interno2 (via externo1, interno1) | ssh -L 8000:interno2:80 usuario@externo1 |
| 6 | interno2 → externo2 (via interno1, externo1) | ssh -R 8022:externo2:22 usuario@interno1 |
| 7 | interno2 → externo2 (local encadenado) | ssh -L 7000:externo2:22 usuario@interno1 + ssh -L 7000:localhost:7000 usuario@interno2 |
| 8 | externo2 → interno2 (remote encadenado) | ssh -R 8500:interno2:80 usuario@externo1 + ssh -R 8500:localhost:8500 usuario@externo2 |
💡 Casos de Uso Reales
1. Acceso a una base de datos interna
ssh -L 3306:localhost:3306 usuario@servidor_interno
[cliente_mysql_local] --(L:3306)--> [servidor_interno:3306]
2. Navegación segura desde una red pública
ssh -D 1080 usuario@servidor_remoto
[navegador_web] --(SOCKS5:1080)--> [ssh_túnel] --> [servidor_remoto] --> [Internet]
3. Publicar un servidor web local
ssh -R 8080:localhost:3000 usuario@servidor_publico
[navegador_colega] --> [servidor_publico:8080] --(R:8080)--> [tu_PC:3000]
4. Acceso remoto seguro a servicios de empresa
ssh -L 8443:intranet:443 usuario@bastion
[navegador] --(L:8443)--> [bastion] --> [intranet:443]
📝 Casos Prácticos Paso a Paso
Caso Práctico 1: Conectar a una base de datos remota
- Ejecuta el comando:
ssh -L 3306:localhost:3306 usuario@servidor_interno. - Abre tu cliente MySQL y conecta a
localhost:3306. - Verifica que puedes consultar las tablas internas.
Caso Práctico 2: Navegación segura
- Ejecuta el comando:
ssh -D 1080 usuario@servidor_remoto. - Configura el navegador para usar proxy SOCKS
localhost:1080. - Accede a cualquier página y verifica que el tráfico pasa por el túnel.
Caso Práctico 3: Compartir un proyecto web local
- Ejecuta:
ssh -R 8080:localhost:3000 usuario@servidor_publico. - Tu colega accede a
http://servidor_publico:8080. - Verifica que ve la aplicación en tiempo real.
Caso Práctico 4: Acceder a intranet de empresa
- Ejecuta:
ssh -L 8443:intranet:443 usuario@bastion. - Abre el navegador en
https://localhost:8443. - Confirma que puedes acceder a la aplicación interna.
⚠️ Riesgos de Seguridad
- No abrir puertos a toda la red (
0.0.0.0). - Revisar
AllowTcpForwardingyGatewayPortsensshd_config. - Aplicar mínimos privilegios.
📌 Conclusión
El port forwarding con SSH es imprescindible para administradores y desarrolladores. Permite acceso seguro a servicios, navegación cifrada y publicación de aplicaciones internas. Usa estas técnicas con responsabilidad y mantén la configuración segura.
🔗 Links
- Articulo 8 escenarios túneles ssh, rescatado de archive.org, articulo antiguo que rescate de archive.org.
- Como hacer (casi) todo con túneles SSH, una buena referencia.
- Articulo del blog del ElAtareoConLinux, articulo de El Atareao con Linux, blog de referencia imprescindible.