SSH tunnels: el reenvío de puertos SSH en detalle

Para acceder a una página web que no está disponible desde tu red, los SSH tunnels ofrecen una buena solución: en lugar de navegar hasta la página web directamente desde tu propia conexión de red, puedes tomar el túnel SSH (también denominado reenvío de puertos SSH) para ir a través de un servidor SSH.

Servidores virtuales (VPS) con IONOS

Potente VPS para desarrollar y ejecutar tu código y tus aplicaciones, con asesor personal e asistencia 24/7. 

Certificado SSL
Alto rendimiento
Listo en 55 seg.

¿Qué es un SSH tunnel?

Los túneles SSH, al igual que los túneles reales, sirven para conectar dos puntos. El primero de estos puntos es un ordenador que suele estar conectado a una red no segura. El punto de destino es un servidor o una dirección web a la que no puedes o no quieres acceder desde tu red. Los túneles SSH funcionan, por lo tanto, como enlaces entre diferentes servidores y conectan los puertos TCP de dos ordenadores entre sí para cumplir su función. Cabe señalar que cualquier puerto TCP puede ser reenviado mediante un túnel SSH, por lo que el proceso también se denomina reenvío de puertos SSH o reenvío SSH.

Con respecto al servidor SSH, puedes utilizar prácticamente cualquier servidor para esto. Un ejemplo sería el servidor Raspberry Pi SSH.

Consejo

¿Todavía no has podido encontrar un servidor adecuado? ¡No hay problema! Echa un vistazo a los servidores cloud de IONOS y selecciona el servidor que mejor se adapta a tus necesidades.

¿Pero qué transporta exactamente un SSH tunnel? El túnel SSH permite que ciertos protocolos TCP puedan utilizarse de forma segura. También el SMTP o protocolo para el envío de correos electrónicos utiliza el SSH tunneling para la transferencia de datos. SSH garantiza la seguridad de los datos que se transportan en el túnel.

¿Para qué se utilizan los túneles SSH?

Hay varios casos de uso para el reenvío de puertos secure shell. En la mayoría de los casos, el reenvío de puertos SSH se utiliza para crear una conexión cifrada entre un ordenador local (el host local) y un ordenador remoto. El uso de esta red virtual permite eludir ciertas restricciones de acceso. Parecerá que estás en esta red, cuando en realidad sólo estás accediendo a ella mediante el SSH tunnel. Esto es similar a una red privada virtual (VPN), pero no obstante es diferente: intenta no confundir las dos cosas.

Si transportas datos desde servicios que utilizan un protocolo no cifrado, puedes utilizar el reenvío SSH para cifrar la transferencia de datos. Para ello se utilizará un Protocolo de Transferencia de Archivos SSH, SFTP. Los túneles SSH también ofrecen mayor seguridad cuando navegas por redes de acceso público como, por ejemplo, la de un hotel o una cafetería. Las claves SSH utilizan un cifrado asimétrico y proporcionan un nivel de seguridad aún mayor.

Es importante que tengas en cuenta que los hackers utilizan con frecuencia los túneles SSH. Ellos construyen puertas traseras en las redes internas para que los atacantes puedan acceder fácilmente a los datos internos.

Consejo

¿Quieres aprovechar las ventajas del SSH para tu página web? El pack de alojamiento web de IONOS incluye un certificado SSL y te proporciona todo lo que necesitas. O si sólo quieres mejorar tu página web con SSL, echa un vistazo a los certificados SSL que ofrece IONOS. Y si decides aumentar la seguridad de tu web, por ejemplo con la autenticación de dos factores, consulta IONOS Domain Guard.

Uso de túneles SSH en Linux

Hay varias opciones para configurar un túnel SSH.

Reenvío de puertos locales SSH

El método más habitual para configurar un túnel SSH es el reenvío local de puertos. Esto implica acceder a los recursos de la red local desde tu ordenador local y reenviar un puerto de tu ordenador a un puerto del servidor SSH. A continuación, el puerto puede ser reenviado a un puerto del ordenador de destino.

Para configurar el reenvío local de puertos, utiliza el siguiente comando de terminal en los sistemas operativos basados en Unix o en macOS:

ssh -L local_port: remote_address: remote_port username@server.com

Primero tendrás que definir qué puerto quieres reenviar (local_port). Puedes utilizar cualquier número de puerto superior a 1024. Esto se debe a que los puertos con números inferiores están restringidos y sólo el root puede acceder a ellos. A continuación, introduce la dirección IP del servidor de destino (remote_address) y tus credenciales (remote_port).

Apliquemos esto a un ejemplo: supongamos que quieres conectarte con un servidor de tu oficina cuya dirección de red es 123.234.1.111. Puedes acceder al servidor SSH de tu oficina mediante ssh.test.com. Tu nombre de usuario es “Testuser”. El comando que utilizarías para configurar el túnel SSH para el puerto 1234 sería el siguiente:

ssh -L 8888: 123.234.1.111: 1234 Testuser@ssh.test.com

Tras ejecutar el comando, tendrás acceso al servidor de la oficina a través del puerto 8888. Si el servidor permite el acceso web, también podrás acceder al servidor de la oficina a través de http://localhost:8888. Los datos que envíes al puerto 8888 de tu ordenador se reenviarán al puerto 1234 del ordenador de destino mediante el túnel SSH.

Reenvío de puertos remotos SSH

El reenvío de puertos remotos conecta un puerto del servidor SSH a un puerto del ordenador cliente, que puede establecer una conexión con el ordenador de destino. Este tipo de reenvío de puertos suele utilizarse para proporcionar a una persona externa acceso a servicios internos. El comando de terminal para configurar un túnel SSH remoto tiene el siguiente aspecto:

ssh -R remote_port: target_address: target_port user@ssh_server_address

Si ahora quieres, por ejemplo, interceptar un puerto con número de puerto 8080 y enviar los datos al puerto número 3000 de tu ordenador local, el comando tendría el siguiente aspecto:

ssh -R 8080: 127.0.0.1:3000 user@remote.host

En el ejemplo anterior, el servidor SSH tiene la dirección remote.host. Ahora puedes acceder externamente a los datos que estás “tunelizando” si introduces esta dirección junto con el número de puerto en un navegador:

remote.host:8080

Si tienes problemas para configurar el reenvío remoto de puertos, puede deberse a la configuración de tu servidor SSH. El reenvío remoto de puertos suele estar desactivado por defecto. Solo tienes que activar el GatewayPorts en el archivo de configuración de tu servidor SSH. Para ello, abre el archivo y pon GatewayPorts en “yes”.

Reenvío dinámico de puertos SSH

Una tercera manera de utilizar los túneles SSH consiste en el reenvío dinámico de puertos. Esta manera te permite utilizar un socket en tu ordenador local que funcionará como una especie de proxy SOCKS. Todas las aplicaciones que utilicen un proxy SOCKS se conectarán entonces con el servidor SSH y enviarán su tráfico a través del túnel. Este tipo de reenvío de puertos se utiliza a menudo para tunelizar el tráfico del navegador web.

Para configurar el reenvío dinámico de puertos, utiliza el siguiente comando de terminal:

ssh -D [local_ip_address:]local_port user@ssh_server_address

Si no introduces una dirección IP local, se utilizará automáticamente la dirección IP 127.0.0.1 (localhost. Si, por ejemplo, configuras un túnel SOCKS para el puerto 9090 con la dirección remote.host, el comando tendrá el siguiente aspecto:

ssh -D 9090 -N -f user@remote.host

Después de configurar el proxy SOCKS, asegúrate de configurar correctamente las aplicaciones que utilizan el proxy.

SSH tunnels y Windows

También puedes configurar túneles SSH en Windows. Como el terminal es menos importante en Windows, querrás utilizar una de las muchas herramientas prácticas con interfaz de usuario, como PuTTY. Hacen que configurar un túnel SSH sea muy fácil.

Cuando hayas descargado e instalado PuTTY, ábrelo. En el menú de inicio, introduce la dirección IP del servidor SSH deseado en “Hostname”. A continuación, accede a “Connection/SSH/Tunnels”. Aquí puedes introducir el puerto de origen y el de destino en los cuadros “Source Port” y “Destination”. para establecer la conexión. Ahora deberías poder establecer una conexión y acceder al puerto en el navegador con 127.0.0.1:port_number.

Túneles SSH inversos

Para acceder a ordenadores con una dirección IP privada necesitarás un túnel SSH inverso. Con un túnel SSH inverso, el ordenador remoto al que quieres acceder puede crear una conexión con tu ordenador local. Luego puedes utilizar esa conexión para crear una nueva conexión desde el ordenador local al ordenador remoto.

El siguiente comando configurará un SSH tunnel desde el ordenador remoto:

ssh -Nf -R 2222:localhost:22 user@local.computer

El ordenador local puede entonces utilizar el siguiente comando para conectarse con el ordenador remoto:

ssh localhost -p 2222