Qué es un túnel SSH y cómo usarlo

Introducción al túnel SSH
Un túnel SSH es una técnica que utiliza el protocolo SSH para crear una conexión cifrada entre dos ordenadores, lo más habitual entre tu ordenador y un servidor VPS a través del cual se puede reenviar el tráfico de red. El túnel SSH, también conocido como reenvío de puertos SSH, permite acceder a servicios que de otro modo no estarían disponibles desde internet, o proteger los datos que viajan por una red insegura. Esta técnica es una herramienta fundamental para administradores de sistemas, desarrolladores y cualquiera que trabaje con servidores remotos.
El principio básico de un túnel SSH es sencillo. En lugar de conectarte directamente a un servicio que puede estar expuesto a riesgos de seguridad, creas un canal SSH cifrado a través del cual reenvías el tráfico. Todos los datos que pasan por el túnel se cifran con cifrado AES, lo que significa que, aunque alguien intercepte el tráfico de red, no podrá leer el contenido de la comunicación. Los túneles SSH son especialmente útiles cuando se trabaja con bases de datos, paneles de administración o servicios internos que no deberían ser accesibles públicamente.
Cómo funciona el protocolo SSH
Autenticación
SSH usa cifrado asimétrico para la autenticación del cliente y del servidor. Cuando te conectas por primera vez a un servidor, el cliente SSH comprueba la huella de la clave del servidor y te pregunta si confías en ella. Tras la confirmación, el cliente almacena la clave en el archivo known_hosts y verifica automáticamente la identidad del servidor en cada conexión posterior. Esto previene los ataques man-in-the-middle, en los que un atacante podría suplantar a tu servidor.
Para la autenticación del usuario, SSH admite contraseñas y claves SSH. Las claves SSH son el método recomendado, porque son más seguras y prácticas. Un par de claves consta de una clave privada que guardas en tu ordenador y una clave pública que colocas en el servidor. La clave privada nunca sale de tu ordenador y puede protegerse adicionalmente con una frase de contraseña. Al conectarte, el servidor usa tu clave pública para verificar que posees la clave privada correspondiente, sin ningún intercambio de datos secretos.
Canal cifrado
Tras una autenticación correcta, SSH establece un canal cifrado mediante cifrado simétrico, normalmente AES-256. Todos los datos que pasan por este canal, incluidos comandos, archivos y tráfico reenviado, están protegidos frente a las escuchas. SSH también usa HMAC para verificar la integridad de los datos, lo que significa que se detecta cualquier modificación de los datos en tránsito. La compresión de datos es opcional, pero puede mejorar el rendimiento en conexiones más lentas.
Túnel SSH local (Local Port Forwarding)
Concepto
Un túnel SSH local reenvía el tráfico desde un puerto de tu ordenador local, a través de la conexión SSH, hacia un puerto de un servidor o red remota. Este es el tipo de túnel más utilizado y sirve para acceder a servicios disponibles únicamente en el servidor remoto o en su red local. El comando para crear un túnel local es ssh -L puerto_local:destino:puerto_destino usuario@servidor.
Por ejemplo, si tienes una base de datos MySQL en un servidor que escucha solo en localhost en el puerto 3306, puedes crear un túnel con ssh -L 3307:localhost:3306 usuario@servidor. Después, en tu ordenador puedes conectarte a localhost:3307 y el tráfico se reenviará a MySQL en el servidor. Usa un puerto local diferente si ya tienes MySQL ejecutándose localmente. El túnel permanece activo mientras la sesión SSH esté abierta.
Ejemplos prácticos
Acceder a un panel de administración que escucha solo en el localhost del servidor es un escenario habitual. Si tienes una aplicación web en el puerto 8080 disponible solo localmente en el servidor, el comando ssh -L 8080:localhost:8080 usuario@servidor te permite abrir http://localhost:8080 en el navegador de tu ordenador. Esto es más seguro que abrir el puerto en el firewall, porque el acceso se limita a las personas con acceso SSH al servidor.
Acceder a un servicio en una red privada detrás del servidor es otro escenario importante. Si el servidor tiene acceso a una red interna donde se encuentra una base de datos en 10.0.0.5:5432, puedes crear un túnel con ssh -L 5432:10.0.0.5:5432 usuario@servidor. Ahora, desde tu ordenador puedes conectarte a localhost:5432 y acceder a la base de datos PostgreSQL en la red privada. Esta es una alternativa segura a una VPN para acceder a servicios concretos.
Túnel SSH remoto (Remote Port Forwarding)
Concepto
Un túnel remoto funciona al contrario que uno local. Reenvía el tráfico desde un puerto del servidor remoto a un puerto de tu ordenador o red local. El comando es ssh -R puerto_remoto:destino:puerto_destino usuario@servidor. Esto es útil cuando quieres hacer que un servicio de tu ordenador local esté disponible en el servidor o externamente. Por ejemplo, si estás desarrollando una aplicación web localmente en el puerto 3000 y quieres mostrársela a un cliente sin desplegarla.
El comando ssh -R 8080:localhost:3000 usuario@servidor hace que tu aplicación local esté disponible en servidor:8080. Para que esto funcione con acceso externo, la opción GatewayPorts debe estar habilitada en sshd_config en el servidor. Los túneles remotos son útiles para el desarrollo, las pruebas y situaciones en las que tu ordenador no tiene una dirección IP pública pero necesitas proporcionar acceso a un servicio en él.
Consideraciones de seguridad
Los túneles remotos requieren atención, porque abren un puerto en el servidor que puede ser accesible desde el exterior. De forma predeterminada, SSH vincula el puerto remoto solo al localhost del servidor, lo que significa que solo es accesible desde el propio servidor. Si habilitas GatewayPorts, el puerto pasa a ser accesible desde cualquier dirección y deberías usar reglas de firewall para restringir el acceso. Nunca dejes un túnel remoto activo más tiempo del necesario y utiliza direcciones IP específicas en lugar de una vinculación con comodín.
Túnel SSH dinámico (proxy SOCKS)
Concepto
Un túnel dinámico crea un servidor proxy SOCKS en tu ordenador local que reenvía todo el tráfico a través de la conexión SSH. A diferencia de un túnel local, que reenvía el tráfico de un puerto concreto, un túnel dinámico puede reenviar el tráfico de cualquier destino. El comando es ssh -D puerto_local usuario@servidor. Por ejemplo, ssh -D 1080 usuario@servidor crea un proxy SOCKS en el puerto 1080.
Tras crear el túnel dinámico, configura tu navegador o sistema operativo para usar el proxy SOCKS en localhost:1080. Todo el tráfico de internet pasa entonces por el túnel SSH cifrado hasta el servidor y sale a internet desde la dirección IP del servidor. Esto es útil para proteger el tráfico en redes WiFi públicas, acceder a contenido con restricciones geográficas o anonimizar la navegación. Firefox tiene soporte integrado para el proxy SOCKS en la configuración de red.
Cuándo usar un túnel dinámico
Las redes WiFi públicas en cafeterías, hoteles y aeropuertos son conocidas por sus riesgos de seguridad. Un túnel SSH dinámico cifra todo tu tráfico de internet, impidiendo las escuchas en la red insegura. A diferencia de los servicios VPN comerciales, en los que debes confiar en el proveedor, un túnel SSH usa tu propio servidor, lo que te da un control completo de la infraestructura. Esto es especialmente importante para trabajar con datos empresariales sensibles fuera de la oficina.
Opciones avanzadas y configuración
Túneles en segundo plano
La opción -f envía SSH a segundo plano tras la autenticación, y -N indica a SSH que no ejecute comandos remotos. La combinación ssh -fN -L 3306:localhost:3306 usuario@servidor crea un túnel en segundo plano sin abrir una sesión interactiva. Para iniciar túneles automáticamente tras reiniciar el sistema, usa la herramienta autossh, que vuelve a establecer el túnel automáticamente si la conexión se interrumpe. Se instala con apt install autossh o yum install autossh.
El archivo de configuración de SSH en ~/.ssh/config permite definir túneles que se crean automáticamente al conectarse a un servidor. Por ejemplo, la línea LocalForward 3306 localhost:3306 en la sección Host de tu servidor establece el túnel automáticamente cada vez que te conectas. Esto elimina la necesidad de recordar un comando largo y reduce la posibilidad de errores. Se pueden definir varios túneles para el mismo host.
Multiplexación de conexiones
La opción ControlMaster de SSH permite compartir una conexión SSH para varias sesiones y túneles. La primera conexión se establece de forma normal y todas las posteriores usan la misma conexión, lo que acelera la conexión y reduce la carga del servidor. La configuración en el archivo de configuración de SSH incluye ControlMaster auto, ControlPath ~/.ssh/sockets/%r@%h-%p y ControlPersist 600 para mantener la conexión 10 minutos tras cerrar la última sesión.
Recomendaciones de seguridad para túneles SSH
Restricción de acceso
En los servidores de producción, restringe qué usuarios pueden crear túneles mediante la opción AllowTcpForwarding en sshd_config. Puedes permitir solo el reenvío local con AllowTcpForwarding local o desactivar los túneles por completo con AllowTcpForwarding no para los usuarios que no los necesiten. La opción PermitOpen restringe a qué destinos puede reenviar el tráfico un túnel; por ejemplo, PermitOpen localhost:3306 permite solo el túnel de MySQL.
Usa fail2ban para proteger el servicio SSH de los ataques de fuerza bruta y restringe el acceso SSH solo a direcciones IP conocidas mediante un firewall. Cambia el puerto SSH predeterminado del 22 a un puerto no estándar, lo que reduce los escaneos automáticos. En los servidores de BeoHosting, el acceso SSH está protegido de forma predeterminada con ajustes de seguridad modernos y nuestro equipo puede ayudarte con la configuración de túneles para las necesidades específicas de tu infraestructura.
Conclusión
Los túneles SSH son una herramienta potente para la comunicación segura que permite acceder a servicios remotos, proteger el tráfico en redes inseguras y crear conexiones seguras entre sistemas. Los túneles locales para acceder a servicios remotos, los túneles remotos para exponer servicios locales y los túneles dinámicos para proxy son los tres tipos básicos que cubren la mayoría de los escenarios. Comprender el túnel SSH es una habilidad esencial para cualquiera que trabaje con servidores. Aprende más sobre los servidores virtuales y la infraestructura de red.
BeoHosting Team
10+ años de experiencia — Especialistas en alojamiento web e infraestructura
- Web Hosting
- WordPress Hosting
- VPS
- Dedicated Serveri
- Domeni
- SSL
- cPanel
- LiteSpeed
- Linux administracija
- DNS
Última actualización: