Instalación y configuración de Apache Guacamole en Debian 10

Hola, hoy veremos cómo instalar, configurar y usar Apache Guacamole, una herramienta que nos permite conectarnos remotamente por web mediante protocolos cómo SSH, RDP, VNC.

¿Qué es Apache Guacamole?
Apache Guacamole es una herramienta libre y Open-Source que nos permite conectarnos remotamente a un servidor mediante el navegador web sin necesidad de usar un cliente.

Gracias a HTML5, una vez tengamos instalado y configurado Apache Guacamole, tan solo tenemos que conectarnos mediante el navegador web para empezar a trabajar remotamente.

¿Qué es Tomcat?
Apache Guacamole no es una aplicación web autónoma y está compuesta de muchas partes. La aplicación web en realidad está diseñada para ser simple y mínima.

Una de esas partes, y esencial, es Tomcat. Tomcat es una especie de contenedor de ServLets que nos permite ejecutar herramientas desarrolladas con Java Server Page (JSP).

Para poder usar aplicaciones con Tomcat, este las “comprime” en ficheros .war.

¿Qué es un fichero .war?
Un fichero .war es una Aplicación Web que permite a Tomcat acceder a su utilización. El fichero .war en sí no es legible sino que tiene que ser expandido/descomprimido para ser leído.

Instalación de Guacamole-server
Comezamos con la instalación de Apache Guacamole-Server. Primero debemos instalar los paquetes mínimos necesarios, después podrémos elegir qué protocolos usar según nuestras necesidades.

Instalamos los paquetes principales necesarios:

root@guacamole:~# apt install libcairo2-dev libjpeg62-turbo-dev libpng-dev libossp-uuid-dev gcc make tomcat9 tomcat9-admin tomcat9-user

Ahora podemos elegir, según nuestras necesidades, qué paquetes instalar:

Usar Guacenc:

apt install libavcodec-dev libavutil-dev libswscale-dev

Usar el soporte para RDP:

apt install freerdp2-dev

Usar el soporte para SSH:

apt install libpango1.0-dev libssh2-1-dev

Usar el soporte para telnet:

apt install libpango1.0-dev libtelnet-dev

Usar el soporte para VNC y el audio:

apt install libvncserver-dev libpulse-dev

Usar el soporte para OpenSSL (es necesario si usamos el soporte de SSH para manejar las claves públicas y privadas):

apt install libssl-dev

Usar soporte para Ogg Vorbis:

apt install libvorbis-dev

Usar soporte para WebP:

apt install libwebp-dev

En otro post recomiendan esta instalación

apt install build-essential libcairo2-dev libjpeg62-turbo-dev libpng-dev libtool-bin libossp-uuid-dev libvncserver-dev freerdp2-dev libssh2-1-dev libtelnet-dev libwebsockets-dev libpulse-dev libvorbis-dev libwebp-dev libssl-dev libpango1.0-dev libswscale-dev libavcodec-dev libavutil-dev libavformat-dev

En mi caso, instalaré las librerias para usar SSH, Guancec VNC y RDP quedando así el comando con los paquetes a instalar:

root@guacamole:~# apt install libavcodec-dev libavutil-dev libswscale-dev libpango1.0-dev libssh2-1-dev libssl-dev freerdp2-dev libvorbis-dev libpulse-dev

Nos descargamos la última versión de guacamole server y lo descomprimimos

root@guacamole:/usr/src# tar xvzf guacamole-server-1.3.0.tar.gz 
root@guacamole:/usr/src# cd guacamole-server-1.3.0/

Luego lo instalamos

root@guacamole:/usr/src/guacamole-server-1.3.0# ./configure --with-init-dir=/etc/init.d --enable-allow-freerdp-snapshots
root@guacamole:/usr/src/guacamole-server-1.3.0# make
root@guacamole:/usr/src/guacamole-server-1.3.0# make install

Una vez terminada la instalación, actualizamos las librerías instaladas en el sistema:

root@guacamole:/usr/src/guacamole-server-1.3.0# ldconfig

Y habilitamos y reiniciamos los servicios

root@guacamole:/usr/src/guacamole-server-1.3.0# systemctl daemon-reload && systemctl start guacd && systemctl enable guacd && systemctl status guacd

Instalación de Guacamole-client

Procedemos a la instalación del cliente. Este tenemos que instalarlo en el mismo equipo que el servidor ya que será el que nos dé el fichero .war.

Nos descargamos el cliente desde su web de descargas y desempaquetamos el fichero:

root@guacamole:/usr/src# tar xvzf guacamole-client-1.3.0.tar.gz 

Para poder desplegar guacamole client, necesitaremos instalar el paquete correspondiente al comando que deberemos utilizar para crear el .war y el kit de desarrollo de java 11:

root@guacamole:/usr/src# apt install maven openjdk-11-jdk
root@guacamole:/usr/src# export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/

Creamos el fichero .war de guacamole-client:

root@guacamole:/usr/src# cd guacamole-client-1.3.0/
root@guacamole:/usr/src/guacamole-client-1.3.0# mvn package

Ahora copiamos renombrando el nombre del .war en el tomcat9:

root@guacamole:/usr/src/guacamole-client-1.3.0# cp guacamole/target/guacamole-1.3.0.war /var/lib/tomcat9/webapps/guacamole.war

Y reiniciamos tomcat

root@guacamole:~# service tomcat9 restart

Configuración de Guacamole Server

Creamos un directorio de configuración para guacamole, nos vamos ahí y creamos el fichero guacamole.properties

root@guacamole:~# mkdir /etc/guacamole
root@guacamole:~# cd /etc/guacamole
root@guacamole:/etc/guacamole# touch guacamole.properties

Editamos el fichero y agregamos las siguientes lineas:

# Hostname and port of guacamole proxy
guacd-hostname: localhost
guacd-port:     4822

# Auth provider class (authenticates user/pass combination, needed if using the provided login screen)
auth-provider: net.sourceforge.guacamole.net.basic.BasicFileAuthenticationProvider
basic-user-mapping: /etc/guacamole/user-mapping.xml

Ahora creamos un enlace simbólico al directorio creado en /usr/share/tomcat8 :

root@guacamole:/etc/guacamole# mkdir /usr/share/tomcat9/.guacamole
root@guacamole:/etc/guacamole# ln -s guacamole.properties /usr/share/tomcat9/.guacamole/

Continuamos creando el fichero user-mapping.xml en /etc/guacamole con el siguiente contenido:

Dónde:

Authorize tag: define los usuarios que iniciarán sesión en la interfaz web.
Connection tag: define el nombre de la conexión
Protocol tag: define los protocolos que el usuario podrá usar.
Param tag: define hostname del cliente que se conectará, puerto a usar y usuario al que podrá conectarse.
La contraseña del usuario usuario la hemos sacado con:

En la imagen podemos ver la configuración para un ssh, un vnc y un rdp (éste último no funciona y lo de modificar el registro de windows que pongo en un link al pie, tampoco ha funcionado, así que le he metido tightvnc al windows y conecto el guacamole al windows por VNC)

root@guacamole:/etc/guacamole# printf '%s' "" | md5sum

Modificamos permisos, propietario y grupo propietario del fichero user-mapping.xml:

root@guacamole:/etc/guacamole# chmod 600 user-mapping.xml
root@guacamole:/etc/guacamole# chown tomcat:tomcat user-mapping.xml

Reiniciamos tomcat y guacd:

root@guacamole:/etc/guacamole# service tomcat9 restart
root@guacamole:/etc/guacamole# service guacd restart

Ahora a partir de aquí, ya podemos acceder por el interfaz web en el puerto 8080 y acceder con el usuario y contraseña que hayamos indicado. Podemos configurar varios servicios a la vez, esto hará que nos aparezca un menu de inicio donde podemos conectar con las distintas máquinas que tenemos configuradas.

http://ipservidor:8080/guacamole

En mi caso presento el guacamole a través del frontal de nginx, aquí os dejo la configuración que he usado para hacer el reverse proxy:

server {
    listen 80;

    server_name guacamole.capa8.net;
    return 301 https://guaka.capa8.net$request_uri;

    #root /var/www/html/;
    include snippets/certbot.conf;
}

# 2021/03/24 - Apache Guacamole Capa8
server {
        server_name guacamole.capa8.net;

        include snippets/certbot.conf;

        listen 443 ssl;
        ssl_certificate /etc/letsencrypt/live/guacamole.capa8.net/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/guacamole.capa8.net/privkey.pem;
        include /etc/letsencrypt/options-ssl-nginx.conf;
        ssl_trusted_certificate /etc/letsencrypt/live/guacamole.capa8.net/chain.pem;

        location / {
                proxy_pass http://your-ip:8080/guacamole/;
                proxy_buffering off;
                proxy_http_version 1.1;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection $http_connection;
                access_log off;
        }
}

Aquí un par de capturas de pantalla del guacamole que acabo de montar

Dejo algunos links de referencia que creo que os pueden ser útiles:

Instalación y configuración de Apache Guacamole en Debian Stretch (openbinary20)
Set Up Apache Guacamole Remote Desktop on Debian 10 Buster (linuxbabe)
Configuring guacamole (documentación oficial apache guacamole)

proxy http (nginx)
Proxying guacamole (documentación oficial apache guacamole)

RDP
Configuring guacamole (documentación oficial apache guacamole)
Apache Guacamole: How To Install and Configure (fortynorthsecurity)
Make Windows 10/Server 2016 RDP work with Guacamole (mangolassi.it)

One Comment

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *

Aquest lloc utilitza Akismet per reduir els comentaris brossa. Apreneu com es processen les dades dels comentaris.