martes, 10 de abril de 2007

Túneles SSH Inversos

La herramienta SSH (Secure Shell) permite acceder, de forma segura, a una consola remota. Lo mas común es acceder desde un equipo a la consola de otro equipo remoto y, de forma adicional, se puede utilizar la conexión segura para establecer túneles que permitan realizar otro tipo de conexiones.

Por ejemplo podemos realizar conexiones RDP seguras a través de un túnel que redirija un puerto local al puerto RDP remoto de un equipo. La seguridad de las conexiones dependerá realmente del grado de encriptación de nuestros túneles, que viene determinado por el tipo de llave y la encriptación utilizada en las conexiones ssh. Es decir, debemos utilizar llaves de un grado alto de seguridad, como las DSA, para garantizar que las comunicaciones de los túneles, están bien protegidas.

Para realizar un túnel ssh necesitaremos que la conexión a ese sitio esté permitida, si existen firewalls intermedios, es posible que el equipo no sea accesible y los intentos de conexión quedaran bloqueados, aunque las conexiones ssh estén permitidas, si bloquean conexiones a otros puertos como el RDP, no podremos establecer túneles hacia esos puertos.

Existe, no obstante, una posible solución a este tipo de bloqueos, que no exigen que el administrador del firewall nos permita la entrada. La solución se basa en el hecho de que aunque los firewall suelen limitar las conexiones, solo lo hacen para los “ataques”, es decir para los accesos entrantes desde un sitio no fiable como “Internet” a una red local. No es común que un firewall impida las conexiones salientes desde la red local al exterior. Utilizaremos esto para establecer lo que se denomina túneles inversos, aceptados por la mayoría de los firewall y que nos permitirán, en general, acceder de forma remota al equipo mientras existan el túnel y la conexión ssh.

Un ejemplo de esto: tenemos dos equipos que llamaremos pchogar y pctrabajo. Queremos acceder a pctrabajo (con conexiones al puerto 22), pero existe un firewall que impide las conexiones a este puerto y por lo tanto nos impide realizar una conexión ssh directa.

Sin embargo pctrabajo si cuenta con un acceso a Internet y el firewall si le permite conectarse al exterior. Situados en el ejecutamos desde la terminal:

-------------------------------------------------

$ssh pchogar –R 2222:localhost:22

-------------------------------------------------

Debemos sustituir pchogar por su correspondiente dirección IP, salvo que el equipo conozca el host con ese nombre. Esa ejecución realizara una conexión al contrario de lo que queremos, es decir, desde pctrabajo a pchogar pero, al hacerla, establecerá un túnel “inverso” que permitirá que al conectarse al puerto 2222 del equipo pchogar nos redirija automáticamente al puerto 22 del equipo en el que realizamos la ejecución.

De ese modo y mientras la conexión ssh siga en funcionamiento, podremos conectarnos al puerto 22 del equipo pctrabajo accediendo en realidad al puerto 2222 del equipo pchogar. Será nuestra responsabilidad entonces garantizar que nadie pueda conectarse al puerto 2222 de pchogar de forma indebida, ya que le estaríamos dando acceso a pctrabajo en realidad.

Pero ¿Que pasará si el túnel se cae, es decir, si se cierra la conexión ssh?

Pues perderemos la posibilidad de acceder de forma remota al equipo, es muy recomendable contar con herramientas como “autossh” para garantizar que la conexión y por lo tanto el túnel ssh inverso permanecen levantados.

Nota: aunque es posible configurar este tipo de túneles sin necesidad de realizar modificaciones en el firewall intermedio, es muy aconsejable contar con la autorización del responsable de seguridad, ya que es posible que prefiera darnos acceso directo al equipo en el lugar de permitirnos hacer el túnel.

No hay comentarios: