miércoles, 14 de noviembre de 2012

SSH Tunneling

Introducción

Un túnel SSH consiste en un túnel cifrado creado a través de una conexión SSH. Un túnel SSH se puede utilizar para transferir tráfico sin cifrar sobre una red a través de un canal cifrado. Por ejemplo, podemos utilizar un túnel ssh para de manera segura transferir archivos entre un servidor FTP y un cliente FTP, aunque el protocolo en sí no está encriptada. Los túneles SSH también proporcionan un medio para eludir los cortafuegos o filtro que prohíbe ciertos servicios de Internet. Por ejemplo, una organización que bloquea ciertos sitios utilizando su filtro proxy. Pero los usuarios no desean que su tráfico web sea monitoreado o bloqueado por el filtro de proxy organización. Si los usuarios pueden conectarse a un servidor externo SSH, pueden crear un túnel SSH para redirigir un puerto determinado en su máquina local al puerto 80 en el servidor web remoto a través de la conexión SSH.

Para configurar un túnel SSH a un puerto determinado de una máquina el tráfico tiene que ser desviado a un puerto en la otra máquina que será el otro extremo del túnel.

 

Port Forwarding

Los túneles SSH se pueden crear de varias maneras utilizando diferentes tipos de reenvío de puertos o mecanismos. Los puertos pueden ser enviados de tres maneras.
  1. Reenvío de puerto local
  2. Reenvío de puerto remoto
  3. El reenvío de puertos dinámicos
El reenvío de puertos o asignación de puertos es un nombre dado a la técnica combinada de
  1. traducir el número de la dirección y / o el puerto de un paquete a un nuevo destino
  2. posiblemente aceptar tal paquete (s) en un filtro de paquetes (firewall)
  3. reenviar el paquete de acuerdo a la tabla de enrutamiento.
Aquí la primera técnica se utiliza en la creación de un túnel SSH. Cuando una aplicación cliente se conecta al puerto local (punto final local) del túnel SSH y transferir datos de estos datos será enviada al extremo remoto mediante la traducción del host y los valores de puerto a la del extremo remoto del canal.
Así que con eso vamos a ver cómo los túneles SSH se pueden crear utilizando puertos reenviados con un ejemplo.

 

Excavación de túneles con el reenvío de puerto local

Digamos que está siendo bloqueado yahoo.com utilizando un filtro de proxy en la Universidad. Un túnel SSH se puede utilizar para evitar esta restricción. Vamos a nombrar mi máquina en la universidad como "work" y mi máquina de casa como "home". 'home' tiene que tener una dirección IP pública para que esto funcione. Y estoy ejecutando un servidor SSH en mi máquina de casa. El siguiente diagrama ilustra el escenario.

Para crear el túnel SSH después de ejecutar el "work" de la máquina.

ssh -L 9001:yahoo.com:80 home

La 'L' switch indica que un puerto local hacia adelante se deben crear. La sintaxis es la siguiente conmutador.

-L <puerto-local>:<host-remoto>:<puerto-remoto>

Ahora el cliente SSH en "work" se conectará al servidor de SSH corriendo en 'home' (normalmente se ejecuta en el puerto 22) de unión puerto 9001 de "work" para escuchar las solicitudes locales creando así un túnel SSH entre 'home' y 'work' . En 'home' se creará una conexión de "yahoo.com" en el puerto 80. Así que el "work" no tiene por qué saber cómo conectarse a yahoo.com. Sólo el "home" tiene que preocuparse por eso. El canal entre "work" y "home" será encriptada mientras que la conexión entre la "home" y "yahoo.com" será encriptada.

Ahora es posible navegar yahoo.com visitando http://localhost:9001 en el navegador web en el equipo "work". El equipo "home" actuará como una puerta de entrada que aceptará las peticiones de "work" y obtendrá los datos y hará un túnel de vuelta. Así que la sintaxis del comando completo sería como sigue.

ssh -L <puerto-local>:<host-remoto>:<puerto-remoto>:<puerta-de-salida>

La imagen de abajo describe el escenario.


Aquí la conexión de el 'host' a 'yahoo.com' sólo se hace cuando el navegador hace la solicitud no en el momento de instalación del túnel.También es posible especificar un puerto en el ordenador del 'home' en lugar de hacerlo a un host externo. Esto es útil si tuviera que establecer una sesión de VNC entre "work" y "home". Entonces la línea de comandos sería como sigue.

ssh -L 5900:localhost:5900 home (ejecutado desde 'work')

Así que aquí lo que se refiere a localhost? ¿Es el "work" desde la línea de comandos se ejecuta desde el "work"? Resulta que no es así. Como se explicó anteriormente es relativa a la puerta de enlace ("home" en este caso), no la máquina desde donde se inicia el túnel. Así que esto va a establecer una conexión con el puerto 5900 de la "home" donde el equipo cliente VNC escucha.

El túnel creado se puede utilizar para transferir todo tipo de datos no se limitan a sesiones de navegación web. Vamos a asumir que hay otro equipo ("prohibido") a la que tenemos que SSH desde dentro de la Universidad, pero el acceso SSH está siendo bloqueados. Es posible hacer un túnel SSH para una sesión de este host mediante un puerto local hacia adelante. La configuración se vería así.


Como se puede ver ahora los datos transferidos entre 'work' y 'prohibido' son encriptados extremo a extremo. Para ello tenemos que crear un puerto local delantero de la siguiente manera.

ssh -L 9001:prohibido:22 home

Ahora tenemos que crear una sesión SSH al puerto local 9001 de donde la sesión
conseguirá un túnel a 'prohibido' a través de 'home'.

ssh -p 9001 localhost

Invertir excavación de túneles con el reenvío de puerto remoto

Digamos que se necesita para conectarse a un sitio web interno de la universidad de origen. El firewall de la universidad está bloqueando todo el tráfico entrante. ¿Cómo podemos conectar desde "home" a la red interna para que podamos navegar por el sitio interno? Una configuración VPN es un buen candidato aquí. Sin embargo, para este ejemplo vamos a suponer que no disponen de este servicio. Como en el caso anterior, vamos a iniciar el túnel desde "work" que está detrás del firewall. Esto es posible ya que sólo el tráfico entrante y bloquea el tráfico saliente permitido. Sin embargo en vez de un caso anterior el cliente estará ahora en 'home'. En lugar de L- la opción es -R, que especifica un túnel inverso.

ssh -R 9001:intra-site.com:80 home (ejecutado desde 'work')

Una vez ejecutado el cliente SSH en "work" se conectará al servidor de SSH corriendo en casa creando un canal SSH. A continuación, el servidor se unirá el puerto 9001 en la máquina 'home' para escuchar las solicitudes entrantes que posteriormente se enrutan a través del canal creado entre 'home' y 'work'. Ahora es posible navegar por el sitio interno visitando http://localhost:9001 en el navegador desde 'home'. En 'work', entonces se creará una conexión a dentro del sitio y reenvía de nuevo la respuesta a "home" a través del canal SSH.



 

Reenvío de puertos dinámicos

El reenvío de puertos dinámicos permite configurar un puerto local para hacer un túnel de datos para todos los destinos remotos. Sin embargo, para utilizar esta aplicación cliente que se conecta a un puerto local debe enviar su tráfico a través del protocolo SOCKS. En el lado del cliente del túnel un proxy SOCKS sería creado y la aplicación (por ejemplo, navegador) utiliza el protocolo SOCKS para especificar donde el tráfico debe ser enviada cuando sale del otro extremo del túnel ssh.

ssh -D 9001 home (ejecutado desde 'work')

Aquí SSH creará un proxy SOCKS escuchando las conexiones en el puerto local 9001 y al recibir una solicitud encaminaría el tráfico a través de el canal SSH creado entre 'work' y 'home'. Para esto se requiere configurar el navegador para que apunte al servidor proxy SOCKS en el puerto 9001 en localhost.
















fuente en ingles: chamibuddhika

No hay comentarios:

Publicar un comentario