Rubén
Cisneros
<cisneror at tb-solutions.com>
Pablo J. Royo
<royop at tb-solutions.com>
En este documento se pretende adaptar el uso de del parche SPipe en una situación muy concreta, utilizando un cliente y un servidor VNC (Virtual Network Computing). Aunque también hemos realizado pruebas con Microsoft Terminal Server con resultados satisfactorios, aquí no se muestra como utilizarlo, pero su uso es bien fácil, y muy similar a VNC.
Siguiendo los pasos que se indican a continuación se puede crear un túnel seguro de comunicación para mostrar el escritorio virtual de otra máquina, utilizando VNC.
VNC o Virtual Network Computing es un software remoto de control que permite ver el escritorio de una máquina remota e interactuar con él, utilizando un simple programa cliente.
En la máquina destino debe de estar lanzando el programa servidor escuchando peticiones de conexión.
Para el uso de VNC a través de un servidor web Apache con SPipe, se requiere una estructura como la que se muestra en el siguiente gráfico:
El funcionamiento es sencillo, el cliente de VNC (VNC viewer) se conecta a un servidor web con el parche SPipe (Apache Empresa). Dicho servidor web se conecta a otro servidor web (Apache Delegación) utilizando una conexión segura con SSL. Y es este último servidor el que se conecta al servicio VNC server remoto.
Una vez se ha realizado la conexión, entre ambos servicios web emplean una conexión SSL segura, mientras que el cliente con el primer servicio web, y el servidor de VNC con el segundo servicio utilizan una comunicación en plano.
Vamos a explicar los pasos necesarios para configurar, ambos servicios web para que actúen de la forma esperada.
Una vez hallamos aplicado el parche de SPipe al código de mod_ssl y hallamos reiniciado Apache con el parche instalado, debemos modificar el fichero de configuración para que se adapte a nuestras necesidades.
El fichero de configuración del primer servidor web (Apache empresa) deberá tener un VirtualHost que esté escuchando en el puerto que utiliza el protocolo de VNC, el puerto 5900. La configuración de dicho servicio web sería la siguiente:
<VirtualHost *:5900>
ServerAdmin webmaster@webserver-empresa.com
DocumentRoot "htdocs/webserver-empresa.com/"
ServerName webserver-empresa.com
ErrorLog
logs/ssl/error_log
CustomLog logs/ssl/access_log common
SSLEngine on
#dirección de el servidor web de
Delegación
SSLSPipeUrl webserver-delegacion.com:443s
SSLCertificateFile
conf/certs/webserver-empresa. crt
SSLCertificateKeyFile
conf/certs/webserver-empresa.key
</VirtualHost>
Como podemos comprobar, dicho VirtualHost tiene además de los datos de
configuración habituales, las directivas siguientes:
SSLSPipeWait 1
Que como se ha explicado en otros apartados
es el tiempo que se va a esperar el envío de algún dato por parte del cliente.
Como se puede ver en la documentación de SPipe, esta directiva es experimental.
SSLSPipeUrl
webserver-delegacion.com:443s
Esta directiva indica a qué servidor se conectará y redireccionará los
datos cifrándolos el servidor web Apache. Como se puede ver se indica con una
‘s’ que los datos irán cifrados al servidor destino.
SSLSPipeInputNoSSL
Por último, la directiva SSLSPipeInputNoSSL,
indica al servicio web que los datos de entrada que llegan desde el cliente
vienen en plano, es decir, sin codificar con SSL. Por lo tanto, será el
servicio web el que se encargará de leer estos datos en plano, codificarlos con
SSL y reenviarlos al servidor que se le haya indicado en la directiva anterior.
Nos fijamos ahora en la configuración del
segundo servicio web, el de la Delegación. Este debe ser configurado para
hablar SSL con el otro servidor web y decodificarlo, enviándolo en plano al
servidor VNC destino.
Para la configuración de este servicio web
se requiere el siguiente campo VirtualHost dentro del fichero httpd.conf de
configuración del Apache:
<VirtualHost *:443>
ServerAdmin webmaster@webserver-delegacion.com
DocumentRoot
htdocs/webserver-delegacion.com
ServerName webserver-delegacion.com
ErrorLog logs/ssl/error_log
CustomLog logs/ssl/access_log common
SSLEngine on
SSLSPipeWait 1
#
Host en el que está el servidor VNC
SSLSPipeUrl host-VNCserver:5900
SSLCertificateFile
conf/certs/webserver-delegacion.crt
SSLCertificateKeyFile
conf/certs/webserver-delegacion.key
</VirtualHost>
Vemos como en este caso no se requiere la
directiva SSLSPipeInputNoSSL, puesto que la entrada al servicio web viene
codificada con SSL y no en plano.
También aparece la directiva SSLSPipeWait,
que no es necesaria como ya hemos comentado, puesto que es experimental.
Lo fundamental de esta codificación es la
directiva SSLSPipeUrl que indica cuál es el servidor VNC destino al que hay que
conectarse. En este caso el servidor VNC está en la máquina host-VNCserver, y
como VNC utiliza, por definición, el puerto 5900 para escuchar nuevas
conexiones, el puerto al que redirigimos la conexión debe ser éste.
Una vez hechas estas configuraciones ya sólo nos queda probar el
correcto funcionamiento del sistema VNC seguro a través de 2 servicios web.
Para probar nuestro sistema debemos en
primer lugar instalar el servidor VNC en la máquina host-VNCserver, para que
esté esperando nuevas conexiones. Para esto entramos en:
Inicio > Programas > RealVNC >
VNCserver
Y se lanzará una tarea en segundo plano, en
la barra de tareas de Windows, lo que se marcará con un icono:
Una vez hecho esto, lanzamos el cliente
VNCviewer desde cualquier máquina que tenga acceso al servidor web de la
empresa, para esto:
Inicio > Programas > RealVNC >
VNCviewer
Aparece una ventana con la siguiente forma:
En esta ventana debemos de conectarnos al servidor web de la empresa,
webserver-empresa.com al display en el que esté preparado el servidor VNC
destino. Por defecto el servidor web destino VNC está preparado en el display
0, si el servidor se lanza desde Windows. En caso de que el servidor se ejecute
desde Linux o Unix, a la hora de lanzarlo indica cuál es el display que está
disponible.
En el ejemplo en que estamos el servidor VNC destino está lanzado en el diplay 0, o display por defecto, por ello indicamos que nos conectamos al servidor web de la empresa y al display 0 del servidor VNC final:
Si pulsamos OK en esta ventana se realizará la conexión a traves de los
servicios web, utilizando SSL.
Aquí
tenemos la página web de Real VNC que hemos utilizado:
http://www.realvnc.com: página web de Real VNC, aquí podemos descargar tanto el servidor y el cliente de VNC para Windows y Linux, así como el código fuente para compilarlos.