7 de Septiembre, 2006

Encapsulando tráfico con SSH y SOCKS

Ya hemos comentado por aquí que es interesante emplear un túnel con ssh(1) cuando estemos usando la conexión a Internet que un buen samaritano comparte gracias a un enrutador o punto de acceso wireless mal configurado.

La opción más sólida para hacer esto, en mi opinión, es mediante túneles SSH a un proxy SQUID. Hablamos de un proxy como SQUID, muy especializado y eficiente, con diversos cachés (navegación y peticiones DNS), soporte para HTTP, FTP, SSL, y conexiones arbitrarias a otros puertos.

Pero require de una configuración especial (tenemos que tener un SQUID disponible y accesible desde el servicio de sshd), así puede ser más sencillo hacer un túnel al puerto con el que queremos trabajar, o simplemente usar una característica de ssh poco conocida ;).

Por ejemplo, yo puedo hacer un túnel a este servidor web de la siguiente forma:

$ ssh -L 8080:192.168.50:80 -N usuario@IP_EN_INTERNET

Hay mucha información sobre cómo hacer estos túneles. En el ejemplo vamos a conectar el puerto 8080 en localhost (127.0.0.1) con 192.168.0.50 (la IP dentro de la red local de este servidor web, accesible desde el servicio sshd), en el puerto 80 (servicio HTTP, osea: web). Además indico el usuario en la dirección accesible por Internet y que no voy a usar una terminal interactiva (-N).

De esta forma podemos indicar un túnel por cada puerto (usando varias veces -L), que corresponderá con un servicio concreto.

¿Qué pasa si queremos navegación casual en lugar de acceder a un servidor concreto? Pues que resulta muy incómodo ir haciendo un túnel para cada web, así que empleamos la opción -D puerto de ssh para que realice túneles dinámicos a nivel de aplicación (traducción libre). En realidad lo que hace es implementar un proxy SOCKS (versión 4 y 5, permitiendo esta segunda aceptar conexiones entrantes).

Hace mucho tiempo, cuando empezaba con esto del Software Libre, un servidor SOCKS fue mi primera solución para compartir Internet en casa entre varias máquinas, hasta que un profesor de la universidad me descubrió amablemente (y extraoficialmente) las bondades de ipchains, que por aquel entonces era bastante novedoso :P.

El principal problema que plantea el protocolo SOCKS es que es necesario que esté soportado por las aplicaciones cliente, y hace años esto no era habitual. El principal promotor del proxy proporcionaba aplicaciones sockificadas (bonito palabro), pero no era tan útil como usar aquello que llamaban NAT.

En la actualidad tenemos muchas aplicaciones que lo soportan, siendo nuestra estrella Firefox, que quizás en este aspecto siga los pasos de su ancestro Netscape, que tenía un excelente soporte para SOCKS :D.

Así que el funcionamiento es sencillo:

$ ssh -D 8081 -N usuario@IP_EN_INTERNET

Notar que si sabemos nuestra IP en Internet, no necesitaremos configurar un DNS, ya que las resoluciones las hará el proxy, como pasaría con SQUID (quedando, en efecto, nuestra navegación completamente privada: solo se verá una conexión a nuestro sshd).

Y ya podemos configurar nuestro cliente con soporte SOCKS para que trabaje con el nuevo servidor en 127.0.0.1 en el puerto 8081. Así de sencillo :).

Desde luego ssh no está tan especializado como SQUID para hacer de proxy, y si esto lo sumamos a que el tráfico se cifra al pasar por el túnel, el rendimiento no es muy bueno :(. Pese a todo, tenemos algunas ventajas de SQUID: no hace falta DNS, podemos acceder a diferentes servicios, solo necesitamos un túnel y, lo más importante, respetamos nuestra privacidad y la del usuario que amablemente comparte su conexión a Internet ;).

Esta anotación me la ha inspirado una entrada del blog de Dmitri Alenitchev, que ha ayudado a recuperar la opción -D del frío y recóndito lugar que ocupaba en mi cada vez más maltrecha memoria.

Anotación por Juan J. Martínez, clasificada en: wireless, security.

Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.

Algunas anotaciones relacionadas: