Si vous souhaitez me remonter des informations, ne pas hésiter
Guacamole est un produit qui va se situer entre vos serveurs et les personnes souhaitant y accéder (en général les prestataires), toutes les connexions seront loguer et les sessions pourront être enregistrées si vous le souhaitez. Le choix le plus judicieux est de le rendre accessible via VPN uniquement.
Pourquoi depuis des VPN ? Si le serveur est en accès direct sur internet et qu'il se fait compromettre. Vous risquez de mettre en péril votre infrastructure.
Le mieux serait de faire comme cela
En image
Comme je l'indique dans le titre, la version que nous allons mettre en place est rudimentaire, tout s'effectue depuis le terminal
L'avantage de cette version, c'est sa légèreté est qu'elle et simplifiée, pas de MYSQL ni de plug-in (la plupart des plug-in fonctionnent conjointement avec une base de données)
L'entretien est plus simple et il n'y a que 2 fichiers à sauvegarder, celui des utilisateurs et le fichier de configuration de guacamole
La version par excellence pour des infrastructures de quelques serveurs, ou si les prestataires n'ont besoin de se connecter qu'à très peu de serveurs
Avant d'expliquer comment mettre en place guacamole, je vous recommande d'effectuer les étapes suivantes durant l'installation de l'OS
Les vidéos et sessions d'enregistrement de texte ne sont pas volumineux, seules les vidéos après l'encodage prennent de la place.
Session d'enregistrement de texte ? elle sert lors de l'enregistrement d'une connexion SSH, elle crée deux fichiers.
ATTENTION j'ai vu avec la CNIL concernant les règles de stockage et de conservation des vidéos, il m'ont indiqué que ce sont les même règle que pour le reste (RGPD).
Du coup, il faut :
Si il manque quelque chose n'hésitez pas a me le soumettre par mail, je modifierai
Pour l'installation, nous allons utiliser le script présent sur le github de MysticRyuujin, il ne fonctionne qu'avec les distributions basées sur Debian (Debian, Ubuntu, Kali)
Si vous utilisez une distribution différente, suivez le script et cherchez les équivalents des paquets installés pour votre distribution
Allez sur Script d'installation
Télécharger le script d'installation minimale (coller le lien)
wget https://raw.githubusercontent.com/MysticRyuujin/guac-install/master/guac-install-server.sh
Il faut être admin pour lancer certaines commandes, utilisées sudo ou passer admin avant de lancer les commandes comportant un dièze (#)
sudo commande
su -
pour passer admin provisoirement
su -l root -c "votre commande"
l'alternative pour ne pas rester connecté en root
Le script est simple, lisez le avant de le lancer, ne faites pas confiance
wget https://raw.githubusercontent.com/MysticRyuujin/guac-install/master/guac-install-server.sh
Donner les droits d'exécution sur le script
chmod u+x guac-install-server.sh
Avant de lancer le script, nous allons le modifier.
Cela permettra de choisir l'utilisateur qui exécutera Guacd. Permettant de sécuriser le service, mais aussi d'éviter les problèmes avec FREERDP, qui a besoin d'écrire dans le répertoire home de l'utilisateur (certificat client RDP et fichiers de configuration)
A la ligne 67, modifier la ligne ci-dessous
./configure --with-init-dir=/etc/init.d
Remplacé la par la ligne ci-dessous
./configure --with-systemd-dir=/etc/systemd/system
On remplace l'antique init.d par systemd
Lancez le script après l'avoir vérifié
# ./guac-install-server.sh
Sur Debian 10.7, j'ai rencontré un problème lors de l'installation avec la version 1.3.0 de guacamole (voir rubrique Problèmes / Problèmes lors du lancement du script)
Attendez la fin de l'installation, si vous n'avez pas d'erreur continuez.
Dans le cas contraire, n'hésitez pas à me contacter en m'indiquant votre système ainsi que l'erreur rencontrée (screen si possible)
J'ajouterai les solutions dans la rubrique problèmes
Normalement vous avez le dossier /etc/guacamole qui s'est créé avec le fichier guacd.conf présent dedans
Nous allons avoir besoin de Tomcat pour lancer l'application web de guacamole permettant au prestataire de se connecter au serveur via une page web (Html5)
Tomcat contient un serveur web comme apache, mais il est fait pour exécuter des applications Java
Commençons par chercher la version disponible dans les dépôts APT
apt search tomcat
Vous devriez avoir TomcatX, X étant la version
Actuellement nous sommes en version 9
Installons le paquet
apt install tomcat9
Tomcat installé, nous allons ajouter l'application java de Guacamole dans les webapps de Tomcat
Allez dans le terminal SSH de votre serveur et entrez la commande
curl -SLO "http://apache.org/dyn/closer.cgi?action=download&filename=guacamole/1.3.0/binary/guacamole-1.3.0.war"
Voici l'explication des options CURL
Nous allons copier le fichier sans l'indication de version dans le dossier /etc/guacamole/
cp guacamole-1.3.0.war /etc/guacamole/guacamole.war
Puis faire un lien symbolique vers le dossier webapps de tomcat
ln -sf /etc/guacamole/guacamole.war /var/lib/tomcat9/webapps/
Le but étant d'avoir tous les fichiers au même endroit /etc/guacamole et de créer un lien symbolique vers le dossier webapps de Tomcat
J'ai mis le nom guacamole au lieu de guacamole-1.3.0.war, cela permet de taper dans le navigateur http://IP:8080/guacamole au lieu de http://IP:8080/guacamole-1.3.0
J'aurais pu créer un lien symbolique de /etc/guacamole/guacamole-1.3.0.war vers /var/lib/tomcat9/webapps/guacamole.war mais en cas de mise à jour, je serais obligé de refaire le lien symbolique
Si vous cherchez la version, il vous suffit de regarder en bas à droite de la page web de connexion à guacamole.
Nous allons restart Tomcat pour qu'il prenne en compte l'ajout de l'application Java
systemctl restart tomcat9
Entrez la commande suivante dans le terminal, pour avoir l'IP du serveur
ip a
Avec votre navigateur, entrez la valeur suivante en remplaçant IP par l'IP trouvée avec la commande ci-dessus
IP:8080/guacamole
Vous devriez avoir la page de connexion à Guacamole
Allez dans le répertoire de guacamole
cd /etc/guacamole
Crée le fichier de configuration principal
touch guacamole.properties
Modifions-le pour ajouter les informations permettant de l'utiliser comme on le souhaite
nano guacamole.properties
Voici les options principales
available-languages: fr, en
guacd-hostname: localhost
guacd-port: 4822
basic-user-mapping: /etc/guacamole/user-mapping.xml
available-languages: fr, en
cette ligne indique les langues disponibles depuis l'interface, gardez l'anglais (cela permet d'avoir les mots en anglais, si il non pas été traduit en français). Par défaut toutes les langues sont disponibles
guacd-hostname: localhost
Indique ou se situe le serveur guacd. La valeur par défaut de cette ligne est localhost , si vous ne la changez pas, inutile de garder la ligne dans le fichier de configuration
guacd-port: 4822
indique le port de connexion. le port par défaut est 4822, si vous ne la changez pas, inutile de garder la ligne dans le fichier de configuration
basic-user-mapping: /etc/guacamole/user-mapping.xml
indique ou se trouve le fichier des connexions utilisateur - serveur
Un fichier avec une config par défaut ressemblerait à cela
basic-user-mapping: /etc/guacamole/user-mapping.xml
Crée le fichier de configuration des utilisateurs - serveurs
touch /etc/guacamole/user-mapping.xml
Allez dans le fichier de configuration des utilisateurs et serveurs (vide pour le moment)
nano /etc/guacamole/user-mapping.xml
Voici à quoi il peut ressembler avec un minimum d'informations
Attention, concernant le RDP vous pouvez rencontrer des difficultés pour vous connectez aux serveurs Windows. Si c'est le cas, suivez les instructions dans la rubrique Problèmes / Problèmes lors du lancement de session RDP ( tout en bas de la page)
<user-mapping>
<authorize username="test" password="098f6bcd4621d373cade4e832627b4f6" encoding="md5" >
<connection name="WinDC1">
<protocol>rdp</protocol>
<param name="hostname">192.168.1.52</param>
<param name="username">${GUAC_USERNAME}</param>
<param name="password">${GUAC_PASSWORD} </param>
<param name="ignore-cert">true</param>
<param name="domain">MonDomaine.lan</param>
</connection>
</authorize>
</user-mapping>
Nous allons commencer par convertir le mot de passe en md5, pour cela utiliser la commande suivante
echo -n "mot de passe" | openssl dgst -md5 | sed 's/(stdin)= //g'
Ou
echo -n "mot de passe"|md5sum
pour la deuxième commande copier le résultat sans les espaces et le tiret et coller le dans password=""
de la ligne ci-dessous
ATTENTION seul le MD5 est supporté pour le moment, des demandes ont été faites pour ajouter le SHA512.
MD5 n'étant pas un algorithme très fiable, prenez en compte cela avant de faire vos choix (utilisation de compte AD et/ou utilisation des comptes locaux sur les serveurs sensibles, vue plus bas)
<authorize username="test" password="098f6bcd4621d373cade4e832627b4f6" encoding="md5" >
Nous allons définir un nom pour la connexion à une machine, je l'ai nommé WinDC1
<connection name="WinDC1">
</connection>
Ajoutons le paramétrage de cette connexion
<protocol>rdp</protocol>
<param name="hostname">192.168.1.52</param>
<param name="port">3389</param>
<param name="ignore-cert">true</param>
<param name="username"></param>
<param name="password"></param>
1 C'est du Windows nous allons définir le protocole RDP
2 Indiquer le nom d'hôte ou l'IP dans notre cas ca sera 192.168.1.52
3 Indiquer le port s'il est différent de celui par défaut, sinon vous pouvez supprimer cette ligne
4 Cela permet de ne pas vérifier le certificat (évite les erreurs liées aux certificats autosignés)
5 plusieurs façons d'indiquer le nom de l'utilisateur
Dans le dernier cas ce sont les identifiants avec lequel votre prestataire se sera connecté à guacamole qui seront utilisés pour se connecter au serveur.
Attention cela vous oblige à créer un utilisateur avec les mêmes identifiants sur votre serveur que ceux définis dans la ligne ci-dessous (présentés dans le fichier /etc/guacamole/user-mapping.xml)
<authorize username="test" password="098f6bcd4621d373cade4e832627b4f6" encoding="md5" >
Donc dans le dernier cas cité au-dessus, vous aurez créé un utilisateur test avec le mot de passe test sur votre serveur Windows (c'est un exemple)
Si votre serveur est sur un domaine et que vous utilisez les valeurs ${GUAC_USERNAME} et ${GUAC_PASSWORD}. Il faudra créer l'utilisateur test avec le mot de passe test sur l'AD (ceci est un exemple). Dans ce cas, ajouter l'option ci-dessous au serveur que vous configurez.
<param name="domain">MonDomaine.lan</param>
Cela représente un risque pour la sécurité de votre AD à cause du chiffrement du mot de passe de l'utilisateur en MD5 dans le fichier user-mapping.xml
<user-mapping>
<authorize username="test" password="098f6bcd4621d373cade4e832627b4f6" encoding="md5" >
<!-- First authorized connection -->
<connection name="localhost">
<protocol>ssh</protocol>
<param name="hostname">localhost</param>
<param name="port">22</param>
<param name="username">${GUAC_USERNAME}</param>
<param name="password">${GUAC_PASSWORD}</param>
<param name="create-typescript-path">true</param>
<param name="typescript-path">/recording/ssh.localhost</param>
<param name="enable-sftp">true</param>
<param name="sftp-root-directory">/home/${GUAC_USERNAME}</param>
</connection>
<!-- Second authorized connection -->
<connection name="otherhost">
<protocol>vnc</protocol>
<param name="hostname">otherhost</param>
<param name="port">5900</param>
<param name="password">VNCPASS</param>
</connection>
<connection name="WinDC1">
<protocol>rdp</protocol>
<param name="hostname">192.168.1.52</param>
<param name="username">${GUAC_USERNAME}</param>
<param name="password">${GUAC_PASSWORD} </param>
<param name="domain">MonDomaine.lan</param>
</connection>
</authorize>
</user-mapping>
Explication de certaines options
<param name="create-typescript-path">true</param>
<param name="typescript-path">/recording/ssh.localhost</param>
<param name="enable-sftp">true</param>
<param name="sftp-root-directory">/home/yoann</param>
create-typescript-path crée le chemin à partir de l'emplacement indiqué (Il faudra créer le répertoire racine que vous indiquez)
typescript-path vous indiquez le chemin ou il enregistrera les fichiers
enable-sftp autorisez l'envoi et la réception de fichiers (vous pouvez personnaliser les autorisations d'envoi et de téléchargement avec les options suivantes sftp-disable-download et sftp-disable-upload)
sftp-root-directory indique où sera situé le sftp lors de l'ouverture du client
Ne vous limitez pas aux options citées dans ma documentation. Cliquez sur le lien qui suit et peaufiner vos règles avec les autres options disponibles dans la documentation de guacamole Option protocole guacamole.
L'utilisation de guacamole est assez simple, une fois entrez dans la session, sélectionnée le serveur auquel vous souhaitez vous connecter.
Pour éviter les répétitions, je vais l'ensemble de touches suivantes, ainsi dès que vous verrez ce mot, il faudra appuyer simultanément sur CTRL + ALT + MAJ (les trois touches de gauche)
CTRL + ALT + MAJ = CAM
Après vous être connecté à guacamole et avoir sélectionné votre serveur, tapez sur CAM, une fenêtre apparaît sur la gauche de l'écran
Je vais vous présenter les deux options les plus importantes, n'oublier pas la documentation guacamole pourra vous aider
Le presse papier sert au copier-coller entre le serveur et la page web.
De la page web vers le serveur
collez votre texte dans le formulaire en dessous du mot presse papier, puis appuyez sur CAM, la fenêtre se referme
Du serveur vers la page web
SSH
RDP
Le SFTP vous permet de faire du transfert de fichier entre votre ordinateur et le serveur (dans le cas ou vous l'avez autorisé sur le serveur dans le fichier user-mapping)
Suivant le répertoire source que vous avez indiqué, l'utilisateur ne se trouvera pas au même endroit, les retours en arrière ne sont pas possibles pour l'utilisateur
Si vous avez défini /home/user/ alors l'utilisateur ne pourra pas aller dans /home ni dans / ou /etc
A savoir, le client SFTP hérite des droits de l'utilisateur lors de la connexion, donc si dans le terminal vous passer admin, le SFTP ne passera pas administrateur
Télécharger depuis le serveur LINUX (SSH)
Envoyer vers le serveur Linux (SSH)
Envoyer et recevoir depuis Windows (RDP)
Pour Windows le stockage des fichiers se fera sur le serveur guacamole contrairement au serveur LINUX qui recevra directement le fichier.
Lors de l'ajout des options enable-drive, drive-name, drive-path, create-drive-path dans le fichier user-mapping du serveur souhaitez, il faudra indiquer le chemin (drive-path) ou seront stockés les fichiers sur le serveur guacamole (Ex : /var/storage/WinDC1).
Puis guacamole montera un lecteur réseau (drive-name) (Ex: G:) sur le serveur Windows, qui l'amènera dans le dossier configuré avec drive-path (/var/storage/WinDC1)
Concernant le fonctionnement d'envois et de réceptions de fichiers, ce sont les mêmes que pour Linux
Lors du lancement du script, vous pouvez avoir le message suivant qui empêchera l'installation de guacd
You are building against a development version of FreeRDP. Non-release
versions of FreeRDP may have differences in behavior that are impossible to
check for at build time. This may result in memory leaks or other strange
behavior.
*** PLEASE USE A RELEASED VERSION OF FREERDP IF POSSIBLE ***
If you are ABSOLUTELY CERTAIN that building against this version of FreeRDP
is OK, rerun configure with the --enable-allow-freerdp-snapshots
La version que vous avez installée de freerdp2-dev n'est pas la bonne. Vous avez surement installé une ancienne version alors qu'il faut la dernière.
C'est normal, la distribution Debian ne met pas les dernières versions des paquets, cela évite les problèmes de beug ou risque de sécurité
Pour remédier à cela, suivez les étapes suivantes
Pour cela, allez dans le fichier source.list de apt
nano /etc/apt/source.list
Ajouter un #
devant cette ligne
deb http://deb.debian.org/debian buster main
Ajouter la ligne suivante en dessous
deb http://deb.debian.org/debian buster-backports main
Enregistrer et quitter le fichier
Dans le terminal, entrez les lignes suivantes
apt update
apt install freerdp2-dev -y
-y valide l'installation du paquet sans interaction de votre part
Normalement il va indiquer qu'il y a une mise à jour de disponible et l'installer
Retourner dans le fichier source.list
nano /etc/apt/source.list
mettre en commentaire en ajoutant un #
devant la ligne suivante
deb http://deb.debian.org/debian buster-backports main
et enlever le #
devant la ligne suivante
deb http://deb.debian.org/debian buster main
Dans le terminal, entrer la commande suivante
apt update
C'est important de remettre la ligne par défaut pour garder un système stable, mais vous ne recevrez plus les dernières mises à jour de Freerdp
Attention, si vous laissez la ligne backport, vous pouvez rencontrer un problème de dépendance lors de l'installation de tomcat9. c'est aussi pour cela qu'il faut remettre la ligne par défaut, après l'installation de la dernière version de FREERDP.
Relancer le script d'installation, normalement le message aura disparu et guacd sera installé
Quand vous lancez votre session RDP entrer la commande ci-dessous dans le terminal du serveur guacamole
tail -f /var/log/syslog
Vous devriez avoir ce type d'erreur
FreeRDP initialization may fail: The current user's home directory ("/usr/sbin") is not writable, but FreeRDP generally requires a writable home directory for storage of configuration files and certificates.
WARNING:#011FreeRDP initialization may fail: The current user's home directory ("/usr/sbin") is not writable, but FreeRDP generally requires a writable home directory for storage of configuration files and certificates.
Vous pouvez aussi trouver cette ligne dans catalina.out de Tomcat après avoir été déconnecté immédiatement lors de la connexion
disconnected (0 users remain)
Le problème vient du fait que Guacd n'a pas le droit d'écrire dans le dossier home de l'utilisateur qui le lance, dans notre cas l'utilisateur par défaut est daemon et son répertoire home et /usr/sbin (si vous avez installé guacamole avec systemd au lieu de init.d)
Pour éviter de modifier les droits de ce dossier, nous allons créer un utilisateur, mais aussi l'ajouter au groupe Tomcat. Ce qui permettra à guacd d'avoir les accès au répertoire de Tomcat pour effectuer les connexions aux serveurs depuis l'interface web
Créer un utilisateur
useradd --disabled-login --disabled-password guacd
Ajoutez l'utilisateur au groupe Tomcat
useradd guacd tomcat
Allez dans le fichier qui gère le service
nano /etc/systemd/system/guacd.service
modifier la ligne suivante
User=daemon
Par la ligne suivante
User=guacd
Enregistrer le fichier puis quitter
Entrez la commande suivante dans le terminal
systemctl daemon-reload
Redémarrez les services Tomcat et Guacd
systemctl restart guacd tomcat9
Refaites un essai, tout devrait fonctionner
https://guacamole.apache.org/doc/gug/
http://apache-guacamole-general-user-mailing-list.2363388.n4.nabble.com/Guacamole-v1-3-0-FreeRDP-v2-0-0-Debian-10-td9889.html#a9894
https://github.com/MysticRyuujin/guac-install