SSH Tunneling

28 de marzo de 2019 • fjbalon

El tunneling es un proceso por el que se utiliza el protocolo SSH para fortificar la comunicación entre otros protocolos inseguros, por ejemplo para realizar peticiones HTTP, SMTP, etc.

Los túneles pueden ser locales o remotos. En los túneles locales, la máquina del administrador o cliente redirecciona un puerto local hacia un puerto de la máquina remota, a la que se disponga de acceso. En los túneles remotos se redirecciona un puerto remoto dela máquina remota, a la que se disponga de aacceso, a un puerto de la máquina local, donde se encuentra el administrador.

La sintaxis para la creación de un túnel local hacia el puerto remoto de la máquina remota es la siguiente:

ssh -L [direccion de escucha:]puerto escucha:maquina remota: puerto remoto usuario@server

El escenario idóneo para la utilización de túneles SSH locales es el siguiente:

El túnel remoto, por su lado, generará un socket a la escucha en un servidor, el cual al recibir una petición reenviará el tráfico mediante SSH a la máquina local donde se encuentre el administrador. La sintaxis es:

ssh -R puerto local:maquina remota:puerto remoto

Un ejemplo sería querer que una máquina en Internet llegase al interior de la Intranet a través de una máquina puente de la propia red privada, manteniendo una interfaz hacia Internet. El escenario sería el siguiente:

Estas técnicas cuentan con una serie de escenarios muy interesantes, siendo los más usuales:

  1. Usar un túnel externo para atravesar el firewall y acceder a un recurso que ofrece un equipo de la intranet.
  2. Usar un túnel externo para atravesar el firewall y acceder a un recurso de una intranet. Pero además cualquier equipo puede conectarse a dicho equipo de la intranet a través de una conexión con el equipo externo.
  3. Usar un túnel interno para que los equipos de fuera de la red se conecten al interior. Esta acción se realizará mediante túneles remotos.
  4. Túnel interno para que equipos de fuera de la red se conecten al interior, pero además que otros equipos del exterior puedan conectarse a través del externo remoto.
  5. Utilizar un túnel para que desde una máquina externa se pueda atravesar el firewall y realizar el forwarding en una máquina interna, y que esta reenvíe el tráfico a la segunda máquina interna.
ssh -L 7900:localhost:5900 usuario@internal #1
ssh -L 0.0.0.0:7900:localhost:5900 usuario@internal #2
ssh -R 7900:localhost:5900 usuario@internal #3
ssh -R 0.0.0.0:7900:localhost:5900 usuario@internal #4
ssh -L 7900:internal2:5900 usuario@internal #5