Instalando Apache Guacamole

En este post vamos a ver la instalación de Apache Guacamole, una interesante herramienta basada en software libre que nos permitirá conectar a equipos de una manera segura, gracias a HTML5 y HTTPS podremos acceder a equipos con RDP, VNC, SSH o TELNET.

Lo dicho, en este post veremos lo que es la instalación de Apache Guacamole, que gracias a su interfaz web permitirá a los usuarios acceder a sus equipos. La idea es utilizar Guacamole como gateway, ya que únicamente publicando el servicio HTTPS podrá encapsular los protocolos anteriormente comentados, los usuarios podrán trabajar de igual forma mediante HTML5 integrando su equipo remoto en el navegador. Al final del post veremos cómo securizar un poco más el entorno mediante un proxy inverso. Es cierto que con Apache Guacamole a parte de permitir que se conecten a escritorios, podremos publicar aplicaciones, así como integrar la autenticación de Windows o meter un 2FA (doble factor de autenticación).

 

En este post estoy trabajando con un Ubuntu 20.04, comenzamos pues con la instalación en una máquina actualizada y lista para empezar! Como siempre, empezamos con las dependencias, las instamos lo primero:

sudo apt-get install libcairo2-dev libjpeg-turbo8-dev libjpeg-dev libpng-dev libtool-bin libossp-uuid-dev make maven  -y
sudo apt-get install libavcodec-dev libavformat-dev libavutil-dev libswscale-dev freerdp2-dev libpango1.0-dev libssh2-1-dev libtelnet-dev libvncserver-dev libwebsockets-dev libpulse-dev -y

 

Tenemos que instalar Tomcat:

sudo apt install tomcat9 tomcat9-admin tomcat9-common tomcat9-user -y

 

Es hora de descargar Guacamole, empezamos con el componente Servidor, vemos qué versión es la más reciente, nos la descargamos, compilamos y lo instalamos:

tar -xzf guacamole-server-1.2.0.tar.gz
cd guacamole-server-1.2.0/
./configure --with-init-dir=/etc/init.d<br />make<br />sudo make install

 

Ejecutamos ldconfig para crear vínculos y caché, además de abrir en el firewall el puerto 8080tcp:

sudo ldconfig
sudo ufw allow 8080/tcp

 

A continuación instalaremos el Cliente de Guacamole que descargaremos de la misma web, así como el fichero WAR. Los descomprimimos y procedemos a su instalación:

cd ..
tar -xzf guacamole-client-1.2.0.tar.gz
cd guacamole-client-1.2.0/
mvn package
sudo mkdir /etc/guacamole
sudo cp guacamole-1.2.0.war /etc/guacamole
sudo ln -s /etc/guacamole/guacamole.war /var/lib/tomcat9/webapps/

 

Comenzamos ahora lo que es la configuración, creamos el directorio para las extensiones y librerías de Guacamole, y añadimos la siguiente variable del entorno:

sudo mkdir /etc/guacamole/{extensions,lib}
sudo echo "GUACAMOLE_HOME=/etc/guacamole" >> /etc/default/tomcat9

 

Creamos el fichero de configuración de Guacamoles (/etc/guacamole/guacamole.properties) para que conecte con guacd y añadimos:

guacd-hostname: localhost
guacd-port:     4822
user-mapping:   /etc/guacamole/user-mapping.xml
auth-provider:  net.sourceforge.guacamole.net.basic.BasicFileAuthenticationProvider

 

Enlazamos el directorio de configuración de Guacamole al servlet de Tomcat:

sudo ln -s /etc/guacamole /usr/share/tomcat9/.guacamole

 

Antes de seguir, necesitamos generar el hash MD5 para la contraseña que vamos a querer usar, fácilmente lo sacaremos ejecutando:

echo -n CONTRASEÑA | openssl md5
    (stdin)= d287200e83ee04f67294de90dd72f9c6

 

Ya podremos editar el fichero donde definiremos los accesos a Apache Guacamole, esto es, si usamos usuarios locales los podremos definir aquí así como los recursos que les presentamos, ejemplo de ‘/etc/guacamole/user-mapping.xml’ que tendremos que desarrollar:

<user-mapping>
    <!-- Per-user authentication and config information -->
    <!-- A user using md5 to hash the password
         guacadmin user and its md5 hashed password below is used to
             login to Guacamole Web UI-->
    <authorize
            username="guacadmin"
            password="d287200e83ee04f67294de90dd72f9c6"
            encoding="md5">
        <!-- First authorized Remote connection -->
        <connection name="Servidor Centos">
            <protocol>ssh</protocol>
            <param name="hostname">192.168.1.46</param>
            <param name="port">22</param>
        </connection>
        <!-- Second authorized remote connection -->
        <connection name="Windows 2019">
            <protocol>rdp</protocol>
            <param name="hostname">192.168.1.100</param>
            <param name="port">3389</param>
            <param name="username">administrador</param>
            <param name="ignore-cert">true</param>
        </connection>
    </authorize>
</user-mapping>

 

Y, por cierto, que tras hacer toda la instalación y cambios de configuración será fundamental reiniciar los servicios, así como habilitarlos para que inicien de manera automática con el sistema:

sudo systemctl restart tomcat9
sudo systemctl enable tomcat9
sudo systemctl restart guacd
sudo systemctl enable guacd

 

¡Y es hora de probarlo! ¿no?

Accederemos mediante un navegador web, apuntando a http://DIRECCION_IP_GUACAMOLE:8080/guacamole y según el usuario y contraseña definidas en el fichero anterior.

 

Esta sería la interfaz la primera vez que la viésemos, donde tendremos los recursos que nos hayan publicado. Y si nos hemos conectado reciéntemente a algún equipo lo tendremos arriba de un vistazo rápido.

 

 

Y al pinchar en cualquier conexión nos abrirá integrado en el navegador la conexión RDP, o VNC, o SSH, o Telnet… Os dejo este enlace con todo el manual y guia oficial para poder configurarlo a vuestra necesidad, una app, auth con LDAP, OTP/Token…

Una pasada, ¿no? lo malo por ahora la seguridad ya que esto es HTTP, así que al menos habrá que meterle un proxy inverso, y también que vaya por SSL…

 

Habilitando Reverse Proxy con Apache

Bueno, pues si queremos darle una capa más de seguridad, deberemos instalar apache en otra máquina (o en la misma…) para que nos haga de proxy inverso:

sudo apt-get install apache2

 

Habilitamos los siguientes módulos de apache:

sudo a2ensite default-ssl
sudo a2enmod ssl
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_balancer
sudo a2enmod lbmethod_byrequests
sudo systemctl restart apache2

 

Y editamos el fichero predeterminado de SSL (/etc/apache2/sites-available/default-ssl.conf), al que tendremos que indicar nuestros certificados del sitio, así como la URL de nuestro Guacamole, quedando algo como:

<IfModule mod_ssl.c>
        <VirtualHost _default_:443>
                ServerAdmin webmaster@localhost
                DocumentRoot /var/www/html
                ErrorLog ${APACHE_LOG_DIR}/error.log
                CustomLog ${APACHE_LOG_DIR}/access.log combined
                SSLEngine on
                SSLCertificateFile      /etc/apache2/ssl/bujarra.crt
                SSLCertificateKeyFile   /etc/apache2/ssl/bujarra.key
                SSLProxyEngine on
                SSLProxyVerify none
                SSLProxyCheckPeerCN off
                SSLProxyCheckPeerName off
                SSLProxyCheckPeerExpire off
                <Location /guacamole/>
                    Order allow,deny
                    Allow from all
                    ProxyPass http://DIRECCION_IP_GUACAMOLE:8080/guacamole/ flushpackets=on
                    ProxyPassReverse http://DIRECCION_IP_GUACAMOLE:8080/guacamole/
                </Location>
                SSLCertificateFile      /etc/ssl/certs/ssl-cert-snakeoil.pem
                SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
                <FilesMatch "\.(cgi|shtml|phtml|php)$">
                                SSLOptions +StdEnvVars
                </FilesMatch>
                <Directory /usr/lib/cgi-bin>
                                SSLOptions +StdEnvVars
                </Directory>
        </VirtualHost>
</IfModule>

 

Reiniciamos apache e indicamos que inicie también cada vez que arranque la máquina con:

sudo systemctl restart apache2
sudo systemctl enable apache2

 

¡Y no quedaría más que probar! Abrimos un navegador contra: https://DIRECCION_IP_PROXY/guacamole/ y debería estar algo más segura nuestro despliegue.

Como siempre esperando que os puedan resultar interesantes, pero este tipo de soluciones vienen muy bien a las pequeñas empresas, micro pymes, evitando que puedan publicar RDP a internet directamente. Con este tipo de soluciones abrimos un sólo puerto a Internet, el 443tcp, el resto cerradito. Fácil y rápido, en un momento tenemos una herramienta para permitir el teletrabajo en empresas sin recursos, centros de estudios, colegios…

Un abrazo!

 

Últimas entradas de Héctor Herrero (ver todo)