Guacamole : l'outil idéal pour établir des sessions RDP, SSH et VNC
Deprecated
Avec l'arrivée de GoTeleport (Bastion SSH/K8S via RBAC, recording de session...), je trouve l'usage de Guacamole démodé.
Installation sous Debian
Explications
L'application Guacamole se compose de 3 parties :
- Guacamole server qui écoute sur le port TCP 4722 sur la boucle locale
- Tomcat server qui met à disposition et interprète les servlets Java sur le port TCP 8080
- fournis par Guacamole client (le fichier guacamole.war qui peut être construit à partir des sources du client ou directement téléchargé)
Si on est réfractaire au Java, passez votre chemin.
Installation des dépendances
Il faut posséder une Debian à jour. Comme il n'y a plus de paquets officiels, on doit le compiler à la main.
Package Name
Certains noms de dépendances changent selon Ubuntu ou Debian, consulter la documentation
Installer Tomcat 9/10 comme décrit dans cette page.
sudo apt install build-essential tomcat10 libjpeg62-turbo-dev libjpeg62-dev libpng-dev libtool-bin uuid-dev libossp-uuid-dev libpulse-dev libcairo2-dev libssl-dev libvncserver-dev libvorbis-dev libtelnet-dev libssh2-1-dev libpango1.0-dev freerdp2-dev libwebsockets-dev libwebp-dev
Info
Il est possible d'obtenir la dernière dernière version en utilisant le repository Git
wget --content-disposition -O - https://apache.org/dyn/closer.cgi?action=download&filename=guacamole/1.5.2/source/guacamole-client-1.5.2.tar.gz | tar xfvz -
wget --content-disposition -O - https://apache.org/dyn/closer.cgi?action=download&filename=guacamole/1.5.2/source/guacamole-server-1.5.2.tar.gz | tar xfvz -
wget -O guacamole-1.5.2.war "https://apache.org/dyn/closer.cgi?action=download&filename=guacamole/1.5.2/binary/guacamole-1.5.2.war"
Compilation et installation du serveur
Prévoir un fix concernant les bibliothèques FreeRDP (points 7, 8, 9).
cd guacamole-server*
./configure --with-systemd-dir=/etc/systemd/system
make -j$(nproc)
sudo make install
sudo mkdir /usr/lib/x86_64-linux-gnu/freerdp/
sudo ln -s /usr/local/lib/freerdp/*.so /usr/lib/x86_64-linux-gnu/freerdp/
sudo ldconfig
Installation du client
On peut en lieu et place utiliser maven à partir des sources du client pour compiler le fichier war.
Installation des fichiers de configuration
Warning
Les droits de l'utilisateur tomcat10 sur le fichier user-mapping.xml sont indispensables.
sudo mkdir {/etc/guacamole,/usr/share/tomcat10/.guacamole}
sudo cp guacamole-client-1.5.2/guacamole/doc/example/{guacamole.properties,user-mapping.xml} /etc/guacamole/
sudo ln -s /etc/guacamole/guacamole.properties /usr/share/tomcat10/.guacamole/guacamole.properties
sudo chown tomcat10 /etc/guacamole/user-mapping.xml
sudo chmod 600 /etc/guacamole/user-mapping.xml
Configuration
Warning
Éditer ou vérifier guacamole.properties avant de redémarrer les services.
# 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)
# Le chemin vers user-mapping.xml doit être un chemin complet et non relatif !
auth-provider: net.sourceforge.guacamole.net.basic.BasicFileAuthenticationProvider
basic-user-mapping: /etc/guacamole/user-mapping.xml
Pour le fichier user-mapping.xml, référez-vous à la documentation officielle.
Démarrage
L'url http://fqdn:8080/guacamole doit permettre d'accéder à l'application.
Danger
À ce stade, tout transite en clair sur le réseau. Mettre en place le reverse proxy TLS avant d'exposer Guacamole.
Reverse proxy avec nginx
Le reverse proxy en question — la partie TLS est indispensable.
location / {
proxy_pass http://localhost:8080/guacamole;
proxy_buffering off;
proxy_cookie_path /guacamole/ /; #indispensable pour se connecter
proxy_http_version 1.1;
include conf.d/proxy.conf;
}
Accès et utilisation
Rendez-vous sur la page https://fqdn/ et insérer le nom d'utilisateur et le mot de passe (préférer le hash MD5, c'est mieux que rien). Il est également possible de gérer de façon avancée les utilisateurs avec mysql ou pgsql.