Túnel SSH

Hoy vamos a hablar de lo que es un túnel SSH, una funcionalidad muy interesante, la cual antes era muy trending y creo conviene recordar. Comenzaremos explicando qué es, para posteriormente usar nuestra raspberry de cabecera para probar tanto en linux como en windows su uso. Adelante!

¿Qué es un túnel SSH?

Un túnel SSH es una conexión que se establece desde un cliente a un servidor SSH con la intención posterior de hacer pasar el tráfico de otra aplicación, por ejemplo un navegador web, a través de esta conexión como si de un proxy se tratase.

La idea básicamente sería aprovechar la conexión segura SSH para, a través de ésta, securizar otra conexión que no es segura por defecto.

El ejemplo más habitual sería conectarnos a un WiFi público, donde conviven diversos dispositivos de origen desconocido. En este caso si hiciéramos uso de nuestro navegador web, podríamos sufrir algún tipo de ataque por parte de otro usuario que esté conectado a la misma red (Man in the middle, sniffers, arp spoofing, …). Para mitigar este riesgo, podríamos establecer un túnel ssh desde nuestro cliente hasta un servidor ssh que esté fuera de esta red. Haciendo uso de este túnel podríamos conectarnos con nuestro navegador y hacer uso de él con la seguridad de disfrutar de tráfico cifrado por el protocolo SSH.

Ventajas de un túnel SSH

  • Navegaríamos en su caso con una conexión cifrada, por lo que se garantiza la confidencialidad y la integridad de nuestros datos.
  • Dado que el tráfico va cifrado, es posible saltarnos restricciones de ISPs, firewalls y proxies ya que estos servicios desconocerán qué estamos haciendo.
  • Es muy fácil de disponer de un servidor SSH ya que cualquier distribución linux dispone de servidor SSH y no necesitamos tanta configuración como por ejemplo para instalar un VPN.

Desventajas de un túnel SSH

  • Necesitaremos configurar uno a uno cada uno de los servicios que queramos hacer pasar a través del túnel.

Crear túnel SSH

Ahora toca la parte práctica, y para ello vamos a utilizar nuestra raspberry como servidor SSH, y nuestra máquina local, como cliente. Adelante!

Túnel SSH desde Linux

Para empezar, en nuestra máquina cliente debemos de asegurarnos de tener SSH instalado y tendremos que configurar el fichero de configuración /etc/ssh/sshd_config.

GatewayPorts yes

Este parámetro por defecto viene comentado, por lo que lo más probable es que tengas que modificarlo tal y como se muestra arriba.

Para crear un túnel dinámico en linux simplemente desde la consola ejecutaremos el siguiente comando:

ssh -D <puerto local> <usuario_ssh_remoto>@<ip_host_remoto>

Tras ejecutar este comando, se nos brindará acceso a la shell remota, pero también habremos establecido el túnel, por lo que sólo falta configurar nuestro navegador web para hacer uso de túnel.

Para configurar Firefox nos dirigiremos a la configuración de red, y seleccionamos proxy manual, estableciendo como host Socks localhost y como puerto el puerto local utilizado al crear el túnel con el comando anterior.

Esta configuración es similar en todos los navegadores por lo que no tendrás problemas para replicarlo en Chrome, Opera o cualquier otro.

Configuración de proxy para usar el tunel SSH creado

Túnel SSH desde Windows

Para realizar desde Windows esta operación, haremos uso de la súper conocida herramienta Putty.

Una vez iniciada la aplicación, nos dirigiremos a través del árbol a Connection -> SSH -> Tunnels.

Captura de la aplicación putty
Sección Tunnels en el cliente SSH Putty

En Source port, pondremos el puerto local desde el cual redirigiremos el tráfico, en nuestro caso el 1080. Luego seleccionaremos en las opciones de abajo Dynamic y Auto. Finalmente pulsamos Add.

Ahora, dentro del árbol vamos a Session, introducimos la IP o el host y un nombre en Saved Sessions y pulsamos Save.

Ahora ya puedes hacer doble clic sobre la sesión guardada para establecer el tunnel. Una vez realizada la conexión, puedes configurar tu navegador como vimos en el punto anterior para navegar a través del túnel.

Captura de la aplicación putty
Sección Session donde escribiremos nuestro host y pulsaremos Save para guardarlo.

Túnel SSH en Android

Android, como sistema basado en linux que es, permite este tipo de conexiones. Tradicionalmente había sido necesario disponer de un dispositivo rooteado para realizar esta operación, de hecho muchas aplicaciones aún advierten de esto.

No obstante han ido surgiendo aplicaciones como Ki4a, que permiten su uso sin este requisito del cual no todo el mundo disfruta.

El uso de estas aplicaciones es bastante más cómodo, y se basa en lo mismo que hemos estado viendo, simplemente necesitarás los parámetros del servidor SSH remoto para hacerlo funcionar.

Conclusiones

Hemos visto lo fácil que es crear un túnel SSH y conectarnos con un navegador web a través de él. Podemos hacer lo mismo con cualquier aplicación que nos permita realizar la configuración de proxy como hemos explicado en el caso del navegador.

Espero que este artículo os haya servidor de ayuda y para cualquier comentario o sugerencia me tenéis en twitter y en mi correo electrónico. Un saludo!