Ir al contenido principal

Redireccionamiento de puertos: Crear un túnel SSH

Hoy quiero dejarles una técnica muy interesante y útil que quería compartir hace mucho tiempo, se trata de la creación de un túnel de flujo de tráfico utilizando SSH. Este nos permite conectarnos a otro equipo y redirigir el flujo de un puerto remoto a uno local por medio de una simple sesión SSH.


Que es el tunneling? (resúmen de wikipedia)

Se conoce como túnel o tunneling a la técnica que consiste en encapsular un protocolo de red sobre otro (protocolo de red encapsulador) creando un túnel de información dentro de una red de computadoras.

El protocolo SSH (secure shell) se utiliza con frecuencia para tunelizar tráfico confidencial sobre Internet de una manera segura. Por ejemplo, para conectar con un servidor web de forma segura, utilizando SSH, haríamos que el cliente web, en vez de conectarse al servidor directamente, se conecte a un cliente SSH. El cliente SSH se conectaría con el servidor tunelizado, el cual a su vez se conectaría con el servidor web final. Lo atractivo de este sistema es que hemos añadido una capa de cifrado sin necesidad de alterar ni el cliente ni el servidor web.

La técnica de tunelizar puede ser usada también para evitar o circunvalar un cortafuegos. Para ello, se encapsula el protocolo bloqueado en el cortafuegos dentro de otro permitido, habitualmente HTTP.

En simples palabras, una tunelización como tal nos permite utilizar un protocolo (ssh en este caso) como una especie de proxy entre dos nodos, de este modo el nodo A se comunica con el nodo B por medio de SSH. 

De esta forma si quisiéramos acceder desde una red externa por medio del puerto 80 al servidor web filtrado por un firewall no podríamos, pero si disponemos de una sesión remota escuchando por el puerto 22, podemos crear un túnel y redirigir el puerto 80 a otro que elijamos (8080) así "abriendo un puerto" y accediendo al componente de la red interna protegida, lo que nos permite resguardar de una forma segura el servidor o bien crear alguna especie de bypass. (Todo pasando por el puerto SSH).


Como crear un túnel

Para iniciar un Túnel SSH local, vamos a precisar iniciar una sesión de la siguiente manera:

ssh -L <puerto_local>:<host_interno>:<puerto_remoto> <host_remoto> -l <usuario> -N

-L : Redirige un puerto remoto a uno local (port forward).

host_remoto : El servidor ssh remoto.

-l : El usuario con el que vamos a iniciar sesión.

-N : Anula la ejecución de algún comando remotos

 
Ejemplo de uso:

ssh -L 13389:127.0.0.1:3389 34.212.56.34 -l windows8 -N

Nos conectamos al host remoto 34.212.56.34 con el usuario windows8, tomamos tu localhost y redirigimos el puerto 3389 (Remote Desktop Protocol) al puerto 13389 ahora localmente a nuestra disposición.

Equipo Local<----localhost:13389<---ssh--->34.212.56.34:3389 <---Equipo Remoto


Ejemplo prático

En una Red LAN tengo un servidor kiwix que sirve la wikipedia offline por el puerto 8181, este mismo está filtrado por un firewall, nadie, nisiquiera de la red local puede acceder a el.

Por otra parte tengo un equipo  Linux con un cliente SSH.

Si desde otro equipo quisiéramos conectarnos al servidor no podemos. Sondeando el host remoto podemos observar que cuenta con el puerto 8181 filtrado y el 22(ssh) abierto.

Creamos el túnel, del host remoto, redirigimos el puerto 8181 al 8282 en el host local.

Chequeamos el puerto 8181 ahora abierto.


Ahora podemos acceder al servidor web remoto


Este ejemplo es en una red local pero se aplica también a través de Internet.


Y esto es todo! Es una utilidad muy interesante y que vale la pena conocer. Saludos!! :-)