Reenvío de puertos locales

Utilice el reenvío de puerto local para reenviar datos de manera segura desde un cliente de aplicación que se ejecute en la misma computadora que el cliente Secure Shell. Cuando se configura el reenvío de puertos locales, se designa un puerto local arbitrario para el reenvío de datos y un host y un puerto de destino para recibir los datos.

El reenvío de puertos locales funciona de la siguiente manera.

  1. Cuando se establece la conexión Secure Shell, el cliente Secure Shell abre un Socket (zócalo) La combinación de un nombre de host (dirección IP o nombre DNS) y un número de puerto. Así se crea un identificador único que una aplicación cliente utiliza como punto final de comunicaciones. de recepción de datos en la computadora local (la que ejecuta el cliente Secure Shell) usando el puerto local designado. En la mayoría de los casos, este socket solamente se encuentra disponible para las aplicaciones que se ejecutan en el host cliente Secure Shell.

    El parámetro de los puertos Gateway controla si los puertos reenviados localmente se encuentran disponibles para las aplicaciones remotas. De manera predeterminada, este parámetro no se encuentra activado, y el cliente utiliza la dirección de conexión en bucle ("localhost" o 127.0.0.1) cuando abre un socket para el reenvío de puerto local. Esto evita que las aplicaciones que se ejecutan en otras computadoras se conecten al puerto reenviado. Al activar los puertos Gateway, un cliente remoto de la aplicación puede abrir un socket usando la dirección Ethernet del cliente Secure Shell (como una dirección IP, una URL o un nombre DNS). Por ejemplo, un cliente Secure Shell que se ejecute en acme.com se puede configurar para que reenvíe al puerto 8088. Cuando los puertos Gateway no se encuentran activados, el socket reenviado es localhost:8088. Cuando se encuentran activados, el socket de reenviado es acme.com:8088.

    CPRECAUCIÓN:la habilitación de los puertos Gateway reduce la seguridad del host cliente, de la red y de la conexión, ya que permite que las aplicaciones remotas utilicen el puerto reenviado en su sistema sin autenticar.

  2. Un cliente de la aplicación se configura para conectarse al puerto reenviado (en lugar de conectarse directamente al host y al puerto del servidor de la aplicación). Cuando el cliente establece una conexión, todos los datos se envían al puerto receptor y, a continuación, se redireccionan al cliente Secure Shell.

  3. El cliente Secure Shell cifra los datos y los envía de manera segura a través del canal Secure Shell hasta el servidor Secure Shell.

  4. El servidor Secure Shell recibe los datos, los descifra y los redirecciona al host y al puerto de destino utilizados por el servidor de la aplicación.

    NOTA:si el host de destino final y el puerto no se encuentran en el host servidor Secure Shell, los datos se envían sin peligro entre el host Secure Shell y el host servidor de la aplicación.

  5. Los datos de retorno del servidor de la aplicación se dirigen hasta el servidor Secure Shell, que los cifra y los envía de manera segura al cliente Secure Shell a través del túnel SSH. El cliente Secure Shell descifra los datos y los redirecciona al cliente de la aplicación original.

La sintaxis general de línea de comando para el reenvío de puertos locales es:

ssh -L listening_port:app_host:hostport user@sshserver

Los siguientes diagramas ilustran dos formas de uso.

En la configuración mostrada anteriormente, el cliente de la aplicación y el cliente Secure Shell se ejecutan en HostA. El servidor Secure Shell y el servidor de la aplicación se ejecutan en HostB. Todos los datos enviados al puerto 2222 en el HostA se reenvían al puerto 222 en el HostB. En esta disposición, todos los datos en tránsito se cifran de manera segura. El siguiente comando (en el que localhost identifica la dirección de conexión en bucle en el HostB) configura lo siguiente:

ssh -L 2222:localhost:222 user@HostB

El siguiente diagrama ilustra el reenvío de puertos locales a otro host. En esta configuración, el servidor de la aplicación se ejecuta en un host diferente al servidor Secure Shell. Todos los datos enviados al puerto 2222 en el HostA se reenvían al puerto 222 en el HostC.

El siguiente comando configura lo siguiente:

ssh -L 2222:HostC:222 user@HostB

NOTA:los datos enviados entre el HostB y el HostC no se cifran.