Monthly Archives: April 2007

You are browsing the site archives by month.

Seguridad en VNC, que falta le hace (iptables & ssh)

VNC es un sistema para poder visualizar escritorios remotos. En ubuntu viene ya de serie, concretamente vino un servidor vnc integrado con gnome. Vnc es un mal sistema para trabajar, hace no mucho comenté una alternativa muy superior, pero según qué casos, vnc sigue siendo un método válido y acertado (mayormente cuando no queremos iniciar una nueva sesión y queremos ver el escritorio del usuario que está logeado actualmente).
 
El grave problema de vnc es su total falta de seguridad. Para paranoicos que no confían ni en ellos mismos, entre los que me incluyo, es algo que no se puede consentir. Hay que solucionar este problema, o dejar de usarlo. Los problemas evidentes de seguridad que se derivan del uso de vnc son claros: ataques de fuerza bruta (esto viene acentuado por el límite en vino de un máximo de 8 caracteres de longitud de la clave), ataques man-in-the-middle y sniffeo de la conexión. Unido a que todo se transmite en claro, es un autentico agujero de seguridad y se puede aprovechar para robo de contraseñas y datos sin conocimiento.
 
¿Qué hacer? Pues gracias a nuestro amigo ssh podemos encriptar todas las comunicaciones (con lo cual, resolvemos los problemas de man in the middle y sniffeo). Usaremos un tunel ssh para conectarnos al servidor vnc remoto. Esto significa que en el ordenador al cual queremos conectarnos, tendrá que estar, además del servidor vnc (vino en nuestro caso), un servidor ssh ($ sudo aptitude install ssh). Ahora desde el cliente, solo tenemos que ejecutar lo siguiente para conectarnos usando el cliente vnc xvncviewer ($ sudo aptitude install xvncviewer):

ssh -C -o CompressionLevel=9 -f -L 5900:localhost:5900 USUARIO@SERVIDOR_REMOTO sleep 15 ; xvncviewer localhost:5900

¿Qué cojones hace todo eso?. Con -C y CompressionLevel decimos que comprima los datos, siendo que vnc genera un tráfico considerable, es una buena opción activar esta opción para ganar algo de rendimiento. Con -f estamos diciendo que se cierre la conexión cuando se deje de usar. Y, aquí viene la magia, con -L estamos creando un tunel desde el puerto 5900 local (el primer número), al puerto 5900 del servidor remoto (lógicamente tienes que cambiar el usuario y el servidor_remoto por los que corresponda). Luego, inmediatamente después de ejecutar el comando ssh (el cual establece el túnel y ejecuta un estúpido sleep 15, dormir 15segundos) ejecutamos el cliente vnc hacia el puerto 5900 de nuestro ordenador cliente, lo cual significa que se va a conectar, mediante el túnel creado, al ordenador remoto. Y entonces tendremos que introducir nuestra contraseña antes de 15 segundos, puesto que sino el sleep terminará y dado que se ejecuta el comando ssh con la opción -f, el túnel se cerraría.
 
Aún nos falta evitar ataques de fuerza bruta. Ya que vamos a usar un túnel ssh para conectarnos al puerto 5900 (el puerto que usa el servidor vnc). No hay ninguna razón para dejar este puerto abierto. Por lo tanto la solución más efectiva será filtrar todo el tráfico entrante a este puerto desde cualquier ordenador remoto. Esto viene a ser dos lineas de iptables

iptables -A INPUT -s 127.0.0.1 -p tcp -m tcp –dport 5900 -j ACCEPT
iptables -A INPUT -p tcp -m tcp –dport 5900 -j DROP

Aceptamos conexiones locales al puerto 5900 tcp, y denegamos el resto. Yo uso un fichero con todas las reglas del cortafuegos poniéndolo en /etc/init.d/cortafuegos y creando luego un enlace para que se ejecute al inicio ($ sudo ln -s /etc/init.d/cortafuegos /etc/rc2.d/S99cortafuegos), aunque posiblemente haya otros métodos mejores. La idea es esa, cerrar el puerto.
 
¿Qué hemos conseguido con todo este tinglado? Hemos eliminado absolutamente toda la falta de seguridad de VNC, y hemos pasado “la pelota” al servidor ssh, nuestras conexiones vnc ahora serán tan seguras como lo son las conexiones al servidor ssh.

Torres adictivas

Bajo ningún concepto pulses este enlace si tienes planeado hacer algo provechoso en los siguientes n minutos. Juego de defensa con torres, donde te van saliendo malos y tienes que evitar que lleguen al otro extremo. Aplica la táctica de las colas de un parque atracciones, pero escoge bien las combinaciones de torres :). Adictivo cuanto menos.