Archivo

Entradas Etiquetadas ‘tuneling ssh’

Acceso a servicios privados mediante tunel ssh

Sábado, 22 de Agosto de 2009 ajerez Sin comentarios

Este post, a diferencia del anterior, va a ser bastante corto, y así va a ser porque lo que os voy a relatar ahora es una operación bastante sencilla. A pesar de ello yo tarde un tiempo en empezar a utilizarla asiduamente en mi día a día como Administrador de sistemas.

Bueno vayamos al grano, lo que vamos a ver hoy es como crear un túnel desde nuestro servidor o servidores, que nos permita acceder a servicios que de otra manera serian inaccesibles.

Por ejemplo, supongamos que tenemos una red con N servidores, y solo uno de ellos, tiene acceso shell público habilitado, y es el que usamos como punto de entrada para todos los servidores. Ahora, supongamos que en al menos una de las N-1  máquinas que nos quedan, tenemos instalado un servidor de bases de datos mysql, este servidor de base de datos mysql será visible para todas las máquinas dentro de la subred, en el datacenter, pero no lo será desde nuestra oficina o casa por ejemplo, al menos de manera directa.

Con este escenario en mente, supongamos que queremos acceder con una aplicación como mysql workbench al servidor de base de datos que tenemos en la máquina “inaccesible”, en principio seria imposible si no abriéramos el puerto 3306 (o el que este usando mysql), a todo internet, ni que decir tiene que esto no es muy buena idea.

Gracias al tuneling por ssh podemos solventar este problema abriendo una conexión por shell con nuestro servidor, que haga corresponder un puerto de tu máquina local, con el puerto del servicio en cuestión, es decir

ssh -fNg -L 10000:localhost:3306 usuario@ipremota

Con esta instrucción redireccionaremos el puerto 3306 de la maquina remota, al puerto 10000 de nuestra máquina local.

Ahora bien, en el escenario que yo he planteado, el servicio mysql esta en otra máquina que no es la que tiene acceso shell, por lo tanto, en la que si tenemos acceso, debemos ejecutar otro tunel, que redirija el puerto de mysql del server en cuestion, a alguno de la máquina con acceso, y luego este puerto resultante, direccionarlo a tu máquina local. Parece un poco lío, pero no es más que concatenar redireccionamientos de puertos de una máquina a otra.
Ejemplo.

  1. ssh -fNg -L 3307:server1:3306 usuario@ip-privada-server2-mysql. Con esto estariamos sirviendo en el puerto 3307 de la máquina con acceso shell público, el mysql de la máuina privada.

  2. ssh -fNg -L 10000:localhost:3307 usuario@ipremota. Con este otro comando, redireccionamos a nuestra máquina local el puerto 3307 del server, que a su vez es un tunel del 3306 de la máquina privada.

Espero que os sirva de ayuda este post, y que no os hayáis perdido en el N-1 ;)