21 de set. 2009

Tuneles ssh en windows.

Posiblemente muchos de los lectores de este blog han usado alguna vez una de las características más interesantes del SSH que es el tunneling (túneles SSH) desde PC con distintos sistemas operativos (aunque es más habitual usarlos en SO like unix).

1. ¿que demonios es eso del SSH y tunneling?

Empezemos por explicar lo que es cada cosa para los lectores que estaban despistados y no lo conocian.

SSH son las siglas de Secure Shell. Es un protocolo de red que permite el intercambio de datos entre dos ordenadores a traves de un canal de comunicaciones encriptado. SSH normalmente se usa para conectarse a un ordenador remoto y ejecutar comandos en el.

Otra de las características interesantes de SSH es el X forwarding que permite ejecutar un programa gráfico en remoto pero verlo en el ordenador local siempre y cuando este disponga de un servidor X (X11 o Xorg para sistemas like unix o port del mismo como el Xming para sistemas Win32. Esta característica yo personalmente la uso mucho para ejecutar programas con gui en mis servidores linux que no tienen entorno gráfico desde otros pc con linux (no necesito nada al tener ya el servidor X) o windows (iniciando primero el servidor X Xming)

Otra de las caracteríticas interesantes de SSH es el tunneling que es de lo que trata esto. El tunneling lo que hace es encapsular un protocolo de red dentro de otro a traves de un túnel seguro entre el ordenador local y el remoto (por ejemplo, enviar tráfico ftp a traves de tráfico http). Para ello se se hace un mapeado de un puerto remoto a uno local.

2. ¿Para que nos sirve eso del SSH y tunneling?

Ahora os preguntareis para que demonios nos sirve estas cosas tan raras. Pués para muchas cosas, por ejemplo, hacer seguros protocolos que de por si son inseguros (pop, smtp, http, …..), si tenemos un firewall que solo nos permite conexiones http, podremos saltarlo haciendo un túnel y encapsulando otro protocolo dentro de http (es lo que hacen muchas aplicaciones de control remoto de equipos que son capaces de saltarse los firewall corporativos).

Por ejemplo, yo lo uso para poder administrar mis router o la Via Epia que uso 24/365 como server, todo ello via web desde cualquier sitio.

Para ello uso el PuTTY que lo teneis tanto para Win32 como para linux, unix, …..

En este caso configuro que el puerto local 8080 se corresponda al puerto 80 de mi router ADSL y el 8081 local se corresponda al router Linksys WRT54GL.

Desde el Putty hago la conexión contra mi server ssh y a partir de ese momento tengo un túnel seguro desde el ordenador local contra el interfaz web de mis routers. Solo tengo que usar http://localhost:8080 para acceder a la configuración web de mi router adsl y http://localhost:8081 para acceder al interfaz web del WRT54GL.

Como es evidente, para hacer túneles ssh necesitais por un lado poder crear un túnel via Putty, ssh en consola, …., y por otro un servidor ssh. En mi caso la Via Epia que tengo montada como server ya me hace esas funciones. Los que posean un router neutro como el Linksys WRT54GL si usan firmwares alternativos como el Tomato o DD-WRT pueden hacer lo mismo ya que tiene ssh (esto se puede aplicar a cualquier router que tenga ssh).

En el caso de que usemos un SO like unix y tengamos instalado el cliente de ssh solo tendremos que teclear en una consola:

ssh -P – L 8080:tu_ip:80

ssh -P -L 8081:tu_ip:80

También lo podemos hacer desde windows si tenemos el port del cliente de SSH para win32.

Yo personalmente uso este último sistema a traves de scripts que me automatizan la conexión. También uso el putty en ordenadores que no tienen el cliente de ssh instalado. El putty es una de las herramientas que llevo siempre conmigo en un pendrive.

De esta forma puedo administrar determinadas cosas sin necesidad de abrir puertos innecesarios que pueden comprometer la seguridad en el router. Con solo tener el puerto 22 del ssh ya me vale ya que el resto de puertos que necesito para la administración los encapsulo todos a traves de túneles ssh. Evidentemente el puerto de ssh esta bien protegido ya que el usuario root no pueda acceder via ssh via WAN, solo permito a un usuario del sistema autenticarse via WAN (con la debida seguridad en nombre de usuario y contraseña) con solo dos intentos para intoducir correctamente la contraseña y al primer intento de autenticarse de cualquier otro usuario, detecto su IP y automaticamente bloqueo la IP con lo que cualquier reintento de conexión se corta antes de volver a intentar autenticarse.

En mi caso lo uso para administrar los servidores pero tiene muchos más usos. Otro de ellos muy útil es para el acceso al escritorio remoto de windows. Supongo que muchos de vosotros teneis vuestros equipos encendidos y dejais el escritorio remoto con su correspondiente puerto abierto en el router. Eso es muy peligroso ya que cualquiera que se conecte a vuestra ip y detecte el puerto abierto podra aprovechar cualeuier fallo de seguridad de windows para colarse en el equipo. En este caso lo ideal es tener el puerto del escritorio remoto cerrado en el router y cuando necesiteis conectaros,creais un túnel ssh al puerto del escritorio remoto y listo, tendreis acceso a vuestro PC de forma segura sin necesidad de tener puertos abiertos en el router que comprometen la seguridad.

El único requisito que necesitais es tener un servidor SSH en vuestra red que bien puede ser un router que disponga de ssh, un servidor like unix con ssh o si usais windows también podeis instalar el port para win32 de openssh en vuestro PC.

De esta forma podeis crear conexiones seguras contra cualquier aplicación.