Túnel SSH inverso


Vamos a aprender a crear un túnel SSH inverso para realizar la conexión de una aplicación a la web

oscar Escrito por oscar 28 July 2023 508 0

Antes de empezar

A continuación esta los post donde se explica como instalar OpenSSH

Definiciones

SSH (Secure Shell)

El protocolo de red seguro SSH permite la comunicación segura entre dispositivos conectados a una red. proporciona una forma segura y cifrada de acceder y administrar dispositivos remotos como servidores, computadoras y dispositivos de red. Además, SSH permite la transferencia segura de archivos entre sistemas utilizando el protocolo de transferencia de archivos SSH (SSH File Transfer Protocol) o el protocolo de copia segura ( SCP).

SSHD (SSH Daemon)

El deamon (proceso en segundo plano) Sshd se ejecuta en el servidor y escucha las solicitudes de conexión entrantes de los clientes SSH. Es responsable de administrar las sesiones de usuario en el servidor, autenticar a los usuarios y administrar las conexiones entrantes. El deamon SSHD administra la autenticación y la autorización cuando un cliente SSH intenta conectarse an un servidor. Según las credenciales del cliente, el deamon SSHD puede permitir o denegar el acceso.

Puerto Local (- L)

Este es el puerto en tu máquina local (la que inicia el túnel SSH) que se redirige a través del túnel y se asocia con un puerto en la máquina remota. En otras palabras, es el puerto de tu propia máquina desde el cual estás enviando datos hacia el sistema remoto. El puerto local puede ser cualquier puerto disponible en tu máquina local.

Puerto Remoto (- R)

Este es el puerto en la máquina remota a la que te estás conectando a través del túnel SSH. Los datos que envíes desde tu puerto local se reenviarán a través del túnel y se entregarán a este puerto en la máquina remota. El puerto remoto puede ser cualquier puerto disponible en la máquina remota.

Descripción de la red

Para realizar la conexión de  un túnel inverso y entender su funcionamiento, vamos a describir un caso comun en donde aplicaremos un túnel inverso SSH, observemos la siguiente imagen: 

Red local e internet
  1. Preparación de la Petición en el Host A (192.168.0.100): En primer lugar, el host A preparará la solicitud que desea enviar al servidor. Esto podría ser, por ejemplo, una solicitud HTTP para acceder a una página web en el servidor.
  2. Encapsulación y Ruteo en el Router (192.168.0.1): El host A enviará la solicitud al router. El router, que actúa como una puerta de enlace entre la red local y la Internet, encapsulará la solicitud en paquetes de datos. Luego, el router realizará una búsqueda en su tabla de enrutamiento para determinar cómo enviar los paquetes. Dado que la dirección IP de destino (34.234.166.116) no está en la red local, el router enviará los paquetes al proveedor de servicios de Internet (ISP) a través de su interfaz de salida.
  3. Ruteo a través de Internet: El ISP recibirá los paquetes del router y los enviará a través de su infraestructura de red. Esto podría implicar múltiples saltos a través de diferentes routers y servidores intermedios en la red global de Internet.
  4. Llegada al Servidor (34.234.166.116): Después de varios saltos a través de la red, los paquetes llegarán finalmente al servidor en la dirección IP 34.234.166.116.
  5. Procesamiento de la Solicitud en el Servidor: El servidor recibirá los paquetes y desencapsulará la solicitud. Luego, procesará la solicitud y generará una respuesta adecuada.
  6. Envío de la Respuesta: Una vez que el servidor haya generado la respuesta, empaquetará la respuesta en paquetes de datos y los enviará de vuelta a través de Internet.
  7. Ruteo de la Respuesta: La respuesta seguirá un camino inverso al que siguió la solicitud. Pasará a través de varios routers y servidores intermedios hasta llegar al router del ISP.
  8. Llegada a la Red Local: La respuesta pasará a través del router de tu ISP y llegará nuevamente al router en la red local.
  9. Entrega al Host A: El router en la red local entregará la respuesta.
Túnel SSH inverso
  1. Preparación de la Conexión SSH en el Host A (192.168.0.100): En el host A, se inicia el proceso de conexión SSH proporcionando la dirección IP o el nombre de dominio del servidor al que se quiere conectar, junto con las credenciales de autenticación (generalmente nombre de usuario y contraseña o clave SSH).
  2. Inicio de la Solicitud SSH: El cliente SSH en el host A (por ejemplo, OpenSSH) establecerá una conexión SSH con el servidor. El cliente SSH generará una solicitud de conexión al servidor en la dirección IP 34.234.166.116.
  3. Encapsulación y Ruteo en el Router (192.168.0.1): Al igual que en el proceso anterior, el router encapsulará los paquetes SSH y los enviará a través de su interfaz de salida, que se conecta al ISP.
  4. Ruteo a través de Internet: Los paquetes SSH serán enviados a través de la red de Internet a través de varios saltos y enrutadores intermedios.
  5. Llegada al Servidor (34.234.166.116): Los paquetes SSH llegarán al servidor en la dirección IP 34.234.166.116.
  6. Procesamiento de la Conexión SSH en el Servidor: El servidor SSH en el servidor recibirá los paquetes y reconocerá que se trata de una solicitud de conexión SSH. El servidor SSH verificará las credenciales proporcionadas por el cliente SSH en el host A.
  7. Establecimiento de la Conexión SSH: Si las credenciales son correctas, el servidor SSH establecerá una conexión segura con el cliente SSH en el host A. Esto implicará el intercambio de claves de cifrado y la negociación de los detalles de seguridad para la conexión.
  8. Comunicación Segura: Una vez establecida la conexión SSH, la comunicación entre el host A y el servidor se llevará a cabo de manera segura y cifrada. Esto permitirá la transferencia segura de datos, comandos y resultados entre ambos extremos.
  9. Finalización de la Conexión: Cuando la comunicación SSH haya terminado, ya sea porque el usuario cerró la conexión o porque se completó una tarea específica, la conexión SSH se cerrará.

Túnel SSH inverso

Para crear el puente inverso ejecutamos el siguiente comando:

ssh -R PUERTO_REMOTO:localhost:PUERTO_LOCAL USUARIO@IP_HOST_REMOTO -i KEY.PEM

Donde:

  • Puerto_remoto: puerto expuesto por el servidor remoto
  • Puerto_local: puerto de la maquina local a conectarse
  • Usuario: usuario del servidor remoto
  • IP_host_remoto: Ip del host remoto
  • key.pem: key llave para acceso del host

Un ejemplo seria:

ssh -i iot.pem -R 24000:localhost:8084  ubuntu@34.233.167.106

Ejemplo

Ejemplo con túnel SSH inverso | CodigoElectronica 


Comentario

Debe aceptar antes de enviar