Manual de configuración para hacer SSH Tunneling con WinSCP en Windows

Cuando queremos conectarnos a un servidor remoto que solamente está accesible a través de la red local (LAN), una de las técnicas más utilizadas es utilizando un túnel SSH contra un servidor que sí es accesible a través de Internet. Realizando la técnica de SSH Tunneling, o también conocida cómo «túnel SSH», podremos conectarnos en un primer momento al servidor SSH accesible, para posteriormente «saltar» al otro servidor que solamente está accesible a través de la red local. Este túnel SSH también serviría con la finalidad de navegar por Internet de forma segura, si nos conectamos a redes inalámbricas que no son de confianza como las redes WiFi de hoteles, aeropuertos etc.

Imaginemos que tenemos un servidor SSH situado en el propio router o en un servidor de la LAN, en este segundo caso, necesitamos hacer el popular «reenvío de puertos» o «Port forwarding» en el router, porque normalmente estaremos detrás de la NAT en nuestro hogar o en la empresa. Una vez que nos hayamos conectado al servidor SSH del router, o de un servidor con el puerto del SSH abierto (no importa que sea el puerto por defecto, el 22, o cualquier otro, lo importante es que sea accesible a través de Internet), podremos conectarnos al segundo servidor SSH que en un primer momento solamente está accesible a través de la LAN. Esto nos permitirá acceder al servidor SCP o SFTP basado en SSH de forma indirecta.

En el siguiente esquema se puede comprobar cómo estaría instalada esta red que os comentamos:

  • El usuario se intenta conectar al SERVIDOR 2 (IP: 192.168.1.3 y puerto 22 abierto de forma local). Esta conexión no se puede realizar porque no tenemos un puerto abierto hacia este servidor, es decir, únicamente se puede acceder a él vía LAN. Si este servidor 2 tiene un firewall impidiendo cualquier conexión excepto las conexiones de las IP de la red local, también podríamos conectarnos.
  • Usando el SERVIDOR 1 que sí tiene acceso a Internet, y al cual nos podemos conectar vía SSH porque el router tiene un puerto abierto, y el firewall del propio servidor 1 lo permite, estableceremos un túnel SSH para posteriormente conectarnos al SERVIDOR 2 como si estuviera accesible desde Internet. En lugar de hacerlo todo en una conexión, haremos uso de dos conexiones SSH.

Esta arquitectura también podría darse si el router incorpora un servidor SSH, en este caso no necesitaríamos el SERVIDOR 1 como «pasarela», porque el propio router hará de «pasarela» al estar dentro de la red local del mismo servidor 2 al que queremos conectarnos.

winscp_ssh_tunneling_esquema

Para la realización de esta técnica de SSH Tunneling, vamos a utilizar un programa para Windows llamado WinSCP, aunque también podríamos hacer uso del popular Putty para hacer esto mismo, pero de esto ya tenéis un completo tutorial en RedesZone. Un detalle importante, es que Putty dispone de más opciones avanzadas, como, por ejemplo, varios saltos de SSH hasta llegar a nuestro objetivo, WinSCP sólo permite un único salto, pero nos servirá para la gran mayoría de casos donde solamente necesitaremos «pivotar» una única vez y no varias.

Lo primero que tenemos que hacer es descarganos WinSCP desde la página web oficial, este software es completamente gratis y tiene una interfaz gráfica de usuario bastante amigable. Un detalle muy importante, es que el idioma de WinSCP puede ponerse en inglés y también en español. Nosotros lo hemos puesto en español para que veáis lo sencillo que resulta la configuración de un nuevo servidor SSH/SFTP/FTP con el programa, y cómo hacer el SSH Tunneling fácilmente.

Otras características de este programa, es que nos permitirá transferir archivos de forma totalmente gráfica a través de SFTP y SCP, por lo que es una muy buena alternativa a las típicas órdenes de un terminal.

En el menú principal podremos ver todos los perfiles para «Iniciar sesión» que hemos guardado anteriormente, podremos hacer uso de diferentes protocolos como SFTP, SCP, FTP, WebDAV y Amazon S3. Aquí tendremos que introducir la dirección IP (la dirección IP privada del servidor 2 en el esquema) así como el puerto, y también la autenticación con usuario/contraseña o con claves SSH. Para poder realizar SSH Tunneling y conectarnos a un servidor remoto debemos pinchar en «Avanzado…» para tener acceso a opciones adicionales de configuración.

En el apartado «Conexión/Tunel» tendremos que configurar el acceso al servidor SSH alcanzable, es decir, al SERVIDOR 1 en nuestra arquitectura de red. Deberemos introducir la dirección IP pública del servidor remoto así como el puerto, usuario y clave de acceso. WinSCP permite la conexión a través de una clave privada RSA/DSA por lo que también tendremos disponible esta opción.

Nota: Si estamos conectándonos al SERVIDOR 1 y este actúa como puerta de enlace, deberemos introducir una IP privada, la de la propia puerta de enlace.

Una vez que hemos introducido los datos, debemos pinchar en «Aceptar» para usar esta conexión posteriormente.

Una vez que hemos rellenado lo anterior, en el apartado «Sesiones» hacemos doble click al perfil que hemos guardado anteriormente para cargarlo como conexión de primer salto. En la pantalla de sesión introduciremos la dirección IP, puerto y credenciales de acceso al SERVIDOR 2. Al hacer una conexión a través del SERVIDOR 1, podremos poner sin problemas un direccionamiento privado, es decir, podremos poner 192.168.1.3 que corresponde al SERVIDOR 2 dentro de la red local a la que hemos accedido.

Una vez rellenado todo pinchamos en «Conectar» y nos conectaremos al SERVIDOR 2 a través de la conexión SSH del SERVIDOR 1. En la siguiente captura de pantalla del log de conexión se puede comprobar los siguientes aspectos:

  • Abrimos el túnel y nos autenticamos correctamente en el servidor SSH del SERVIDOR 1.
  • Una vez establecido el túnel al SERVIDOR 1, nos conectamos con el SERVIIDOR 2, que en el caso del ejemplo tiene dirección IP privada 10.10.2.14 pero que podría ser la 192.168.1.3 del SERVIDOR 2 perfectamente. Como véis, hemos usado una IP privada ya que una vez creado el túnel es como si estuviéramos en la propia red local.

winscp_ssh_tunneling_windows_4

Hasta aquí hemos llegado con nuestro manual de cómo hacer un SSH Tunneling con WinSCP para acceder a servidores remotos que no estarían accesibles a través de Internet, pero que sí lo están a través de la propia red local. Esta técnica es ampliamente utilizada porque nos permitirá «pivotar» en un servidor de administración que esté fuertemente protegido, y posteriormente conectarnos a servidores internos de la organización de forma fácil y rápida, esto es comúnmente utilizado en empresas para proteger toda la infraestructura interna, siempre vigilando que el servidor que está expuesto incorpore todo lo necesario para tener la máxima seguridad como firewall, IDS/IPS, un completo sistema de logging para ver y detectar cualquier evento relacionado con la seguridad, etc.