Tuneles con SSH

Tuneles con SSH

Qué es un tunel?

Un tunel es, segun la Real Academia de la Lengua Española:

1. m. Paso subterráneo abierto artificialmente para establecer una comunicación.

En el caso de las comunicaciones es algo parecido. Consiste en generar un canal de comunicación que nos permita tener acceso a algún destino utilizando, generalmente, a otro host en la red que si tiene acceso.

Para esto, SSH es bastante util, podemos utilizar un host con ssh que tenga acceso a internet por ejemplo, para acceder de nuestra modesta y restringida estación de trabajo que se encuentra detrás de un firewall.

Escenario 1

En este caso, la estación de trabajo A necesita acceder a un sitio web que se encuentra en el host C en el puerto 89/tpc en Internet y que no es poisible acceder. El host B si tiene acceso a C. Afortunadamente la estación A tiene acceso mediante SSH a B. En este caso se realiza una conexión desde A hacia B indicando que se desea redireccionar las conexiones en hostC:89 hacia algún puerto en B en la interfaz local (loopback, 127.0.0.1, lo, lo0, etc).

Manos a la obra.

Vamos a probar con ssh corriendo en algún UNIX, Linux, etc con ssh habilitado:

ssh -L 1979:host-c:89 usuario@host-b
usuario@host-b's password:
Last login: Sat Dic 11 17:41:27 2005 from host-a
[usuario@host-b]$

Con el comando anterior, A se conecta a B indicandole que todas las conexiones que se hagan en A al puerto 1979 de la interfaz local, sean redireccionadas hacia el host C en el puerto 89. Todo esto, a traves del host-b que puede acceder a ambas maquinas.

El tramo entre A y B queda encriptado, pues es información que viaja a traves de la conexión SSH, no asi el tramo entre B y C que es una conexión normal TCP.

Para probar si está funcionando, podemos usar telnet:

telnet localhost 1979
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
Escape character is '^]'.

Cabe mencionar que en caso de que el sitio web en el puerto 89 sea un vhost basado en nombres hay que asegurarse de que la cabecera Host que el browser envía al sitio tenga el valor correcto, es decir el nombre dns del sitio al que se quiere acceder. Supongamos que el sitio en C se llama inalcanzable.com.br, para esto hay que hacer creer a A que ese nombre corresponde a la IP de la interfaz local (127.0.0.1) editando el archivo hosts correspondiente según el sistema operativo que estemos utilizando.

Es como cavar un tunel desde la "sala" A hasta la sala B que es quien tiene ventana al exterior.

Se puede hacer en Windows?

Si, para eso se puede utilizar PuTTY.

Encerrado. Sin salida.

En la actualidad, gran parte de las compañías (por no decir todas) no permiten el acceso directo a ningun usuario por ningun puerto. Pero, en la mayoria de los casos se cuenta con un servidor Proxy que permite navegar por http. Es dificil encontrar una compañia que no tenga un proxy con SSL habilitado para sus usuarios.
Esto implica que hay salida por el puerto 443.

Entonces, es posible conectarse por ssh a algun servidor utilizando alguna heramienta que posibilite encapsular el trafico ssh por una conexion SSL. Para esto, podemos utilizar Corkscrew.

En la próxima entrega realizaremos pruebas con esta herramienta.

About patux