Installation de Guacamole 1.5.4 | Debian 12

Ce guide vous guidera à travers les étapes que vous pouvez suivre pour installer Guacamole sur Debian 12.
Apache Guacamole est une passerelle de bureau à distance basée sur le Web HTML5 sans client qui fournit un accès à distance aux serveurs et aux bureaux via un navigateur Web.
Il prend en charge les protocoles standards tels que VNC, RDP et SSH

Sommaire : 

Installer Guacamole sur Debian 12

Le guacamole est composé de deux parties ;

guacamole-server : qui fournit le proxy guacd et tous les composants natifs côté serveur requis par Guacamole pour se connecter aux postes de travail distants.

guacamole-client : qui fournit au client d'être servi par le conteneur de servlet qui est généralement Tomcat.

Vous devez installer ces deux composants pour configurer le client de bureau à distance Web Apache Guacamole.

Exécuter la mise à jour du système

Assurez-vous que le cache de votre package système est à jour ;

apt update

Installer les dépendances requises

Pour installer guacamole-server, vous devez le construire à partir des sources.

Cela nécessite donc que vous installiez les outils de construction requis avant de pouvoir commencer à créer le composant guacamole-server ;

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

Téléchargez Guacamole depuis les sources

Pour installer Guacamole sur Debian 12, nous allons le construire à partir du code source. Téléchargez donc la dernière archive tar de l'archive source à partir de la page des versions de Guacamole. Guacamole releases page.

wget https://downloads.apache.org/guacamole/1.5.4/source/guacamole-server-1.5.4.tar.gz

Une fois le téléchargement terminé, extrayez l’archive tar source.

tar xzf guacamole-server-1.5.4.tar.gz

Installez Apache Guacamole sur Debian 12


Accédez au répertoire du code source du serveur guacamole ;

cd guacamole-server-1.5.4

L'utilitaire guacenc est utilisé pour traduire les enregistrements d'écran en vidéo, dépend de FFmpeg. Il s'agit d'une dépendance facultative, vous pouvez donc choisir de la désactiver.

Par conséquent, réexécutez la commande configure avec l'option --disable-guacenc ;

./configure --with-systemd-dir=/etc/systemd/system/ --disable-guacenc

Après cela, exécutez à nouveau la commande

make

installez Guacamole 

make install

Ensuite, exécutez la commande

ldconfig

pour créer les liens et le cache nécessaires vers les bibliothèques partagées les plus récentes trouvées dans le répertoire du serveur guacamole. ldconfig

Running Guacamole-Server on Debian 12

Rechargez les fichiers de configuration systemd, démarrez et activez guacd (Démon Guacamole) pour qu'il s'exécute au démarrage après l'installation.

systemctl daemon-reload
systemctl enable --now guacd

Vérifiez la status

systemctl status guacd
● guacd.service - Guacamole Server
     Loaded: loaded (/etc/systemd/system/guacd.service; enabled; preset: enabled)
     Active: active (running) since Thu 2024-01-11 11:01:21 EST; 6s ago
       Docs: man:guacd(8)
   Main PID: 22109 (guacd)
      Tasks: 1 (limit: 1099)
     Memory: 10.2M
        CPU: 10ms
     CGroup: /system.slice/guacd.service
             └─22109 /usr/local/sbin/guacd -f

Jan 11 11:01:21 debian systemd[1]: Started guacd.service - Guacamole Server.
Jan 11 11:01:21 debian guacd[22109]: Guacamole proxy daemon (guacd) version 1.5.4 started
Jan 11 11:01:21 debian guacd[22109]: guacd[22109]: INFO:        Guacamole proxy daemon (guacd) version 1.5.4 started
Jan 11 11:01:21 debian guacd[22109]: guacd[22109]: INFO:        Listening on host ::1, port 4822
Jan 11 11:01:21 debian guacd[22109]: Listening on host ::1, port 4822

Si vous l'avez remarqué, guacd écoute sur l'adresse IPv6 localhost (écoute sur l'hôte :: 1, port 4822). C'est probablement parce que votre fichier hosts ressemble à ;

cat /etc/hosts
127.0.0.1	localhost
127.0.1.1	debian

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Voir la ligne ci-dessus ! Si vous procédez ainsi, vous finirez par ne pas pouvoir vous connecter à vos points finaux distants avec une telle erreur ;

tomcat9[28149]: 15:47:52.938 [http-nio-8080-exec-5] ERROR o.a.g.s.GuacamoleHTTPTunnelServlet - HTTP tunnel request failed: java.net.ConnectException: Connection refused

Ainsi, commentez la ligne IPv6 sur le fichier hosts ;

sed -i '/^::1/s/^/#/g' /etc/hosts

Redemarrez le serveur Guacamole

systemctl restart guacd

Confirmez le status

systemctl status guacd
● guacd.service - Guacamole Server
     Loaded: loaded (/etc/systemd/system/guacd.service; enabled; preset: enabled)
     Active: active (running) since Thu 2024-01-11 11:02:33 EST; 3s ago
       Docs: man:guacd(8)
   Main PID: 22172 (guacd)
      Tasks: 1 (limit: 1099)
     Memory: 10.0M
        CPU: 9ms
     CGroup: /system.slice/guacd.service
             └─22172 /usr/local/sbin/guacd -f

Jan 11 11:02:33 debian systemd[1]: Started guacd.service - Guacamole Server.
Jan 11 11:02:33 debian guacd[22172]: Guacamole proxy daemon (guacd) version 1.5.4 started
Jan 11 11:02:33 debian guacd[22172]: guacd[22172]: INFO:        Guacamole proxy daemon (guacd) version 1.5.4 started
Jan 11 11:02:33 debian guacd[22172]: Listening on host 127.0.0.1, port 4822
Jan 11 11:02:33 debian guacd[22172]: guacd[22172]: INFO:        Listening on host 127.0.0.1, port 4822
ss -altnp | grep :4822
LISTEN 0      5          127.0.0.1:4822      0.0.0.0:*    users:(("guacd",pid=22172,fd=4))

 

Installer le servlet Tomcat

Apache Tomcat est utilisé pour servir le contenu du client guacamole aux utilisateurs qui se connectent au serveur guacamole via le navigateur Web.

Pour installer Tomcat 9 sur Debian 12, vous pouvez le créer à partir d'une archive ou l'installer à partir des dépôts Debian 11.

En effet, Debian 12 est livré avec Tomcat 10 par défaut. Guacamole ne prend pas encore en charge Tomcat 10.

Installez Tomcat 9 sur Debian 12 à partir du dépôt Debian 11

Installez temporairement les dépôts Debian 11 comme suit :

echo "deb http://deb.debian.org/debian/ bullseye main" > /etc/apt/sources.list.d/bullseye.list

Installez Tomcat 9

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

Supprimez le dépot Debian 11

sed -i 's/^/#/' /etc/apt/sources.list.d/bullseye.list

Tomcat9 est démarré et activé pour s'exécuter au démarrage du système lors de l'installation.

Vérifiez l'état en exécutant la commande ci-dessous ;

systemctl status tomcat9.service
● tomcat9.service - Apache Tomcat 9 Web Application Server
     Loaded: loaded (/lib/systemd/system/tomcat9.service; enabled; preset: enabled)
     Active: active (running) since Thu 2024-01-11 11:11:34 EST; 34s ago
       Docs: https://tomcat.apache.org/tomcat-9.0-doc/index.html
    Process: 24423 ExecStartPre=/usr/libexec/tomcat9/tomcat-update-policy.sh (code=exited, status=0/SUCCESS)
   Main PID: 24427 (java)
      Tasks: 30 (limit: 1099)
     Memory: 107.3M
        CPU: 3.672s
     CGroup: /system.slice/tomcat9.service
             └─24427 /usr/lib/jvm/default-java/bin/java -Djava.util.logging.config.file=/var/lib/tomcat9/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager ->

Jan 11 11:11:35 debian tomcat9[24427]: Deployment of deployment descriptor [/etc/tomcat9/Catalina/localhost/manager.xml] has finished in [569] ms
Jan 11 11:11:35 debian tomcat9[24427]: Deploying deployment descriptor [/etc/tomcat9/Catalina/localhost/host-manager.xml]
Jan 11 11:11:35 debian tomcat9[24427]: The path attribute with value [/host-manager] in deployment descriptor [/etc/tomcat9/Catalina/localhost/host-manager.xml] has been ignored
Jan 11 11:11:36 debian tomcat9[24427]: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs w>
Jan 11 11:11:36 debian tomcat9[24427]: Deployment of deployment descriptor [/etc/tomcat9/Catalina/localhost/host-manager.xml] has finished in [306] ms
Jan 11 11:11:36 debian tomcat9[24427]: Deploying web application directory [/var/lib/tomcat9/webapps/ROOT]
Jan 11 11:11:36 debian tomcat9[24427]: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs w>
Jan 11 11:11:36 debian tomcat9[24427]: Deployment of web application directory [/var/lib/tomcat9/webapps/ROOT] has finished in [315] ms
Jan 11 11:11:36 debian tomcat9[24427]: Starting ProtocolHandler ["http-nio-8080"]
Jan 11 11:11:36 debian tomcat9[24427]: Server startup in [1220] milliseconds

Apache Tomcat écoute sur le port 8080/tcp par defaut:

ss -altnp | grep :8080
LISTEN 0      100                *:8080            *:*    users:(("java",pid=24427,fd=37))

Installer le client Guacamole sur Debian 12

guacamole-client contient une application Web qui servira le client HTML5 Guacamole aux utilisateurs qui se connectent à votre serveur.

L'application Web se connectera ensuite à guacd au nom des utilisateurs connectés afin de leur servir tout bureau distant auquel ils sont autorisés à accéder.

Téléchargez et installez le binaire du client Guacamole

Créer le répertoire de configuration Guacamole ;

mkdir /etc/guacamole

Téléchargez le client Guacamole à partir de la page des versions de Guacamole pour la dernière version respective (v1.5.4 au moment d'écrire ces lignes) et stockez-le dans le répertoire de configuration créé ci-dessus.

Pour télécharger la version actuelle, v1.5.4 au moment d'écrire ces lignes, exécutez simplement la commande ci-dessous ;

wget https://downloads.apache.org/guacamole/1.5.4/binary/guacamole-1.5.4.war -O /etc/guacamole/guacamole.war

Créez un lien symbolique du client guacamole vers le répertoire des applications Web Tomcat comme indiqué ci-dessous ;

ln -s /etc/guacamole/guacamole.war /var/lib/tomcat9/webapps/

Redémarrez Tomcat et le serveur Guacamole pour déployer la nouvelle application Web ;

systemctl restart tomcat9 guacd

Configuration d' Apache Guacamole:

Guacamole possède deux fichiers de configuration principaux ;

/etc/guacamole qui est référencé par la variable d'environnement GUACAMOLE_HOME

/etc/guacamole/guacamole.properties qui est le principal fichier de configuration utilisé par Guacamole et ses extensions.

Il existe également des extensions de guacamole et des configurations de bibliothèques.

Vous devez créer les répertoires pour ces configurations ;

mkdir /etc/guacamole/{extensions,lib}

Définissez la variable d'environnement du répertoire personnel guacamole et ajoutez-la au fichier de configuration /etc/default/tomcat9.

echo "GUACAMOLE_HOME=/etc/guacamole" >> /etc/default/tomcat9

Configurer les connexions au serveur Guacamole

Pour définir comment Guacamole se connecte à guacd, créez le fichier guacamole.properties sous le répertoire /etc/guacamole avec le contenu suivant.

cat > /etc/guacamole/guacamole.properties << EOL
guacd-hostname: 127.0.0.1
guacd-port: 4822
user-mapping:   /etc/guacamole/user-mapping.xml
auth-provider:  net.sourceforge.guacamole.net.basic.BasicFileAuthenticationProvider
EOL

La configuration ci-dessus est expliquée ci-dessous :

guacd-hostname : localhost : cette ligne définit le nom d'hôte du démon Guacamole (guacd) sur « localhost ». Le démon Guacamole est responsable de la gestion des connexions de bureau à distance.

guacd-port : 4822 : Cette ligne spécifie le numéro de port (4822) sur lequel le démon Guacamole (guacd) écoute les connexions.

user-mapping : /etc/guacamole/user-mapping.xml : Cette ligne spécifie le chemin d'accès au fichier de configuration de mappage utilisateur (user-mapping.xml). Ce fichier définit la manière dont les utilisateurs sont authentifiés et les connexions de bureau à distance auxquelles ils peuvent accéder.

auth-provider : net.sourceforge.guacamole.net.basic.BasicFileAuthenticationProvider : Cette ligne définit le fournisseur d'authentification à utiliser pour l'authentification des utilisateurs. Dans ce cas,

BasicFileAuthenticationProvider est utilisé, ce qui signifie que l'authentification sera basée sur les informations d'identification de l'utilisateur définies dans le fichier user-mapping.xml.

Ensuite, liez le répertoire des configurations Guacamole au répertoire du servlet Tomcat comme indiqué ci-dessous.

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

Configurer la méthode d'authentification Guacamole

Il existe différentes méthodes d'authentification prises en charge par Guacamole ;

  • Reading credentials from XML file (default).
  • Database authentication
  • LDAP authentication
  • Retrieving secrets from a vault
  • Duo two-factor authentication
  • TOTP two-factor authentication
  • HTTP header authentication
  • Encrypted JSON authentication
  • CAS Authentication
  • OpenID Connect Authentication
  • SAML Authentication
  • RADIUS Authentication

La méthode d'authentification par défaut de Guacamole lit tous les utilisateurs et connexions à partir d'un seul fichier appelé user-mapping.xml.

Nous avons activé l'authentification de base dans la configuration ci-dessus.

Dans ce fichier, vous devez définir les utilisateurs autorisés à accéder à l'interface Web de Guacamole, les serveurs auxquels se connecter et la méthode de connexion.

REMARQUE : Le stockage d'informations sensibles telles que des mots de passe ou des détails de connexion en texte brut dans le fichier user-mapping.xml peut constituer un risque pour la sécurité, en particulier si le fichier est accessible à des utilisateurs non autorisés. Si vous utilisez Guacamole sur Internet, je vous recommande d'éviter d'utiliser le fichier user-mapping.xml pour stocker les informations d'identification. Assurez-vous également que HTTPS est implémenté. La sécurité commence par vous !

Cependant, aux fins des tests locaux, nous utiliserons cette méthode !

Pour commencer, générez le hachage MD5 des mots de passe que l'utilisateur utilisera pour se connecter à l'interface utilisateur Web de Guacamole.

Remplacez votre mot de passe, <password>, en conséquence ;

echo -n <password> | openssl md5

Par exemple, où mot de passe est "password".

echo -n password | openssl md5

Sortie:

MD5(stdin)= 5f4dcc3b5aa765d61d8327deb882cf99

Assurez-vous de remplacer le mot de passe par votre mot de passe fort.

Ensuite, créez le fichier d'authentification utilisateur par défaut, user-mapping.xml avec le contenu suivant.

nano /etc/guacamole/user-mapping.xml
<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="5f4dcc3b5aa765d61d8327deb882cf99"
            encoding="md5">

        <!-- First authorized Remote connection -->
        <connection name="Ubuntu 22">
            <protocol>ssh</protocol>
            <param name="hostname">192.168.58.37</param>
            <param name="port">22</param>
        </connection>

        <!-- Second authorized remote connection -->
        <connection name="Windows 10">
            <protocol>rdp</protocol>
            <param name="hostname">192.168.56.121</param>
            <param name="port">3389</param>
            <param name="username">kifarunix</param>
            <param name="ignore-cert">true</param>
        </connection>

    </authorize>

</user-mapping>

Si vous ne spécifiez pas le nom d'utilisateur et le mot de passe dans le fichier, vous serez invité à les fournir lors de la tentative de connexion, ce que je considère comme un peu sécurisé.

Si vous devez définir explicitement des noms d'utilisateur et des mots de passe dans le fichier de configuration, ajoutez les paramètres ;

<param name="username">USERNAME</param>
<param name="password">PASSWORD</param>

Enregistrez et quittez le fichier de configuration.

Redémarrez Tomcat et guacd pour appliquer les modifications.

systemctl restart tomcat9 guacd

Assurez-vous de vérifier les fichiers journaux syslog, /var/log/syslog ou /var/log/tomcat9/ pour tout problème.

Accéder à Apache Guacamole à partir du navigateur

Le serveur Apache Guacamole est maintenant configuré. Vous pouvez y accéder depuis un navigateur Web en utilisant l'adresse http://server-IP:8080/guacamole.

Utilisez les informations d'identification de l'utilisateur pour lequel vous avez généré un hachage MD5 pour son mot de passe ci-dessus.

Une fois la connexion réussie, vous accédez au tableau de bord Web Apache Guacamole et vous devriez pouvoir voir les connexions ajoutées.

Configurer HTTPS : 

Certbot ne sachant pas se dépatouiller avec tomcat (on le comprend), on va le laisser créer les certificats et on va paramétrer ensuite à la mimine tout ce qu’il faut derrière.

apt install certbot
certbot certonly

Pas de consignes spéciales pour les certificats, à part qu’il faut choisir l’option 1 qui permet à l’utilitaire de créer un serveur web temporaire servant à vérifier l’association du certificat et du site.

On peut aussi taper directement :

certbot certonly --standalone -d domaine

Il ne reste plus qu’à ajouter ces fichiers dans la configuration server.xml, en « décommentant » la partie suivante :

<Connector port="8282" protocol="org.apache.coyote.http11.Http11AprProtocol"
               maxThreads="150" SSLEnabled="true" >
        <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
        <SSLHostConfig>
            <Certificate certificateKeyFile="/etc/letsencrypt/gua/privkey1.pem"
                         certificateFile="/etc/letsencrypt/gua/cert1.pem"
                         certificateChainFile="/etc/letsencrypt/gua/fullchain1.pem"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>

Pour rediriger automatiquement le site http (port 8080) vers https (8443), il faut ajouter la section suivante dans web.xml cette fois :

...
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
 
    <security-constraint>
       <web-resource-collection>
             <web-resource-name>HTTPSOnly</web-resource-name>
             <url-pattern>/*</url-pattern>
       </web-resource-collection>
       <user-data-constraint>
             <transport-guarantee>CONFIDENTIAL</transport-guarantee>
       </user-data-constraint>
    </security-constraint>
 
</web-app>
systemctl restart tomcat9

 

Comment réparer la connexion fermée/refusée du serveur RDP : la négociation de sécurité a échoué (mauvais type de sécurité ?)

Si vous rencontrez une ERREUR DE CONNEXION et après avoir vérifié les journaux ;

journalctl -f -u guacd
Aug 15 16:31:53 debian guacd[28423]: Loading keymap "en-us-qwerty"
Aug 15 16:31:53 debian guacd[28423]: guacd[28423]: INFO:        Loading keymap "en-us-qwerty"
Aug 15 16:31:53 debian guacd[28423]: RDP server closed/refused connection: Security negotiation failed (wrong security type?)
Aug 15 16:31:53 debian guacd[28423]: guacd[28423]: INFO:        RDP server closed/refused connection: Security negotiation failed (wrong security type?)
Aug 15 16:31:53 debian guacd[28423]: guacd[28423]: INFO:        User "@7de1f381-34cf-4e08-8df0-66a5048c6f65" disconnected (0 users remain)
Aug 15 16:31:53 debian guacd[28423]: guacd[28423]: INFO:        Last user of connection "$c9f11e3a-cc25-40c9-b6d2-c015773f7262" disconnected
Aug 15 16:31:53 debian guacd[28423]: User "@7de1f381-34cf-4e08-8df0-66a5048c6f65" disconnected (0 users remain)
Aug 15 16:31:53 debian guacd[28423]: Last user of connection "$c9f11e3a-cc25-40c9-b6d2-c015773f7262" disconnected
Aug 15 16:31:53 debian guacd[28360]: Connection "$c9f11e3a-cc25-40c9-b6d2-c015773f7262" removed.
Aug 15 16:31:53 debian guacd[28360]: guacd[28360]: INFO:        Connection "$c9f11e3a-cc25-40c9-b6d2-c015773f7262" removed.
Aug 15 16:31:53 debian guacd[28423]: RDP server closed/refused connection: Security negotiation failed (wrong security type?)

Ensuite, corrigez-le comme suit :

Le service du serveur Guacamole (guacd) s'exécute en tant que démon utilisateur par défaut.

ps aux | grep -v grep| grep guacd
daemon     28360  0.0  0.7 247892 15548 ?        Ss   16:29   0:00 /usr/local/sbin/guacd -f

Créez un compte utilisateur système guacd qui peut être utilisé pour exécuter guacd au lieu de l'exécuter en tant qu'utilisateur démon.

useradd -M -d /var/lib/guacd/ -r -s /sbin/nologin -c "Guacd User" guacd
mkdir /var/lib/guacd
chown -R guacd: /var/lib/guacd

Ensuite, mettez à jour l'utilisateur du service Guacd ;

sed -i 's/daemon/guacd/' /etc/systemd/system/guacd.service

Restart daemon

systemctl daemon-reload

Restart Guacd service

systemctl restart guacd

À ce stade, RDP devrait fonctionner sans aucun problème.

Vous pouvez maintenant ajouter plus de connexions à votre Guacamole.

Cela marque la fin de notre guide sur la façon d'installer Guacamole sur Debian 12.

 

4 commentaires

  1. image chocaslu

    Merci pour ce tuto.
    Il marche nickel, je l'ai utilisé pour une solution dans mon entreprise et sur un raspberry chez moi.
    Quel est la meilleur solution de sécuriser un serveur Guacamole ? je compte l'exposer sur internet.
    Parfeu + reverse proxy ?

  2. Merci ^^.

    Oui reverse proxy ou/et fail2ban au minimum ;)

  3. image killtiret9

    Bonjour,
    Merci pour ce tuto qui a presque fonctionné pour moi. En effet, après l'obtention des certificats et la modification de web.xml, la redirection se fait correctement jusqu'au message d'erreur:
    Une erreur est survenue pendant une connexion à xxxx:8443. SSL a reçu un enregistrement qui dépasse la longueur maximale autorisée.
    Code d’erreur : SSL_ERROR_RX_RECORD_TOO_LONG
    Alors après et bien ça ne fonctionne plus. (A noter que côté parefeu tout est ouvert, en http ça fonctionnait, les certificats pour ma machine semblent ok ..) Une idée ? Merci

  4. Bonjour,

    la comme ça je ne vois pas.

    Assurez vous que le port 80, 8080 soit ouvert vers internet pour lets-encrypt la premiere fois.

    Sinon il me faudrait des précisions sur le contexte pour pouvoir investiguer plus profondément.

    cdlt

Écrire un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec une *

Quelle est le deuxième caractère du mot u9pce ? :