tuneles SSH


¿Qué es un túnel SSH?

En general un túnel o protocolo tunelizado es un protocolo de red que encapsula un protocolo de sesión dentro de otro. Al encapsular un protocolo dentro de otro, el primero considera al segundo como si estuviera en el nivel de enlace de datos.

Esto es una conexión directa por SSH:

El equipo de la izquierda establece una conexión por SSH con el equipo de la derecha. En el escenario más comun, y por el que toman importancia los túneles SSH, habra un firewall o varios entre ellas:

Supongamos que estos firewalls sólo permiten conexiones SSH, y nosotros por cualquier motivo necesitamos acceder a otros servicios, que no son accesibles desde internet por la configuración de los firewalls, o que incluso no estan en el equipo publicado por el firewall, sino que están en otras máquinas que aunque no estan publicadas por el firewall, sí son accesibles desde la publicada. En estos casos es donde cobra importancia el túnel con SSH, puesto que podemos transportar el protocolo tunelizado usando SSH, cosa que en condiciones normales el firewall no permitiría

Para aclarar un poco el escenario propuesto, damos nombre a los equipos:

Aclaraciones sobre este escenario:

  • Ambos firewalls sólo permiten conexiones SSH, en la dirección Cliente->Servidor A
  • El firewall de la derecha sólo ha publicado el servicio SSH del servidor A, aunque éste ejecuta otros servicios (un servidor web en el puerto 80).
  • El servidor B tambien ejecuta otro servidor web, pero en el puerto 8080.
  • El servidor A y B no tienen ningun firewall entre sí, y pertenecen a la misma subred.

Entonces, para alcanzar el servicio web del servidor A, es necesario usar un tunel SSH.

Usando PuTTY, se haría de la siguiente manera:

Arrancamos PuTTY, le ponemos la IP del FW1

Y configuramos un tunel de tipo local (tambien llamado outgoing)

Despues de darle a Add y Connect, con la configuración que estamos poniendo, desde el equipo cliente al conectar a localhost:8080 esa conexión se encapsula dentro de la conexión SSH entre el cliente y el servidor A, y cuando llega al servidor A, se reemplaza el destino como localhost:80, con lo que desde el cliente estamos accediendo al servicio web del servidor A.

En este ejemplo, las conexiones serian:

Siendo las flechas Verdes conexiones HTTP (sin cifrar), y las flechas Azules conexiones SSH (cifradas)

Pero no es necesario que el servicio al que queremos acceder esté en el mismo equipo al que accedemos por SSH. Para acceder al servicio web que hay en el servidor B, la configuración sería:

Esto funcionaría siempre y cuando desde el servidor A se pueda acceder al puerto 8080 del servidor B.

Las conexiones en este ejemplo serían:

Siendo las flechas Verdes conexiones HTTP (sin cifrar), y las flechas Azules conexiones SSH (cifradas)

Hasta ahora sólo hemos probado con los tuneles locales tambien llamados outgoing, pero conviene saber que tambien hay un tipo de tunel remoto, o incoming.

En los tuneles locales/outgoing es un puerto del cliente el que se pone en bind y la conexiones que recibe las encapsula por la conexión SSH a un puerto accesible desde el equipo del otro extremo. Pues bien, en los tuneles remotos/incoming, es un puerto de la maquina remota el que ponemos en bind y la conexiones que reciba se encapsulan en la conexión SSH hasta el cliente, y se redirigen a una dirección/puerto accesible desde el cliente.

La verdad es que este tipo de túneles (incoming) no tienen mucha aplicación práctica, o al menos no se me ocurren ejemplos prácticos, pero es conveniente conocerlos por si surge la necesidad de usarlo.

Conclusiones:

  • Los tuneles SSH son algo muy útil y versátil al trabajar con redes en Linux. Nos puede servir para esquivar reglas de firewall demasiado estrictas.
  • En estos casos si un operador del firewall vigilara las conexiones establecidas, sólo vería una conexión entre el cliente y el servidor A.
  • Tambien nos puede servir para construir servidores proxy para esquivar los filtros de contenido de la empresa, pero eso ya es otra historia …

Enlaces:

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

%d bloggers like this: