Tunelizando servicios con SSH

Adentrandome un poco más en las configuraciones ligeramente más avanzadas del servicio SSH encontré un tipo de configuración o despliegue del servicio SSH muy potente para traer servicios remotos a mi equipo local.

Iré directamente al grano con un ejemplo muy práctico, una red simple, un servidor remoto en internet con el servicio SSH abierto y un servicio postgresql que no es accesible, solo localmente, mi equipo local con el potente cliente SSH listo para hacer conexiones.

Ahora mi necesidad es conectarme a ese servicio postgresql que no lo puedo alcanzar con mi cliente de postgres, la solución es crear una conexión SSH y tunelizar ese servicio de postgresql a travez del tunel SSH y poner el servicio en mi equipo local para poder accederlo.

La sintaxis es muy simple, aunque de primera instancia el concepto puede ser un poco complejo de entenderse:
ssh -L *:puertolocal:localhost(127.0.0.1):puertoremoto user@hostremoto

Ok ahora lo explico, usamos ssh con el modificador “-L” seguido del * para compartir el servicio tunelizado en la LAN de mi equipo local (esto es una herramienta misteriosa que nos ayudará más tarde), enseguida es el puerto local que será uno libre de mi equipo local por ejemplo 1234, enseguida usaré localhost para colgar el servicio remoto en mi localhost, enseguida el puerto remoto donde está el servicio postgresql que es el 5432 y luego usuario y host del servidor remoto y quedará de la siguiente manera:
ssh -L *:1234:localhost:5432 sysadmin@hostremoto.com.mx

Hay que loguearse de manera normal, y se establecerá una conexión SSH con el servicio de postgresql viajando dentro del tunel colgandose en mi equipo local en el puerto 1234.
Lo que tengo que hacer ahora es establecer conexión a la base de datos:
psql -h localhost -p 1234 -d db_name -U user_name -W

Esto debería ser suficiente para establecer conexión con el servicio de base de datos remoto que no está publicado en internet y esta configuración se mantendrá activa siempre y cuanto la sesión SSH siga activa.

Ahora en temas de seguridad, es una vulnerabilidad que esta configuración se deje así predeterminada, para deshabilitarla solo es necesario cambiar el siguiente parametro en la configuración del servidor SSH:

AllowTcpForwarding

Que predeterminadamente está configurada como yes, hay que cambiarla a no, para evitar que se puedan hacer estás configuraciones.

Al paso del tiempo y trabajando cada día más con SSH me voy dando cuenta que instalar un servicio SSH no solo implica hacer el install del paquete e iniciar el demonio, más bien requiere varios pasos de configuración y buenas practicas para tener bien configurado un servicio tan trivial dentro de la red.

Hay que recordar que los vectores de ataque regularmente se explotan de manera lateral, no directamente al servidor que se quiere atacar, en su lugar primero se vulnera un dispositivo cercano al servidor y de allí se hace el desplazamiento hacia la victima final por lo que los atacantes buscarán vulnerabilidades para explotar en otros dispositivos de la misma red o cercanos.

Si quieres saber más al respecto sobre la configuración del potente viejo lobo de mar SSH la puedes encontrar aquí: juncotic.com.

Deja un comentario