SSH Local port forwarding - LINUX 🐧

Tratare de explicar de la forma mas simple este tipo de túnel ssh, sin entrar en detalles de configuraciones la cual me sirva como punto de apoyo y referencia en otras entradas, pero se puede resumir como traer un servicio remoto y exponerlo locamente, para luego conectarse con el programa correspondiente, todo esto mediante un túnel cifrado.



Tenemos una típica red hogareña gestionada por un router inalámbrico, el cual tiene varios dispositivos conectados ejecutado diferentes servicios, pero ninguno accesible desde Internet y un pc (Mi laptop) conectada a Internet perteneciente a otra red fuera de casa. 




Ahora quiero ingresar al servidor ftp (puerto 21) del servidor 192.168.1.3 el cual guarda las capturas de la cámara ip 192.168.1.5 desde mi laptop fuera de casa o desde el otro lado del mundo.

Para lograr nuestro propósito la clave es tener acceso a un dispositivo que este ejecutando SSH dentro de la RED LAN en este caso el router inalámbrico, desde dentro de la LAN podemos acceder mediante el puerto 22 y la dirección 192.168.1.1 y desde Internet al puerto 1022 y la dirección 190.36.108.233 (IP publica suministrada por el ISP) antes de realizar el túnel, el servidor ssh debe estar previamente configurado y probado un ejemplo similar puedes verlo aquí.




Creación del túnel 

Necesitamos que en la laptop ejecute un cliente ssh en nuestro caso OpenSSH que se va a conectar al servidor ssh del router (dropbear) a la dirección 190.36.108.233 y el puerto 1022, el cual le indicaremos que realice un túnel desde el servidor FTP 192.168.1.3 y puerto 21, hasta nuestra laptop (localhost o 127.0.0.1) y el puerto 21021 (este fijador por nosotros).

Antes debemos saber que el servidor ssh en el router inalámbrico tiene como usuario root y tiene una contraseña ya conocida por nosotros.

El túnel se crearía con el siguiente comando, desde la terminal.
$ ssh -L 20021:192.168.1.3:21 root@190.36.108.233 -p 1022


Para luego solicitarnos la contraseña 😎



Conexión al servicio local

Nos conectaremos desde un cliente ftp (por ejemplo los gestores de archivos como Dolphin, Nautilus, Thunar, etc) a la dirección (localhost o 127.0.0.1) y al puerto 21021 desde nuestra laptop para completar el túnel, con las credenciales previamente establecida en el servidor ftp remoto.



Otros ejemplos

🖧 Quiero conectarme a la web de la cámara ip 192.168.1.5 y puerto 80, el túnel se crearía de la manera siguiente:
$ ssh -L 8080:192.168.1.5:80 root@190.36.108.233 -p 1022

Ingresaríamos desde nuestro navegador favorito a la dirección http://localhost:8080


🖧 Quiero ver el flujo de vídeo y audio de la cámara ip 192.168.1.5 y puerto 554 (protocolo rstp), el túnel se crearía de la manera siguiente:
$ ssh -L 5554:192.168.1.5:554 root@190.36.108.233 -p 1022

Ahora para conectarme a ese servicio desde la red de origen se realiza a la siguiente dirección 
rtsp://192.168.1.5/video.mp4 mediante reproductores como MPV o VLC.

Pero desde el otro lado del túnel debemos conectarnos a la siguiente dirección rtsp://localhost/video.mp4:5554


🖧 Quiero conectarme a escritorio remoto VNC 192.168.1.11 y puerto 5900, el túnel se crearía de la manera siguiente:
$ ssh -L 5900:192.168.1.11:5900 root@190.36.108.233 -p 1022

Ahora desde nuestro cliente VNC favorito nos conectaríamos a la dirección localhost y no colocaríamos puerto ya que en ambos extremos del túnel son el mismo y son propios del protocolo.


🖧 Quiero conectarme al router 192.168.1.1 a su interfaz web (puerto 443) que solo esta disponible desde la LAN, el túnel se crearía de la manera siguiente:
$ ssh -L 8081:192.168.1.1:443 root@190.36.108.233 -p 1022

Ingresaríamos desde nuestro navegador a la dirección https://localhost:8081


Palabras finales

Lo primero que se debe probar es una correcta y estable conexión entre cliente y servidor ssh, este ultimo debe tener habilitado el reenvió de puerto (Remote forwarding).

Una ventaja importante de este método, es que no tenemos puertos expuestos de nuestros servicios LAN mediante (Port Forwarding) que puede traer problemas de seguridad, otra ventaja es que tenemos acceso a todos los dispositivos y sus servicios.

Otra consideración es, que en lugar de usar la IP publica, es usar el servicio DNS de los router algunos ejemplos aquí y aquí.

También en las direcciones LAN podemos usar el hostname o fijar las ip de los dispositivos un ejemplo aquí.

Protocolo inseguros como el HTTP y FTP, mediante el túnel cifrado pueden consultarse con toda seguridad.

Para finalizar es segurizar el servidor ssh, en la red hay muchas guías según el servidor, para simplificar esta entrada se uso la identificación mediante contraseñas, pero la recomendación es mediante llaves asimétricas.

Cualquier duda, pregunta o aclaración en los comentarios, ya saben que esta entrada es un acercamiento muy simplista a esta función que nos otorgar un servidor ssh 🤖


Fuentes:



2021.10 Algunas correcciones.

Comentarios

Entradas más populares de este blog

Super Mario RPG 🎮