Búsqueda de sitios web

Cómo crear un túnel SSH o reenvío de puertos en Linux


El túnel SSH (también conocido como reenvío de puertos SSH) consiste simplemente en enrutar el tráfico de la red local a través de SSH a hosts remotos. Esto implica que todas sus conexiones están protegidas mediante cifrado. Proporciona una forma sencilla de configurar una VPN (red privada virtual) básica, útil para conectarse a redes privadas a través de redes públicas no seguras como Internet.

También se puede utilizar para exponer servidores locales detrás de NAT y firewalls a Internet a través de túneles seguros, como se implementa en ngrok.

Las sesiones SSH permiten hacer túneles en las conexiones de red de forma predeterminada y hay tres tipos de reenvío de puertos SSH: local, remoto y dinámico > reenvío de puertos.

En este artículo, demostraremos cómo configurar rápida y fácilmente el túnel SSH o los diferentes tipos de reenvío de puertos en Linux.

Entorno de prueba:

Para los fines de este artículo, utilizamos la siguiente configuración:

  1. Anfitrión local: 192.168.43.31
  2. Host remoto: Linode CentOS 7 VPS con nombre de host servidor1.ejemplo.com.

Por lo general, puede conectarse de forma segura a un servidor remoto mediante SSH de la siguiente manera. En este ejemplo, configuré el inicio de sesión SSH sin contraseña entre mis hosts locales y remotos, por lo que no solicitó la contraseña del administrador del usuario.

ssh [email   

Reenvío de puertos SSH locales

Este tipo de reenvío de puertos le permite conectarse desde su computadora local a un servidor remoto. Suponiendo que está detrás de un firewall restrictivo o que un firewall saliente le impide acceder a una aplicación que se ejecuta en el puerto 3000 de su servidor remoto.

Puede reenviar un puerto local (por ejemplo, 8080) que luego puede usar para acceder a la aplicación localmente de la siguiente manera. El indicador -L define el puerto reenviado al host remoto y al puerto remoto.

ssh [email  -L 8080:server1.example.com:3000

Agregar el indicador -N significa no ejecutar un comando remoto; en este caso no obtendrá un shell.

ssh -N [email  -L 8080:server1.example.com:3000

El modificador -f indica a ssh que se ejecute en segundo plano.

ssh -f -N [email  -L 8080:server1.example.com:3000

Ahora, en su máquina local, abra un navegador, en lugar de acceder a la aplicación remota usando la dirección server1.example.com:3000, simplemente puede usar localhost:8080 o 192.168.43.31:8080, como se muestra en la siguiente captura de pantalla.

Reenvío remoto de puertos SSH

El reenvío de puerto remoto le permite conectarse desde su máquina remota a la computadora local. De forma predeterminada, SSH no permite el reenvío de puertos remotos. Puede habilitar esto usando la directiva GatewayPorts en su archivo de configuración principal SSHD /etc/ssh/sshd_config en el host remoto.

Abra el archivo para editarlo usando su editor de línea de comandos favorito.

sudo vim /etc/ssh/sshd_config 

Busque la directiva requerida, elimine el comentario y establezca su valor en yes, como se muestra en la captura de pantalla.

GatewayPorts yes

Guarde los cambios y salga. A continuación, debe reiniciar sshd para aplicar el cambio reciente que realizó.

sudo systemctl restart sshd
OR
sudo service sshd restart 

Luego ejecute el siguiente comando para reenviar el puerto 5000 en la máquina remota al puerto 3000 en la máquina local.

ssh -f -N [email  -R 5000:localhost:3000

Una vez que comprenda este método de creación de túneles, podrá exponer de manera fácil y segura un servidor de desarrollo local, especialmente detrás de NAT y firewalls, a Internet a través de túneles seguros. Túneles como Ngrok, pagekite, localtunnel y muchos otros funcionan de manera similar.

Reenvío dinámico de puertos SSH

Este es el tercer tipo de reenvío de puertos. A diferencia del reenvío de puertos local y remoto que permite la comunicación con un solo puerto, hace posible una gama completa de comunicaciones TCP en una variedad de puertos. El reenvío de puerto dinámico configura su máquina como un servidor proxy SOCKS que escucha en el puerto 1080, de forma predeterminada.

Para empezar, SOCKS es un protocolo de Internet que define cómo un cliente puede conectarse a un servidor a través de un servidor proxy (SSH en este caso). Puede habilitar el reenvío de puertos dinámico usando la opción -D.

El siguiente comando iniciará un proxy SOCKS en el puerto 1080 que le permitirá conectarse al host remoto.

ssh -f -N -D 1080 [email 

De ahora en adelante, puede hacer que las aplicaciones en su máquina usen este servidor proxy SSH editando sus configuraciones y configurándolas para usarlo y conectarse a su servidor remoto. Tenga en cuenta que el proxy SOCKS dejará de funcionar después de cerrar su sesión SSH.

Lea también: Cinco formas de mantener las sesiones SSH remotas ejecutándose después de cerrar SSH

Resumen

En este artículo, explicamos los distintos tipos de reenvío de puertos de una máquina a otra, para canalizar el tráfico a través de una conexión SSH segura. Este es uno de los muchos usos de SSH. Puede agregar su voz a esta guía a través del formulario de comentarios a continuación.

Atención: el reenvío de puertos SSH tiene algunas desventajas considerables, se puede abusar de él: se puede utilizar para evitar programas de monitoreo de red y filtrado de tráfico (o firewalls). Los atacantes pueden utilizarlo para actividades maliciosas. En nuestro próximo artículo, mostraremos cómo deshabilitar el reenvío de puertos locales SSH. ¡Mantente conectado!