Este pretende ser un pequeño artículo para detallar una práctica que hace tiempo que no utilizaba y que ahora se ha convertido de nuevo en una necesidad.

El ssh tunneling es muy útil para todos aquellos que, como yo, se vean obligados a conectar su equipo en una red desconocida y que por tanto puede estar llena de threats o amenazas.
La imagen anterior (que aparte de graciosa resulta bastante descriptiva) pretende simular el típico escenario en el que el usuario llega a una red desconocida (wifi o cableada). El usuario cuando llega se conecta logeándose en todos sus "servicios 2.0" ya sea facebook, twitter, e-mail o blogs de diversa índole. ¿Qué tiene de malo? (Dirá alguno). Pues en principio nada, salvo que en esa red haya alguien al que se le dé por curiosear el tráfico ya sea por motivos "educacionales" o no. En este caso es bastante probable que el sujeto pueda capturar nuestras credenciales o quizás pueda visualizar nuestras conversaciones, saber si apostamos o si nos gusta el porno (algo que en internet nunca se ha visto, un usuario viendo porno, PARDIEZ!). También es posible que en la red en la que nos encontramos tenga algún tipo de proxy que nos impida lanzar determinado tipo de servicios porque utilizan algún puerto prohibido por las políticas de seguridad de la red.
Para evitar todo este tipo de situaciones podemos emplear nuestro querido ssh que nos puede servir además de para administrar equipos remotos de forma segura para poder hacer un TÚNEL SSH.
¿Qué es un tunel ssh?
Básicamente es nuestro reducto de felicidad :-). Es una conexión segura, es decir cifrada, que nosotros establecemos con un host conocido y que aunque un tercero intercepte no entenderá nada de lo que allí hemos puesto.
¿Qué necesitamos para todo esto?
Pues bien primero una máquina conectada a internet (corriendo un demonio de ssh) en la cual tengamos una cuenta y podamos acceder mediante ssh por ejemplo imaginemos que tenemos una cuenta en un host ficticio como puede ser tes.inestable.org lo que haríamos para leer nuestro correo sin que capturasen nuestras credenciales en la red hostil sería por ejemplo:
ssh -f diego@test.inestable.org -L 2525:test.inestable.org:25 -N
-f sirve para poner la conexión establecida mediante ssh en background
-L se utiliza para forwardear el puerto 2525 de nuestra máquina test.inestable.org al puerto 25 de la misma.
-N le dice a ssh que no ejecute ningún comando, que sólo deje la conexión establecida (nuestro túnel).
Una vez hecho esto solo tendría que apuntar a mi cliente de correo favorito a test.inestable.org:2525 y logearme en el sitema de correo como habitualmente.
Del mismo modo podríamos hacer con diversos servicios pero el que he encontrado más útil para mí ha sido la redirección usando http, es decir utilizar la redirección ssh como un proxy SOCKS:
ssh -fDN localhost:8080 diego@test.inestable.org
En este caso empleamos la opción -D que funciona como un forward dinámico a nivel de aplicación, es decir ssh se encargará automáticamente de decidir que puertos se han de forwardear a nuestro 8080 local y conectarnos con la página que queramos visitar (por ejemplo).
Una vez hecho esto no tendríamos más que configurar en nuestro navegador favorito un proxy SOCKS (habitualmente en las opciones avanzadas) que se conecte a localhost:8080 y a correr.
Considero que es una práctica _ALTAMENTE_ recomendable ya que es una forma de tener un proxy seguro de forma escalable amén de un firewall bypass, que en algunas ocasiones va de lujo };-)