Cómo redirigir puertos localmente con SSH

Uno de los muchos usos que tiene SSH es el de redirigir puertos, una característica que te permite crear un túnel entre tu cliente SSH y el servidor al que te estés conectando, para que el tráfico que entre por uno de los extremos se reenvíe desde el otro, y a la vez el tráfico que reciba tu servidor te lo traiga a ti.

Entre los usos que tiene esto: podrías usar tu servidor como intermediario al hacer una conexión de red. Imagina que hay otro servidor en internet que tiene un firewall configurado para que sólo se pueda entrar desde la IP de tu servidor (o incluso, imagina que tienes un servicio en tu servidor que sólo se puede acceder desde localhost). Aunque localmente desde tu ordenador no vas a poder conectarte a él, si montas una redirección de puertos al conectarte a tu servidor, podrías usarlo de intermediario y entonces conectarte a ese servicio.

Cómo montar un port forwarding local

Te pongo un ejemplo. Si me conecto a mi servidor del siguiente modo:

ssh -L 4500:servidor2.example.com:8400 admin@servidor1.example.com

Estoy estableciendo una conexión SSH con servidor1.example.com. Sin embargo, también estoy levantando una redirección de puerto local. SSH se pondrá a escuchar en el puerto 4500 de mi máquina. Si me trato de conectar a él (por ejemplo, visitando http://localhost:4500 en mi navegador web), todo el tráfico que le envíe a ese puerto será reenviado a mi servidor como si fuese un proxy. En mi servidor, ese tráfico desviado será reenviado a servidor2.example.com:8400. Esta es una conexión separada e independiente; de hecho, el servidor2 verá que el tráfico le viene de servidor1, no de mi ordenador. En la otra dirección, lo que sea que servidor2.example.com:8400 le responda a mi servidor, mi servidor me lo mandará a mí, y será la respuesta que yo vea desde el puerto 4500.

Un ejemplo muy habitual que mencionaba antes es conectarte a un panel de control que tengas en tu servidor pero que esté solamente accesible desde 127.0.0.1, para que no puedan acceder desconocidos a él. Si te conectas a tu servidor como:

ssh -L 3000:localhost:3000 admin@servidor.example.com

Lo que ocurrirá es que a partir de ese momento, si en tu navegador web visitas http://localhost:3000, esa petición será enviada a tu servidor, desde donde volverá a ser lanzada, en este caso, a localhost:3000 también, por lo que si en tu servidor tienes algo escuchando en el puerto 3000, aunque tenga un bind a 127.0.0.1 (que, de hecho, sería el caso de uso ideal, para no tener que exponerlo a la internet abierta), tu petición será atendida por ese servicio porque se pensará que le está hablando el propio servidor y que es una conexión local. Lo que sea que te diga, te volverá a tu máquina para que lo puedas ver.

Ventajas y usos

Una de las ventajas de usar túneles SSH es que el tráfico entre tu ordenador y tu servidor SSH va cifrado porque así es como funciona el protocolo SSH. Si por lo que sea estás en una ubicación de red poco confiable, derivar el tráfico a través de un túnel de este estilo en vez de conectarte directamente al recurso puede ser un alivio que no alcanza el nivel de una VPN pero que proporciona cierto nivel de seguridad.

Además, como ya has visto, te permite tener servicios internos en localhost que puedes usar para mantenimiento, y que requieran una conexión activa mediante SSH para verificar la identidad.

Autor: Dani

Toqué GNU/Linux por primera vez hace 15 años y ahora trato de contar lo que puedo sobre él. Soy el editor principal de nosgustalinux.es y de su canal de YouTube.

Un comentario en “Cómo redirigir puertos localmente con SSH

Comentarios cerrados.

To respond on your own website, enter the URL of your response which should contain a link to this post's permalink URL. Your response will then appear (possibly after moderation) on this page. Want to update or remove your response? Update or delete your post and re-enter your post's URL again. (Find out more about Webmentions.)