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.
Al SSH Tunneling también se le conoce como SSH port forwarding. Se trata de una técnica para crear redirecciones de tráfico de una forma segura. Este túnel, siempre se crea entre el servidor SSH y un cliente SSH, cifrando el tráfico que pasa por él. Ayudando así a proteger la información.
Qué es SSH Tunneling
La técnica de SSH Tunneling, también conocida como Túnel SSH, es un método que utiliza el protocolo SSH para crear un túnel seguro a través de una red pública, como Internet. Este túnel permite la transferencia segura de datos entre un cliente y un servidor, protegiendo la información de posibles amenazas.
El SSH Tunneling encapsula los datos en un flujo seguro, que se transfiere a través de la conexión SSH entre el cliente y el servidor. Esto se consigue utilizando el cifrado y la autenticación proporcionados por SSH para proteger los datos durante la transferencia.
Hay varias formas de utilizar SSH Tunneling, cada una con aplicaciones específicas como WinSCP, por ejemplo:
- Tunneling de puerto local: En esta configuración, un puerto en el sistema local del cliente se redirige a un puerto en el servidor remoto a través del túnel SSH. Esto permite al cliente acceder a servicios o recursos en el servidor remoto como si estuvieran disponibles de manera local.
- Tunneling de puerto remoto: En esta configuración, un puerto en el sistema remoto del servidor se redirige a un puerto en el cliente a través del túnel SSH. Esto permite que el servidor acceda a servicios o recursos en el cliente como si estuvieran disponibles localmente en el servidor.
- Tunneling dinámico: En esta configuración, se crea un túnel dinámico que actúa como un proxy en el sistema local del cliente. Todo el tráfico de red generado por el cliente se enruta a través del túnel SSH y sale en el servidor remoto. Esto permite al cliente navegar por Internet de forma segura y anónima, ocultando su dirección IP real y protegiendo su privacidad.
Desventajas de SSH Tunneling
Pese a que es una técnica poderosa y ampliamente utilizada para proteger y redirigir el tráfico de red mediante un canal cifrado, también tiene sus inconvenientes, y es bueno conocerlos antes de poner en práctica todo lo que vamos a ver hoy:
- Configuración compleja: Esta técnica no es tan sencilla como apretar un botón, por lo que si no tienes conocimientos en el tema, es probable que tardes bastante en conseguir que todo funcione correctamente, por lo que deberás tener paciencia en caso de realizarlo.
- Rendimiento: El cifrado y descifrado de datos añade sobrecarga al sistema, por lo que si tienes un equipo con un hardware limitado, podrías notar su efecto, tanto a nivel de rendimiento general como de latencia.
- Seguridad limitada: Aunque el túnel SSH cifra los datos, no protege contra ataques en el extremo final de la conexión, es decir, un ciberdelincuente podría interceptarlos en el proceso final de la conexión, por lo que todo podría quedar expuesto.
- Compatibilidad y restricción de uso: Algunas aplicaciones o servicios no son compatibles con túneles SSH. Además, muchas organizaciones bloquean el puerto 22 para prevenir el uso no autorizado de esta técnica, por lo que podemos topar con estos problemas.
- Escalabilidad: Para grandes volúmenes de tráfico o múltiples usuarios, esta técnica no es la apropiada, por lo que se utilizará más a nivel amateur, siendo las VPN o proxies dedicados los más adecuados para volúmenes mayores.
- Peligros para empresas: Un usuario malintencionado podría crear un túnel SSH para acceder a recursos internos de una empresa sin autorización eludiendo restricciones de red o firewalls corporativos, por lo que en caso de ser los propietarios, debemos tenerlo en cuenta y tomar las medidas oportunas.
- Mantenimiento: Como cualquiera de estas herramientas, necesita un mantenimiento, y no será solo configurarla y ya, por lo que hay que estar pendiente de que las claves, configuraciones y conexiones siguen siendo seguras y funcionales, entre otras cosas.
Esquema de red con ejemplo
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.
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.
Prepara tu equipo
Antes de poder llevar a cabo toda esta actividad, debemos llevar a cabo un pequeño proceso de preparación de nuestro equipo. Esto nos ayudará a que funcione un poco mejor, y no tengamos muchos problemas durante todo el proceso. Si bien por lo general siempre son algunas cosas básicas, es importante tenerlas en cuenta. Empezando por la seguridad, lo cual es un punto crítico dentro del equipo. Y la podemos dividir en diferentes aspectos. El primero es el antivirus del equipo, pero en esto Windows nos lo pone muy sencillo con su Windows Defender. Este viene incorporado de forma predeterminada, y se mantiene al día con sus respectivas actualizaciones. Por lo cual ya es algo que tenemos.
Luego será necesario revisar que el Firewall está funcionando correctamente. Windows también nos proporciona esta herramienta, pero nunca está de más darle un vistazo. Si lo vemos conveniente, podemos tratar de crear algunas reglas para personalizar un poco su funcionamiento. Por lo general siempre van a ser restricciones de tráfico, o que se realicen análisis del mismo si procede de un determinado sitio o todo, directamente. Pero esto no es todo, sino que mantener el equipo totalmente actualizado es primordial. Microsoft lanza muchas actualizaciones durante el año, por lo cual es importante que las tengamos todas correctamente instaladas. Estas nos van a proporcionar mejoras de rendimiento, nuevas funciones, corrección de errores y parches de seguridad y vulnerabilidades.
En cuanto al hardware, no estamos ante una de las actividades más demandantes. Pero si es recomendable contar con un equipo de gama media, más o menos. Esto hará que no se generen cuellos de botella, y siempre se disponga de los recursos necesarios para que todo siga funcionando de la forma adecuada. Para ello no tendremos que gastar mucho dinero en un ordenador, pero se recomienda disponer de uno que le sobre rendimiento para tal efecto.
Configuración de WinSCP para SSH Tunneling
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.
Diferencias entre Putty y WinSCP
Al ser programas parecidos, algunos os estaréis preguntando en qué se diferencian, y es relativamente sencillo responder a esta interrogante.
El caso es que WinSCP se utiliza prácticamente en exclusiva para realizar transferencias de archivos desde y hacia nuestro servidor, mientras que con el Putty lo utilizamos para interactuar directamente con el servidor. Putty simplemente tiene una interfaz de línea de comandos hacia nuestro servidor y WinSCP es una aplicación para transferir archivos utilizando un protocolo FTP seguro.
Recordemos también que utilizando WinSCP podemos fácilmente conectar un servidor SSH y SFTP o un servicio SCP a un servidor FTP o un servidor HTTP con servicio WebDAV o sistema de almacenamiento que soporte el protocolo S3.
Y precisamente debido a que son diferentes y tienen diferentes aplicaciones, podemos utilizarlos en combo, configurando la conexión SSH y si utilizas linux el SSHD desde el Putty y utilizando el WinSCP al mismo tiempo para realizar la copia o transferencia de archivos de manera segura mediante el canal seguro SSH que hemos creado previamente con el Putty.
Ventajas y desventajas de WinSCP
Dicho esto, también tenemos que destacar algunas ventajas y desventajas del propio WinSCP y ya os avisamos que tiene muchas más ventajas, ya que poco se le puede reprochar a esta herramienta que resulta muy completa y eficaz.
Por un lado, debemos destacar que, a pesar de ser una aplicación gratuita, goza de muchísimas ventajas y características, es fácil de usar e intuitivo, y tiene una interfaz gráfica bastante buena.
Tiene funcionalidades de sincronización automática para el manejo y de archivos y además tiene un editor de texto integrado que permite que los usuarios puedan abrir y editar archivos HTML, PHP, o CSS y si no fuera suficiente también pueden integrarse fácilmente editores externos como el Notepad++.
Pero como no todo pueden ser buenas noticias, también os podemos decir que tiene un par de cositas, que, aunque no sean graves, vale la pena mencionar, y es que, una de las cosas que hemos notado es que en ocasiones cuando realiza la transmisión de datos, su rendimiento baja considerablemente tornándose muy lenta dicha transmisión y además de eso únicamente podemos destacar que no admite rutas UNC, el WinSCP se “crashea” si intentas importar algún sistema de este tipo.
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.