Como realizar un tunel inverso con SSH

En algunas ocasiones necesitamos conectarnos a un servidor el cual esta detras de un Firewall  o de otro equipo, al cual no tenemos acceso para hacer  la respectiva redireccion de puertos  y lograr conectarnos por la ip publica con la que dicho equipo sale a internet. En otras palabras, necesitamos acceder a un servidor el cual esta detras de algun tipo de NAT que nos impide realizar la conexion directa al servidor.

Para solucionar esta problema, se pueden emplear diversas tecnicas, sin embargo en el dia de hoy quiero mostrar una forma muy sencilla de poder conectarnos via SSH a un equipo que esta detras de un FW o NAT, implementando los muy conocidos tuneles inversos.

¿Como funciona un tunel SSH inverso?

Generalmente, una conexion SSH se realiza haciendo que el cliente se conecte  hacia el servidor, sin embargo si no tenemos forma de  hacer la conexion SSH de esta forma(por lo que ya hemos hablado del NAT y FW), es posible hacer que esta maquina a la cual queremos acceder, se conecte por SSH  a una tercera maquina a la cual si tiene acceso (ya que  el fw no restringe la conexion de LAN y WAN) de esta forma, conectariamos la maquina destino (la cual esta detras del FW o NAT) a una tercera maquina, y nosotros desde nuetro PC nos conectariamos a esta tercera maquina y de alli entrariamos al tunel el cual se establecio previamente entre la maquina destino(si, la que esta detras del fw  y nat ) y la  tercera maquina. Un esquema para aclarar un poco mas la idea

tunel ssh

 La idea es basicamente esta:

  • De A nos conectamos a B
  • De C nos conectamos a B
  • Por ultimo, de C nos conectamos a A, usando el tunel establecido con el B

A continuacion se indicaran los pasos a seguir ya en la practica para realizar la conexion:

  • Iniciamos el tunel desde A hasta B de la siguiente forma:

ssh -R puerto_a_escuchar:localhost:puertoSSH usuario_local@DireccionIP_maquina_b

Un ejemplo mas claro:

ssh -R 9999:localhost:22 test@200.207.23.45

Donde

9999: sera el puerto que quedara a la escucha

22: Es el puerto donde escucha el SSH localmente

test: Usuario de SSH local

200.207.23.45: Direccion IP de la maquina que servira para hacer el tunel

  • Una vez hecho esto, pasamos a conectarnos por SSH normalmente a la maquina B

ssh user@200.207.23.45

  • Ahora por ultimo, estando alli en la maquina B nos conectamos al puerto donde se establecio el tunel, para efectos de nuestro ejemplo fue el puerto 9999

ssh test@localhost -p 9999

De esta forma estaremos dentro de aquella maquina la cual esta detras de un FW o de un NAT, gracias al uso del tunel inverso SSH, una medida muy sencilla para evitar este tipo de problemas.

Como ven es una de las tantas funcionalidades que nos ofrece SSH para lograr gestionar equipos los cuales no esten directamente conectados a internet o esten en otra subred detras de un equipo de seguridad, sin necesidad de modificar las reglas de firewall para crear port forward o habilitar puertos, es decir, una tecnica muy util cuando no tengamos acceso al equipo de borde

One Comment

Add a Comment

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