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
- Installer les dépendences requises
- Téléchargez Guacamole depuis les sources
- Installez Apache Guacamole sur Debian 12
- installez Guacamole
- Running Guacamole-Server on Debian 12
- Installer le servlet Tomcat
- Installez Tomcat 9 sur Debian 12 à partir du dépôt Debian 11
- Installer le client Guacamole sur Debian 12
- Téléchargez et installez le binaire du client Guacamole
- Configuration d' Apache Guacamole
- Configurer les connexions au serveur Guacamole
- Configurer la méthode d'authentification Guacamole
- Accéder à Apache Guacamole à partir du navigateur
- Configurer HTTPS
- Corrigez le probleme avec RDP
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.
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.
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 ?
Merci ^^.
Oui reverse proxy ou/et fail2ban au minimum ;)
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
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