Que es y para que sirve un tunel SSH?

Recientemente he descubierto una herramienta muy útil: los túneles SSH. No sólo son prácticos para navegar de forma privada y segura sino que también nos pueden permitir llegar a servidores o servicios a los que no tenemos acceso desde el ordenador en el que nos estamos conectando.

Primero os explicaré cómo funciona y posteriormente la implementación que he hecho en mi caso particular.

Como funciona?

Podríamos resumirlo diciendo, que un túnel SSH nos permite comunicarnos desde un ordenador A a un ordenador C (por ejemplo un servidor web) como si nos estubieramos conectando desde un ordenador B (servidor intermedio). Otra manera de decirlo sería explicando que B suplanta a A desde el punto de vista de C.

Seguramente la mejor manera de verlo es mediante imágenes. La manera habitual de conectarse a una web sigue un esquema como este:

Pero este tipo de conexión presenta problemas de seguridad si nos estamos conectando desde una red pública (aeropuerto, cafetería, biblioteca …) ya que nuestras comunicaciones pueden ser espiadas, inclusive antes de llegar a Internet, por usuarios conectados a la misma red que nosotros.

Una forma de evitarlo es que el ordenador que se encarga de comunicarse con la web esté fuera de la red publica de manera que nuestros datos corran menos peligro, pero como es obvio, necesitaremos que la comunicación entre nuestro ordenador (A) y el servidor intermedio (B) sea segura. Una manera de hacerlo es iniciando la comunicación entre estos dos ordenadores por SSH, que es un protocolo cifrado.

El esquema de comunicación propuesto vendría a ser similar a este (obviamente el servidor SSH no tendrá conexión directa con el servidor web, sino que pasará por Internet, pero espero que se entienda).

De esta manera nuestro ordenador contará con una conexión segura hasta la web (C) y además es posible que nos podamos saltar alguna que otra medida de seguridad configurada en firewall / proxy de la red publica en la que estamos conectados, ya que el disponer de una conexión cifrada entre nuestro equipo y el servidor intermedio, no se puede saber que se está comunicando por el “tunel” y obviamente no pueden actuar sobre la comunicación que tiene el servidor SHH (B) con el de la web, ya que está fuera de su red.

Como os decía anteriormente esta arquitectura también puede ser muy útil en caso de que tengamos que acceder de forma remota a un servidor al que no tenemos permisos desde el ordenador en el que estamos. Por ejemplo, estamos de “vacaciones” y tenemos que re-iniciar un servidor de base de datos de la empresa al que sólo se puede acceder desde dentro de la red empresarial. Aunque el mejor sistema de hacerlo sería conectándose a la VPN empresarial, el sistema propuesto sería una alternativa si la empresa dispones de un servidor con acceso a Internet al que pudiéramos abrir un túnel SSH, para así conseguir conectar -nos el servidor de base de datos como si lo estuvieras haciendo desde la red empresarial.

Implementación

En el apartado anterior se explica la teoría para que entendáis el concepto y seáis capaces de implementarlo de manera que le resulte útil en su caso.

De todos modos, a modo de ejemplo explicaré como lo he implementado yo que trabajo con clientes Windows.

Como comentaba anteriormente es necesario un ordenador fuera de la red que haga de puente entre el ordenador en el que estas y al que se quiere llegar (típicamente un servidor web). Dado que este proceso tiene una afectación prácticamente nula sobre cualquier ordenador actual, uso una instancia micro de Google Cloud que tengo contratada. Para ello, sólo tenéis que aseguraros que tiene abierto el puerto que utilizará (por defecto el 22) y el servicio de SSH encendido para, posteriormente conectarse al servidor (en mi caso, uso el cliente PuTTy)

Tendreis que tener una configuración especifica tanto en el Putty como en los programas que deseis que utilicen la conexión SSH.

Vuestro cliente SSH debereis configurarlo de manera que redireccioneis los puertos de vuestro ordenador a los del servidor. Esto en el caso del Putty podeis hacerlo así (Connection-> SHH-> Tunnels)

En este caso no es particularmente interesante saber contra qué puerto del servidor se hace el “mapping” del puerto del ordenador cliente, pero como se puede observar se podría llegar a configurar.

Después sólo tendréis que conectaros normalmente al servidor por SSH

Todavía nos queda configurar el programa que querais usar de forma privada para que se piense que estamos detrás de un proxy y que debe utilizar un puerto concreto (el mismo puerto que hemos configurado en el cliente SSH). En el caso de Firefox (Opciones-> General-> Ajustes de red)

A partir de ese momento siempre que hayamos abierto sesión SSH en el servidor mediante el Putty, las comunicaciones entre nuestro dispositivo y el resto de Internet se hará pasar a través del servidor que hemos configurado y como la comunicación entre los dos está encriptada podemos decir que es segura.

Limitaciones

La única pega que tiene este sistema es que el firewall de la red donde estamos conectados debe permitir la conexión al puerto que utilizamos para establecer la conexión (en el caso del ejemplo, el puerto 22). No es habitual que las redes públicas o de lugares de paso tengan habilitado este puerto, por lo tanto lo ideal sería que en vez de abrir el puerto 22 en el servidor, utilicéis uno que difícilmente pueda ser cerrado por una red pública, como por ejemplo el puerto 80 (http) o el 443 (https).

Es probable que nuestro servidor tenga estos puerto utilizados para otro servicio (un servidor web por ejemplo). En otro post explicaré cómo usar un mismo puerto por diferentes servicios de manera que nos podamos saltar esta limitación.

Font : https://geekland.eu/que-es-y-para-que-sirve-un-tunel-ssh/

Leave a comment

Your email address will not be published. Required fields are marked *