Crear un túnel SSH con PuTTY para Escritorio remoto (RDP) (local port forwarding)

https://www.zonasystem.com/2018/08/crear-tunel-SSH-con-putty-para-escritorio-remoto-rdp.html

Un tunel SSH se utiliza principalmente para tunelizar tráfico sobre internet o sobre una red local de una manera segura. Podemos encapsular un tipo de protocolo sobre una conexión establecida SSH (Secure SHell).

Supongamos que nos queremos conectar a un servidor interno de una red local a través de Internet, pero el firewall de la compañía restringe las conexiones origen dirigidas a determinados puertos, entre ellos el 3389 (puerto por defecto usado para RDP), sin embargo si permite conexiones al puerto 22 (puerto por defecto para SSH). La compañía expone un único equipo accesible desde la WAN (Wide Area Network) de Internet. Por lo que tienen definada una regla en el firewall que hace port forwarding permitiendo las conexiones origen dirigidas al puerto 22 a través de la dirección IP pública se redirigen a una determina IP interna que pertenece a un servidor Linux, este será el servidor SSH que usaremos para hacer pivoting al servidor al que nos conectaremos por Escritorio remoto RDP por el puerto 3389. El equipo cliente definirá mediante una herramienta de terceros la configuración de tunel SSH y se conectará a la IP pública de la compañía por el puerto 22, una vez establecida la conexión al servidor SSH el cliente se conectará por Escritorio remoto a sí mismo (127.0.0.1 o localhost) por el puerto configurado en el tunel SSH, ese puerto redirigirá la conexión al servidor SSH que a su vez redirigirá a la IP interna del servidor que aceptará la conexión de Escritorio remoto.

En el siguiente squema se muestra un funcionamiento de ejemplo para establecer conexiones de Escritorio remoto sobre un tunneling SSH. Se encapsulará el protocolo RDP sobre un el protocolo SSH.

Figura 1: Esquema de conexión tunneling SSH para conectarse por Escritorio remoto (RDP).

Para establecer la configuración usaremos el cliente SSH PuTTY (podría ser otro que tenga la opción de poder configurar túneles SSH). Abrimos Putty y nos desplazamos a la sección: "Conecction > SSH > Tunnels".

Indicamos el puerto origen para nuestro equipo y el destino IP:PUERTO al que se redirigirá la conexión. En este caso el puerto 3333 sería el puerto origen local de la máquina cliente y redirigirá las peticiones a ese puerto al destino 10.0.0.12:3389 sería el servidor remoto al que nos conectaremos por Escritorio remoto.

Figura 2: Putty - Configurar conexión port forwarded tunelizada para usar con SSH.

En la sección "Session" especificamos el nombre o IP del que sería el servidor SSH remoto al que nos conectaremos inicialmente. (Para este ejemplo me he conectado a una IP local sería la miasma configuración para una IP Pública en Internet de un sitio remoto).

Figura 3: Putty - Conectarse al equipo servidor SSH.

Una vez nos conectamos a al servidor SSH remoto, en el equpo cliente abrimos una ventana de conexión de Escritorio remoto (Windows +R > mstsc) y nos conectamos como localhost:3333. Ese puerto reenviará la pentición al servidor SSH al que estamos conectados pivotando a través de este se establecerá la comunicación tunelizará de forma segura (previamente así lo habíamos definido -ver figura 2-) autenticándonos hacia el servidor destino que aceptará la conexión de Escritorio remoto.

Figura 4: Autenticación para Escritorio remoto usando un reenvío de puertos configurado para un tunel SSH.

Finalmente la conexión se estableció correctamente. En la siguiente captura de pantalla se puede ver como la conexión por Escritorio remoto se hizo a través de localhost:3333, en el servidor SSH se ve la redirección de puertos y en el eventlog de Putty el tunel SSH definido inicialmente. 

Las peticiones que vengan del puerto local 3333 las renviará al destino 10.0.0.12:3389 (IP del servidor al que nos conectaremos y puerto por defecto RDP).

Figura 5: Conexión de Escritorio remoto establecida usando un tunel SSH.