Una de las aplicaciones que podemos dar a SSH es la creación de túneles seguros, es decir, crear conexiones TCP seguras a través de una canal o red insegura. Ya sabemos que muchas aplicaciones usan protocolos inseguros que envían, por ejemplo, nombre de usuario y contraseña en texto. SSH cifra los datos para que viajen seguros tanto por redes locales como hosts remotos a través de internet. Podemos también, por poner otro ejemplo, crear un canal seguro entre un servidor y un cliente MySQL, leer correo o tunelizar conexiones remotas via VNC.
La primera aplicación que vamos a explicar aquí es el uso de SSH con OpenSSH para tunelizar conexiones con VNC o RealVNC.
Pasos previos.
Tenemos que indicar al sistema que VNC va a realizar conexiones del tipo Loopback. Esto se realiza en el registro de windows. El contenido de un archivo .reg (archivo de registro de win32) para realizar la operación sería el siguiente:
Windows Registry Editor Version x.xx
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Registro de window.
;
; Añadir claves para Loopback
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[HKEY_LOCAL_MACHINE\SOFTWARE\ORL\WinVNC3\Default]
«AllowLoopback»=dword:00000001
Tanto en el servidor como en el cliente se ha de editar el archivo ssh_config y añadir:
GatewayPorts yes
Esquema básico de conexión para VNC sobre SSH
- En 192.168.1.30 insertamos los siguientes comandos ssh
C:\>ssh -2 -C -N -L 5902:localhost:5901 user1@192.168.1.40
- Desde 192.168.1.30 abrimos vncviewer.exe:
vncviewer localhost:2
o
vncviewer localhost:5902
Explicación de los comandos ssh para realizar el túnel:
-2 Usa el protocolo SSH2
-C Realiza compresión de los datos
-N (solo para la versión SSH2) Indicamos a ssh que no se ejecutaran comandos en el servidor, sólo el túnel.
-L Realizar túnel
5902 puerto local (dispaly 2 para vncviewr) para conexión remota. Este es el puerto que indicaremos a wncviewer
localhost Ip servidor, en este caso localhost para realizar el tunel.
5901 puerto remoto donde escuhará VNC (display 1)
user1@192.168.1.40 usuario/IP máquina segura ejecutando SSH.
Otro comando opcional a usar:
-S: que destruye el tunel cuando acabe la conexión. Fija un tiempo de espera o Delay para nueva conexión y si no se realiza se destruye el tunel.
Una vez creado el túnel, tan sólo tendremos que ejecutar VNC Viewer introduciendo en el campo VNC Server:
localhost:5902 ó localhost:2
El túnel SSH también lo podemos realizar con un cliente win32 como PuTTY. Desde este cliente para realizar dicho túnel:
Session:
Specify your connection by host name or Ip address:
Host Name (or Ip address): 192.168.1.40 Port 22 (SSH)
SSH > Tunnels>
Add new forwarded port:
Source port: 5902 (este es el puerto localhost)
Destination: 192.168.1.40:5901
(pulsar Add) y (Open)
Para comprobar que la conexión se realiza a través del canal seguro:
Si cerramos la consola MSDOS donde introducimos las líneas ssh para tunelización o el cliente ssh (PuTTy), debe cerrarse también la conexión VNC.
Tunelización de conexión para HTTP sobre SSH
Esquema pasarela de conexión para HTTP sobre SSH
Para este ejemplo de aplicación de tunelización vamos a suponer que queremos conectar un cliente navegador http a un servidor seguro apache sobre OpenSSH.
Esquema de la conexión:
Este comando lo ejecutamos en 192.168.1.40:
C:\>ssh -2 -C -N -L 8001:192.168.1.30:80 user2@192.168.1.30
Desde 192.168.1.50:
Responde el servidor SSH y Apache en 192.168.1.30