Tunneling es la capacidad de un protocolo de red para encapsular otro protocolo o sesión. Por ejemplo el protocolo windows SMB para la compartición de archivos es inseguro. Es posible establecer un tunel que rutea todo el tráfico SMB através de una conexión SSH.
Figura: Redirección de una Aplicación Cliente-Servidor con SSH
Se puede hacer tunneling con ssh
usando las opciones
-L
(local) y R
(remoto).
Una llamada de la forma:
ssh -L [bind_address:]port:host:hostport machine
Especifica que el puerto port
en la máquina cliente
debe ser redirigido al puerto hostport
en la máquina host
(donde
quien es host
es evaluado en el lado remoto).
Se crea un proceso en el cliente que escucha en el puerto
port
2.4. Cuando se hace una conexión a ese puerto
se la redirige cifrada hasta machine
y desde alli hasta
el puerto hostport
en la máquina remota host
.
Figura: ssh -L [bind_address:]port:host:hostport machine
Por ejemplo, el comando:
mimaquina:~> ssh -N -L 1048:localhost:80 orion &establece un tunel cifrado entre el puerto 10482.5de
mimaquina
y el 80 de orion
(la referencia a localhost
en 1048:localhost:80 es relativa a orion
). Ahora podemos
navegar mediante una conexión a localhost
por el puerto 1048:
mimaquina:~> lynx localhost:1048/~casiano/pp2/pp20506/index.html
La parte de conexión que transcurre entre orion
y mimaquina
será cifrada.
Otro ejemplo. Supongamos que estamos en un país en el que esta prohibido
visitar google, pero disponemos de acceso a una máquina europa
en otro país
mas liberal. Podemos hacer:
$ ssh -N -L9000:www.google.com:80 europa &
y ahora apuntar el navegador a http://localhost:9000
.
La parte de navegación entre nuestro portátil y europa
va cifrada.
Figura: Tunel creado con ssh -N -L9000:www.google.com:80 europa & seguido de firefox http://localhost:9000
La opción -L
indica redireccionamiento local: el cliente TCP está en la máquina local, junto
con el cliente SSH. La opción va seguida de tres números:
El camino que siguen los datos es como sigue:
Es posible especificar el redireccionamiento de puertos en el fichero de configuración usando la clave LocalForward :
LocalForward 1048 remote:80
Queremos acceder desde la máquina externa micasa
a una máquina dentro de la red corporativa cuyo nombre es millo
.
El paso habitual es conectarse a una máquina bastión cuyo nombre es bastion
y desde alli
hacer ssh
hasta millo
.
La conexión puede establecerse directamente abriendo primero un tunel directo SSH con el comando:
micasa:~> ssh -N -L2001:millo:22 bastionEl comando establece una conexión
ssh
con bastion
e indica que los datos deben ser ruteados (crudos, sin encriptar)
desde bastion
hasta millo
. Además establece un proceso
en micasa
que redirige el puerto local 2001 hacia la conexión ssh
.
A partir de este momento puedo conectarme directamente a la máquina millo
sin mas que conectarme a localhost
en el puerto 2001:
micasa:~$ ssh -p 2001 localhost The authenticity of host '[localhost]:2001 ([127.0.0.1]:2001)' can't be established. RSA key fingerprint is ................................................ Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '[localhost]:2001' (RSA) to the list of known hosts. Last login: Mon May 18 18:48:56 2009 from ............... casiano@millo~$
Figura: ssh -N -L2001:millo:22 bastion seguido de ssh -p 2001 localhost.
La conexión directa entre una máquina externa a la intranet y una máquina de la intranet está prohibida
(lado derecho)
Los pasos que ocurren son los siguientes:
ssh
desde micasa
envía datos al puerto 2001
micasa:~$ ssh -p 2001 localhost
ssh
establecido anteriormente los recoge desde 2001 y los lleva
hasta el puerto 22 del cortafuegos bastion
. El daemon SSH en el
cortafuegos coopera ya que se trata de una
conexión ssh
por el puerto 22
SSH
en bastión
desencripta y redirige los datos
(sin que ocurra un segundo cifrado)
al puerto 22 de la máquina millo
ssh
en millo
recibe los datos, los procesa y envía la correspondiente
respuesta en orden inverso
Obsérvese que la aparición del nombre de host millo
en el comando de conexión
micasa:~> ssh -N -L2001:millo:22 casiano@bastionse resuelve en
bastion
y no en la máquina local.