Categorías
SSH

SSH: Túnel o reenvío de puertos

Por omisión, las sesiones SSH permiten la creación de túneles para la comunicación en la red.

Además, hay tres tipos de reenvío de puertos SSH:

  1. Local
  2. Remoto
  3. Dinámico

Reenvío de puertos SSH local

Este tipo de reenvío de puertos permite conectarse a un servidor remoto desde el equipo local. Suponiendo que estamos detrás de un firewall que está bloqueando la salida para acceder a una aplicación que se ejecuta en el puerto 3000 de un servidor remoto. Se puede reenviar un puerto local (por ejemplo 8080) que se puede utilizar para acceder a la aplicación localmente.

ssh admin@servidor1.ejemplo.edu.ar -L 8080:servidor1.ejemplo.edu.ar:3000

La opción -L sirve para definir el puerto reenviado al equipo y puerto remoto.

Añadir la opción -N significa no ejecutar un comando remoto, en cuyo caso no recibiremos un shell.

ssh -N admin@servidor1.ejemplo.edu.ar -L 8080:servidor1.ejemplo.edu.ar:3000

La opción -f ejecuta el comando ssh en segundo plano.

Ahora si abrimos un navegador en nuestra máquina local para acceder a la aplicación remota, en lugar de utilizar servidor1.ejemplo.edu.ar:3000, se puede utilizar fácilmente localhost:8080 o DirecciónIPLocal:8080

Reenvío de puertos SSH remoto

El reenvío de puertos SSH remoto permite conectarse al equipo local desde una máquina remota.

Nota: Por omisión, ssh no permite el reenvío de puertos remotos. Se puede habilitar usando la sección GatewayPorts en la configuración principal de sshd ubicada en el archivo /etc/ssh/sshd_config/config en el host remoto.

# nano /etc/ssh/sshd_config

Buscar la línea GatewayPorts, eliminar el comentario y establecer su valor como sí, o agregarla si no existe.

Guardar los cambios y salir. Para aplicar los cambios es necesario reiniciar el servicio sshd:

# systemctl restart sshd

A continuación, ejecutar el siguiente comando para redirigir el puerto 5000 de la máquina remota al puerto 3000 de la máquina local:

# ssh -f -N admin@servidor1.ejemplo.edu.ar -R 5000:localhost:3000

Una vez entendido este método de tunelización, se puede publicar fácilmente y de forma segura un servidor de programación local, especialmente si estamos detrás de NAT y Firewall.

Los túneles como Ngrok, pagekite, localtunnel, y otros innumerables métodos funcionan de la misma manera.

Reenvío dinámico de puertos SSH

Este es el tercer método de reenvío de puertos. A diferencia del reenvío de puertos local y remoto, que permitía comunicarse con un puerto separado, este método permite una gama completa de comunicaciones TCP a través de un rango de puertos.

El método de reenvío dinámico de puertos configura y define nuestra máquina como un servidor proxy SOCKS que funciona por omisión en el puerto 1080.

Para empezar, SOCKS es un protocolo de Internet que define cómo un cliente se conecta a un servidor a través de un servidor proxy (aquí SSH). Podemos activar el reenvío dinámico de puertos con la opción -D.

El siguiente comando inicia un proxy SOCKS en el puerto 1080 que permite la conexión a un host remoto.

ssh -f -N -D 1080 admin@servidor1.ejemplo.edu.ar

A partir de ahora, se puede hacer que las aplicaciones de la máquina local utilicen este servidor proxy SSH. Todo lo que hay que hacer es configurarlas para que usen este servidor.

Se debe tener en cuenta que Socks Proxy dejará de funcionar después de cerrar la sesión ssh.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *