martes, 17 de agosto de 2010

SSH y VNC : tunelizar conexiones

Vamos a usar tuneles SSH para conectar a un servidor VNC remoto.


Presupongo que ya hay un servidor SSH y un servidor VNC en el servidor. El nombre de esta maquina es "servidorremoto", con ip 192.168.1.2 (una máquina en nuestra misma lan)

En el Servidor:
1) Nos aseguramos que en el archivo /etc/ssh/sshd_config tenemos la opción
X11Forwarding yes
2) Suponemos que el servidor VNC está escuchando la pantalla :1, que suele ser 5901 .Para arrancarlo
vncserver :1

3) Suponemos que tenemos ejecutandose el servidor ssh en el servidor:
/etc/init.d/sshd start


En el cliente:

1) Creamos un tunel local Ejecutamos el comando:
ssh -L puertolocal:localhost:puertoremoto
servidorvnc. En nuestro caso podríamos hacer lo siguiente:
ssh -L 65535:localhost:5901 dieguz2@servidorremoto
El primer puerto 65535 es puerto local (en nuestra maquina cliente), el 5901 es el puerto remoto, el del servidor al que nos queremos conectar. Hemos especificado a continuación el usuario (si lo necesitamos) y el servidor (nombre o dirección ip)

Con este comando estamos creando un túnel en nuestra máquina local, de modo que cualquier programa que se conectará a nuestro puerto local 65535 es tunelizado al puerto ssh (el puerto 22) del servidor remoto, el servidor ssh en el remoto mandara la entrada al puerto 5901.

2) Conectar con el cliente VNC. Usamos el comando:
vncviewer localhost::65535
Es decir nos conectamos a nosotros mismos (localhost). Pero como como hemos hecho un túnel en el paso anterior lo que mandemos al puerto local 65535 de nuestra máquina local se estará mandando al puerto 5901 del servidor con el vnc

Esta técnica de tunelización se puede aplicar a otros muchos puertos: ftp, smtp, pop3, http .... En todos los casos usamos un puerto local para conectarnos al puerto de un servidor remoto.

SEGURIDAD

Deberíamos definir reglas en el cortafuegos para lo siguiente:

a) En el cliente no permitir conexiones al puerto 65535 que no sean locales. Cerrar puerto 65535 en el cliente
b) Abrir el puerto 22 en el servidor para permitir conexiones SSH. Abrir el 22 en el servidor
c) En el servidor asegurarnos que el puerto 5901 esta CERRADO para conexiones externas. Dado que las conexiones se hacen a través del puerto 22 en el servidor, y el acceso al puerto 5901 es local (del servidor al servidor) debemos . Cerrar el 5901 en el cortafuegos:

No hay comentarios: