SPipe:

A secure web tunnel method              English

 

Ejemplo concreto #2:

Un túnel VNC entre dos servicios web

 

 

                                                           Rubén Cisneros

<cisneror at tb-solutions.com>

Pablo J. Royo  

<royop at tb-solutions.com>

 

1.      Introducción

 

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.

  1. ¿Qué es 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.

 

  1. ¿Cómo utilizar SPipe con VNC?:

 

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.

 

  1. Configuración de Apache:

 

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

     

      SSLSPipeWait      1

 

      #dirección de el servidor web de Delegación

      SSLSPipeUrl webserver-delegacion.com:443s

      SSLSPipeInputNoSSL

 

      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.

 

  1. Prueba del sistema:

 

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.

 

  1. Referencias:

 

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.