Creando túneles SSH a SSH Server, MySQL Server y a LDAP Server desde Windows y con Tunnelier

He tenido que administrar varios servidores virtuales (Proxmox) que exponen diferentes servicios como SSH server, MySQL server y LDAP server, pero al que no podemos acceder directamente, lo tuve que hacer accediendo remotamente desde un cliente SSH y luego haciendo el “salto” hacia el servidor deseado. Esto es lo que se llama “tunel ssh”. Evidentemente, es un proceso muy lento sobretodo cuando necesitamos operar dichos servicios de manera rápida, crear un usuario, ver logs, clonar una VM, desplegar nuevos servicios, en fin. Esta situación se complica aún más si desde el servidor que nos sirve de puente tiene un Firewall que cierra o filtra muchos de los puertos, como es natural en un entorno productivo.

En fin, la herramienta más usada para hacer esto en Windows es Putty, además de ser un cliente SSH, permite crear túneles (port forwarding) de manera fácil.

Quizás lo más difícil es entender cómo se crean los túneles, aquí lo explicaremos y además emplearemos Tunnelier, otro cliente SSH de Btivise que además tiene unas características mejoradas en comparación a Putty.

1. Escenario donde crearemos túneles SSH

Escenario - Creando 3 túneles SSH hacia SSH server, MySQL server y LDAP server

Escenario – Creando 3 túneles SSH hacia SSH server, MySQL server y LDAP server

  • kns : representa al servidor SSH público que expone el servicio en el puerto 2121. También podéis usar el FQDN o la IP.
  • kns-lfry0, kns-db1, kns-ldap0 : representan los Hostnames o IPs privados o internos. Sólo pueden ser resueltos desde kns.

2. Creando túnel hacia SSH server

Una vez descargado e instalado Tunnelier, configurémoslo de esta forma.

  • En la pestaña “C2S” crear un tunel hacia el servidor kns-lfry0:22, tal como se indica en la figura.
Creando tunel SSH

Creando tunel SSH

  • En la pestaña “Options“, bajo “On Login” deshabilitar “Open Terminal” y “Open SFTP” (opcional, esto hace que no se abran consolas ssh ni el cliente SFTP).
  • En la pestaña Login introducir las credenciales para hacer SSH a kns bajo el puerto 2121, tal como se muestra en la figura.
Creando tunel SSH - haciendo Login

Creando tunel SSH – haciendo Login

  • Luego hacemos “Login“, con ello nos traemos el puerto 22 remoto al puerto 2122 del localhost.

En estos momentos ya hemos creado el túnel, ahora como estamos haciendo “port forwarding” hacia kns-lfry0 que tiene abierto el puerto 22 del SSH server, entonces podemos usar cualquier cliente SSH para conectarnos a dicho servidor remoto como si fuese un servicio local, pero en este caso debemos conectarnos a localhost en el puerto 2122. Podemos usar Putty o abrir nuevamente el programa Tunnelier (no añadir nuevos túneles, sólo usarlo como cliente SSH para conectarnos a localhost:2122).

Abriendo 2 sesiones de Tunnelier, el primero para crear el tunel y el segundo para hacer la conexión SSH a kns-lfry0:22 (localhost:2122)

Abriendo 2 sesiones de Tunnelier, el primero para crear el tunel y el segundo para hacer la conexión SSH a kns-lfry0:22 (localhost:2122)

3. Creando túnel hacia MySQL server

Este escenario es algo más difícil que el anterior, pero se resuelve haciendo un segundo túnel sobre el anterior, esto hace que cuando nos conectemos con un cliente MySQL, MySQL server no nos deniegue la conexión. Esto se debe a que por defecto MySQL deniega la conexión si lo hacemos desde un Host diferente al localhost. Al hacer el segundo túnel, nos conectamos directamente al MySQL server y establecemos la conexión desde el mismo host donde está instalado MySQL server.

Primer túnel ssh-mysql:

Primer túnel SSH-MySQL (1/2)

Primer túnel SSH-MySQL (1/2)

Primer túnel SSH-MySQL (2/2)

Primer túnel SSH-MySQL (2/2)

Una vez configurado el primer túnel, hacer click en Login.

Segundo túnel SSH-MySQL:

Segundo túnel SSH-MySQL (1/2)

Segundo túnel SSH-MySQL (1/2)

Segundo túnel SSH-MySQL (2/2)

Segundo túnel SSH-MySQL (2/2)

Una vez configurado el segundo túnel, hacer click en Login.

Ahora, usar cualquier cliente MySQL para conectarse al MySQL server, yo suelo usar HeidiSQL. Configurarlo de esta forma:

Usando HeidiSQL para conectarse a MySQL a través de un túnel SSH

Usando HeidiSQL para conectarse a MySQL a través de un túnel SSH

4. Creando túnel hacia LDAP server

Este escenario es similar al primer escenario donde nos conectábamos a un segundo SSH server llamado “kns-lfry0“, puerto “22“. Ahora nos conectaremos a “kns-ldap0“, puerto “389“, según la primera figura mostrada líneas arriba.

La diferencia estriba en que en el primer escenario usábamos un cliente SSH (Putty o Tunnerlier) para conectarnos al servidor, mientras que en este nuevo escenario usaremos un cliente LDAP (LDAP Browser Editor).

Otra pequeña diferencia con respecto a los anteriores escenarios es que usaremos un sólo Tunnelier para configurar todos los primeros túneles, aunque sólo vayamos a usar el relacionado a kns-ldap0:389. Esto es sólo por comodidad.

Túnel SSH-LDAP

Túnel SSH-LDAP (1/2)

Túnel SSH-LDAP (1/2)

Túnel SSH-LDAP (2/2)

Túnel SSH-LDAP (2/2)

Una vez configurado el túnel, usando LDAP Browser Editor crear una conexión hacia el túnel LDAP, es decir, localhost:2124.

LDAP Browser Editor - conectándonos al túnel SSH-LDAP

LDAP Browser Editor – conectándonos al túnel SSH-LDAP

5. Conclusiones

  • El servicio de SSH abre un el puerto 22 por defecto, muchos ports scanners o durante el proceso de pen-testing, el puerto 22 es uno de los más  atacados. Lo recomendable es cambiar el puerto, no permitir conectarse usando usuario ROOT y aplicar alguna técnica de ocultamiento de servicio como Port-Knocking. Crear túneles en este escenario no cambia nada, únicamente hay que conocer el nuevo puerto del SSH server.
  • Algunos servicios como SSH, MySQL, etc. permite incorporar mecanismos extras de seguridad basadas en IP/Hostname desde donde te conectas. Además de restringir desde dónde se establece la conexión usando Firewalling con iptables. Pues, lo recomiendo usar. En este post, MySQL tiene ese comportamiento y para acceder a él desde un cliente MySQL nos obliga crear dos túneles.
  • Es importante que el servidor SSH desde donde hacemos el salto tenga visibilidad al resto de servidores pero desde la interfaz de red interna.
  • Si quieres crear túneles desde Linux, lo puedes hacer desde línea de comando, ya que por defecto Linux tiene cliente y servidor SSH instalado o también puedes usar gSTM (Gnome SSH Tunnel Manager), es un front-end para gestionar tus túneles.
  • Y para Mac OSX, de manera similar a Linux, puedes hacer uso del cliente SSH de línea de comandos, aunque habrá que leer la ayuda del cliente ya que algunos parámetros cambian. Por otro lado, también puedes usar cualquier aplicación/front-end que te facilite crear uno o muchos túneles. Yo solía usar STM (SSH Tunnel Manager).

End.

@Chilcano

Tagged with: , , , , , ,
Posted in Linux, Security
One comment on “Creando túneles SSH a SSH Server, MySQL Server y a LDAP Server desde Windows y con Tunnelier

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Archives
%d bloggers like this: