Guacamole : gérer les accès à votre environnement informatique

Dans ce tutoriel, je vais vous expliquer comment installer Guacamole sur Ubuntu, configurer des accès à des équipements et l’utiliser.

Avant de se lancer le technique, je vais d’abord vous présentez Apache Guacamole et surtout pourquoi le mettre en place.

Qu’est-ce que Guacamole ?

Non, je ne vais pas vous parlez de la recette de sauce à l’avocat dans ce tutoriel, pour être plus précis, on va parler d’Apache Guacamole qui est solution sans client de passerelle de bureau à distance.

Pour vous faire une présentation simple d’Apache Guacamole, c’est une solution Open Source gratuite qui permet de mettre en place des accès à distance à travers un portail Web sur différents équipements.

Au moment de la rédaction de ce tutoriel, les protocoles suivants sont supportés :

  • RDP
  • SSH
  • Telnet
  • VNC

Il est possible à travers le portail Web de gérer plusieurs utilisateurs et connexions, de les regrouper dans des groupes , de configurer des contraintes d’accès (horaire, nombre de connexion …) et d’enregistrer les sessions en vidéo.

Guacamole est souvent présenté comme une solution utilisée à la « maison » afin de pouvoir accès à son ordinateur avec un navigateur…

Je vais me concentrer sur un usage professionnel afin de mettre en place une solution « bastion » / PAM (Privileged Access Management)

Utilisation de Guacamole dans un environnement professionnel

Ce qui m’intéresse ici, c’est pourquoi et comment utiliser Guacamole dans un environnement professionnel pour gérer les accès aux prestataires et les sécuriser.

Aujourd’hui beaucoup d’entreprises sont confrontées au problème de gestion des prestataires et surtout comment leur donner accès au système d’information le plus sécurisé possible.

La solution est le bastion, qui est une solution logicielle d’accès à distance qui va permettre de gérer cela en gérant des comptes et en limitant leur accès et en ajoutant des couches de sécurités diverses.

Le problème des solutions de bastion est leur coût qui est peu vite être un vrai frein à leur adoption.

Sans solution bastion, les entreprises continuent de faire comme ils le peuvent et souvent en « subissant » les modes de fonctionnement des prestataires :

  • Multiple solution de prise de main à distance (Teamviewer, AnyDesk, Bureau à distance, VPN …)
  • Souvent les mots de passe sont donnés aux prestataires
  • Non-surveillance des accès
  • Peu ou pas de contrôle sur les heures d’accès

Guacamole va nous permettre de répondre en partie à ces problématiques :

  • Solution unique de connexion au système d’information par un navigateur Internet
  • Comme il est possible de configurer les connexions aux équipements (SSH, RDP) en indiquant les identifiants, il n’est plus nécessaire de les communiquer, il faut seulement donner les identifiants d’accès au portail web qui doivent être différents. Cette solution permet aussi de limiter le rebond des prestataires sur d’autre équipement.
  • Tous les accès sont enregistrés dans Guacamole, il est donc facile de suivre l’activité des prestataires et il est possible d’enregistrer en vidéo les sessions.
  • Il est possible de configurer des horaires d’accès sur les comptes, ce qui évite certain débordement.

Fonctionnement de Guacamole

Je ne vais pas rentrer dans le détail ici du fonctionnement de Guacamole, voici un diagramme qui vous permet de vous faire une idée :

Guacamole architecture

Apache Guacamole comprend 2 composants principaux :

  • Guacamole Server : Cela fournit tous les composants côté serveur et natifs requis par Guacamole pour se connecter à des ordinateurs de bureau distants.
  • Guacamole Client : Il s’agit d’une application Web HTML 5 et d’un client qui vous permet de vous connecter à vos serveurs/ordinateurs de bureau distants. Ceci est soutenu par le serveur Tomcat.

Maintenant nous allons voir comment installer Guacamole.

Guacamole : installation

Pour ce tutoriel, j’ai utilisé une installation fraiche de Ubuntu Server 20.04.

Dans ce tutoriel, nous allons lier Guacamole à MySQL pour gérer les comptes utilisateurs et les connexions.

Pour commencer, nous allons installer les différents prérequis sur le serveur.

Comme il est nécessaire de compiler Guacamole, il faut installer make.

sudo apt install make -y

Par défaut make n’est pas installé sur la version Ubuntu Server 20.04

Maintenant, on va installer les prérequis à l’aide de la commande ci-dessous :

sudo apt install gcc g++ libcairo2-dev libjpeg-turbo8-dev libpng-dev libtool-bin libossp-uuid-dev libavcodec-dev libavformat-dev libavutil-dev libswscale-dev freerdp2-dev libpango1.0-dev libssh2-1-dev libvncserver-dev libtelnet-dev libssl-dev libvorbis-dev libwebp-dev libpango1.0-dev libwebsockets-dev libpulse-dev -y

Si vous souhaitez plus d’information sur les prérequis tout est expliqué ici : Chapter 2. Installing Guacamole natively (apache.org)

Installation de Guacamole-Server

On va maintenant installer le premier composant de serveur guacamole.

Au moment de la rédaction de ce tutoriel, la version disponible de Guacamole est la 1.3.0

Télécharger l’archive sur le serveur :

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

Décompresser l’archive :

tar xzf guacamole-server-1.3.0.tar.gz

Aller dans le dossier qui vient d’être décompressé :

cd guacamole-server-1.3.0/

On va maintenant vérifier que toutes les dépendances nécessaires sont installés sur le serveur à l’aide de configure :

sudo ./configure --with-init-dir=/etc/init.d

Plus obtenir de l’aide exécuter la commande : ./configure --help

Si tout est bon, vous devriez avec l’ensemble des protocoles à yes.

Maintenant on va compiler puis installer Guacamole-Server .

Compilation :

sudo make

Installation :

sudo make install

Maintenant exécuter la commande ldconfig pour créer les différents liens avec les librairies.

sudo ldconfig

Activer le service :

sudo systemctl enable guacd

Démarrer le service guacd :

sudo systemctl start guacd

Vérifier l’état du service (facultatif) :

systemctl status guacd

Le partie serveur de Guacamole est opérationnel.

Installation de Guacamole-Client

Le client qui fournie l’interface HTML5 et a besoin de Tomcat.

Sur le serveur installer Tomcat à l’aide de la commande ci-dessous :

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

Vérifier que le serveur Tomcat fonctionne :

systemctl status tomcat9 

Créer un dossier où l’on va stocker la configuration et le client :

sudo mkdir /etc/guacamole

Maintenant on va télécharger le client et le stocker dans le dossier que l’on vient de créer :

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

Il faut créer un lien symbolique vers Tomcat9 WebApps pour « activer l’utilisation du client »

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

Afin que l’application soit totalement déployée, il faut redémarrer les services :

sudo systemctl restart tomcat9
sudo systemctl restart guacd

À partir de là, la fenêtre d’authentification doit s’afficher sur vous allez sur l’url : http://IP_SERVER:8080/guacamole

Guacamole-Server|Client : configuration

Maintenant que les principaux services sont installés, il faut configurer tout ça pour les faire fonctionner ensemble.

Créer les dossiers extensions et lib dans le dossier /etc/guacamole :

sudo mkdir /etc/guacamole/{extensions,lib}

Ajouter une variable d’environnement :

Solution 1 :

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

Solution 2 :

echo "GUACAMOLE_HOME=/etc/guacamole" | sudo tee -a /etc/default/tomcat

Solution 3 :

Ouvrir le fichier /etc/default/tomcat9 avec nano et ajouter la variable :

 sudo nano /etc/default/tomcat9

A la fin du fichier ajouter :

GUACAMOLE_HOME=/etc/guacamole

Dans une configuration de base, à partir d’ici ,la plupart des tutoriels expliquent comment configurer le client avec le serveur et comment gérer un fichier de mapping. Pour rappel en introduction j’ai expliqué que nous allons utiliser MySQL/MariaDB

Installer MariaDB ou MySQL sur le serveur :

sudo apt install mariadb-server mariadb-client

Il faut maintenant créer un utilisateur et la base de données, on commence par se connecter au serveur de base de données :

sudo mysql

Exécuter les requêtes ci-dessous en modification à minima le mot de passe :

CREATE DATABASE guacamole_db;
CREATE USER 'guacamole_user'@'localhost' IDENTIFIED BY '[email protected]$sW0rd';
GRANT SELECT,INSERT,UPDATE,DELETE ON guacamole_db.* TO 'guacamole_user'@'localhost';
FLUSH PRIVILEGES;
quit;

Télécharger l’extension mysql pour Guacamole :

wget http://apache.mirror.digionline.de/guacamole/1.3.0/binary/guacamole-auth-jdbc-1.3.0.tar.gz

Décompresser l’archive :

tar vfx guacamole-auth-jdbc-1.3.0.tar.gz

Ajouter les tables nécessaires dans la base de donnée créée :

cat guacamole-auth-jdbc-1.3.0/mysql/schema/*.sql | sudo mysql guacamole_db

Installation de l’extension :

sudo cp guacamole-auth-jdbc-1.3.0/mysql/guacamole-auth-jdbc-mysql-1.3.0.jar /etc/guacamole/extensions/

Télécharger le driver JDBC :

wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.13.tar.gz

Décompresser l’archive :

tar xvzf mysql-connector-java-8.0.13.tar.gz

Installer (copier) le driver pour Guacamole :

sudo cp mysql-connector-java-8.0.13/mysql-connector-java-8.0.13.jar /etc/guacamole/lib/

On peut maintenant passer à la configuration du client pour utiliser la base de données .

Créer le fichier de configuration :

sudo nano /etc/guacamole/guacamole.properties

Ajouter la configuration ci-dessous en adaptant à votre environnement (mysql-) :

# Hostname and Guacamole server port
guacd-hostname: localhost
guacd-port: 4822

# MySQL properties
mysql-hostname: localhost
mysql-port: 3306
mysql-database: guacamole_db
mysql-username: guacamole_user
mysql-password: [email protected]$sW0rd

La configuration est terminée, lier le dossier de configuration à Tomcat :

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

Redémarrer les services :

sudo systemctl restart tomcat9
sudo systemctl restart guacd

Facultatif : Créer un dossier guacamole dans le dossier /var pour le stockage des enregistrements vidéos

sudo mkdir /var/guacamole

L’installation et la configuration de base est terminée, nous allons maintenant voir comment utiliser Guacamole.

Utiliser Guacamole

Pour rappel pour accéder à Guacamole depuis un navigateur Web aller à l’adresse : http://IP_SERVER:8080/guacamole

Les identifiants par défaut sont : guacadmin:guacadmin

Guacamole login page

Une fois connecté, on arrive sur page qui affiche normalement, les dernières connexions utilisées et les connexions que l’utilisateur peut utiliser.

Pour accéder à la configuration de Guacamole, cliquer sur le nom de l’utilisateur 1 pour dérouler le menu et cliquer sur Settings 2.

Pour la prise en main, je vais vous expliquer comment utiliser Guacamole de façon logique et non vous montrez tout directement son utilisation.

Le but pour rappel est de fournir un accès à des prestataires extérieur, je vais donc baser mes groupes sur cette problématique.

Créer un groupe de connexion

La première chose que l’on va voir c’est la création de groupe de connexion.

Dans le menu de navigation aller sur Connection 1.

Pour le moment cette vue est vide, on retrouvera par la suite l’ensemble des connexions configurées ainsi que les différents groupes.

Le but va être maintenant de créer une arborescence afin de ranger les connexions des prestataires.

Ce que je vous montre ici est à titre d’exemple, libre à vous ensuite d’adapter à vos besoins.

Je vais d’abord créer un groupe Prestataires, dans lequel je vais ensuite créer des sous-groupes qui va représenter un prestataire.

Cliquer sur le bouton New Group 1.

Nommer le groupe 1, Location laisser ROOT 2 et Type laisser Organizational 3. Cliquer sur le bouton Save 4 pour créer le groupe.

Le groupe est créé et visible dans la liste des connexions, si on le déplie, on voit que l’on peut ajouter des connexions et des sous-groupes. Cliquer sur New Group 1.

Comme pour le groupe racine, nommer le groupe 1 (ici le nom du prestataire préfixé de GC), le champ Location est déjà sélectionné et laisser le type Organizational. Cliquer sur Save 2.

Le groupe est ajouté.

Pour illustrer le tutoriel, j’ai ajouté un second groupe de connexions pour simuler plusieurs prestataires.

Créer un groupe utilisateur

Les groupes utilisateurs vont permettre de regrouper les comptes utilisateurs dans un groupe afin de pouvoir leur données les accès plus facilement, à la place de gérer utilisateur par utilisateur.

Aller sur le menu Group 1 et cliquer sur New Group 2.

Nommer le groupe 1, cocher les groupes de connexion lié au prestataire 2 et cliquer sur Save 3.

Il est impératif de cocher les groupes parents, si cela n’est pas fait, l’accès aux connexions ne sera pas possible.

Dans la configuration d’un groupe, il est possible d’ajouter des droits d’administration sur Guacamole.

Le groupe est ajouté.

J’ai également ajouter un second groupe.

Ajouter une nouvelle connexion

Avant de vous expliquer comment ajouter une connexion, il faut se représenter une connexion comme étant un accès à un équipement avec une configuration particulière. De ce fait, il est normal d’avoir plusieurs connexions avec différents paramètres à un même serveur en fonction des accès et des informations que vous souhaitez donner à votre prestataire.

Aller sur le menu Connections 1, pour ajouter une connexion, plusieurs possibilités, cliquer sur le bouton New Connection 2 ou sur New Connction 2 qui se trouve au niveau des groupes.

Configurer une connexion RDP

La première connexion que l’on va configurer est un accès RDP sur un serveur Windows.

Les paramètres de la connexion étant nombreux, je vais prendre par bloque.

Commencer par nommer 1 la connexion et sélectionner le protocole RDP 2.

Pour ce qui est du champ Location, ayant cliqué sur le New Connect au niveau du groupe, celui-ci est déjà sélectionné

Dans la partie CONCURRENCY LIMITS, il est possible de limiter le nombre de connexions simultanées, dans le cadre d’une connexion RDP où les identifiants sont passés, cela n’aura pas d’impact car un même utilisateur ne pourra pas ouvrir plusieurs fois la même session.

On passe les parties LOAD BALANCING et GUACAMOLE PROXY PARAMETERS (GUACD) qui sont à configurer sur des installations complexes à plusieurs serveurs.

On va maintenant s’intéresser à la partie PARAMETERS, là aussi, je ne vais pas reprendre toutes les options disponibles, je vous laisse les parcourir et vous pourrez voir que l’on peut configurer tous les paramètres du client RDP (Passerelle RDS, Redirection des périphériques, Performances …).

Je vais me limiter au minimum et je vous laisse faire vos propres tests au besoin.

Dans la section Network, indiquer le nom ou l’adresse IP de l’hôte 1 ainsi que le port 2 (3389) pour du RDP.

Dans la partie Authentification, on va indiquer directement le compte à utiliser pour se connecter, ce qui évite de donner ces informations au prestataire. Entrer le nom d’utilisateur 1 et le mot de passe 2, sélectionner Any 3 pour le champ Security mode et cocher la case Ignore server certificate 4.

Dernier élément de configuration que je vais vous montrer et l’enregistrement de la session dans la section Screen Recording. Dans le champ Recording path 1 indiquer l’emplacement où ils seront stockés (/var/guacamole/) et ensuite indiquer le nom de l’enregistrement dans le champ Recording name 2.

Enregistrer la connexion en cliquant sur le bouton Save 1.

La connexion est ajoutée et ranger dans le groupe de connexion.

Configurer une connexion SSH

De la même manière que pour la connexion SSH, je vais me limiter au minimum, pour le reste des paramètres je vous laisse regarder.

Nommer la connexion 1 et sélectionner le protocole SSH 2.

Dans la partie Network renseigner l’hôte 1 (IP ou FQDN) et indiquer le port (22) 2.

Dans la section Authentification, indiquer le couple utilisateur et mot de passe 1 en fonction de votre politique.

Comment pour la connexion RDP, dans la section Screen Recording, il est possible de configurer l’enregistrement vidéo de la session de connexion.

Pour terminer, cliquer sur Save 1.

La connexion SSH est ajouté et dans le groupe.


Pour le tutoriel, j’ai aussi ajouté des connexions au second prestataire, mais cette fois-ci sans indiquer les identifiants.

Modifier une connexion

Pour modifier une connexion existante, il suffit de cliquer dessus, on arrive ensuite sur le même formulaire que pour ajouter une connexion. Une fois les modifications effectuées, cliquer sur Enregistrer.

Affecter les connexions aux groupes

Cette opération est obligatoire afin que les utilisateurs puissent avoir accès aux connexions.

Cette manipulation m’a fait perdre la tête, car l’héritage n’est pas automatique

Retourner dans la gestion des groupes utilisateurs 1 puis cliquer sur le groupe à éditer 2.

Dans la section Connections 1, cocher les connexions créées précédemment 2 et cliquer sur Save 3.

Ajouter un utilisateur (prestataire)

Maintenant, nous allons voir comment ajouter un utilisateur et l’attribuer directement à un groupe.

Aller dans la gestion des utilisateurs 1 et cliquer sur le bouton New User 2.

Comment pour les autres éléments, je vais me concentrer sur les champs obligatoires.

Saisir l’identifiant du compte 1 et le mot de passe 2 (x2), dans la section GROUPS, cocher le ou les groupes d’appartenance de l’utilisateur 3 et cliquer sur Save 4.

L’utilisateur est ajouté.

Recommencer les manipulations pour les autres comptes et prestataires.

Connexion/Utilisation avec un compte prestataire

Maintenant que nous avons tout configuré, il ne reste plus qu’à tester notre solution « bastion ».

Se connecter avec un compte prestataire :

Si le compte a une seule connexion de configurer, celle-ci est établie directement.

On arrive sur une page où l’on peut voir les connexions récentes (pour le moment vide) et en dessous la liste des connexions disponibles.

Déplier les connexions et cliquer sur l’une pour se connecter, (je vais commencer avec la connexion RDP).

Patienter pendant la connexion au serveur …

La connexion est établie en RDP sur le serveur sans avoir besoin de fournir d’identifiant.

Astuce : pendant une session, il est possible de naviguer entre plusieurs connexions ou revenir à la page d’accueil en utilisant un menu « caché », utiliser la combinaison de touche Ctrl+Alt+Maj pour l’afficher.

Pour la connexion SSH, c’est similaire :


De retour sur la page d’accueil du compte de l’utilisateur, on voit cette fois-ci les derniers connexions utilisées.


Si plusieurs sessions sont ouvertes simultanément, il est possible de changer rapidement en cliquant en bas à gauche de l’écran.

Suivre les sessions

L’intérêt de mettre en place une solution de Bastion est aussi de suivre les sessions, Guacamole nous offre deux solutions.

Les sessions en cours

Il est possible de suivre les sessions en cours depuis l’administration en allant sur le menu Active Sessions.

Depuis cette vue, vous pouvez voir les connexions en cours avec la possibilité de fermer une session et cerise sur le gâteau de suivre en directe et d’interagir en cliquant sur le nom de la connexion.

Ci-après une capture avec le suivi la visualisation en directe d’une connexion :

Historique des sessions

L’historique des sessions est disponible à plusieurs endroits :

  • Dans le menu Hostiry
  • Dans l’édition d’une connexion

Les enregistrements vidéos

Si vous avez activé l’enregistrement des sessions, je vais vous expliquer comment les exploiter.

Pour rappel le stockage a été configuré dans le dossier /var/guacamole.

Voici comment se présente les fichiers :

Par défaut les fichiers ne sont pas exploitable, il faut les convertir en fichier vidéo à l’aide de la commande ci-dessous :

guacenc -s 1280x720 -r 20000000 -f file-name

Une fois convertie, on a un fichier au format m4v.

Pour 10 minutes, j’ai un fichier de 40Mo

Il ne reste plus qu’à télécharger le fichier et le visionner avec un lecteur type VLC.

Conclusion

Vous savez maintenant comment mettre en place une solution Bastion / PAM gratuite avec Guacamole, c’est une bonne solution pour commencer à sécuriser les accès quand aucune solution est en place et permet d’évaluer réellement le besoin avec d’acquérir une solution payante.

Dans ce tutoriel, je me suis focalisé sur les accès prestataire, mais il est également possible de l’utiliser pour l’ensemble des administrateurs pour gérer le SI et éviter l’utilisation de VPN, Passerelle de bureau à distance …

Il est possible d’augmenter facilement le niveau de sécurité gratuitement en mettant en place un système de double authentification.

Avant un déploiement sur l’extérieur, je vous conseille très fortement de configurer un reverse proxy Apache2 ou Nginx sur le serveur afin de publier Guacamole sur le protocole HTTPS.



3 réflexions au sujet de “Guacamole : gérer les accès à votre environnement informatique”

  1. Bonjour
    Excellent post – comme souvent je dirais, très instructif.
    Quelques point me font cependant tiquer. J’aurais aimé que cette applicatif gère un RBAC digne de ce nom avec authentification AD.
    En fonction du Login/pw AD (nominatif bien entendu pas générique) passé sur l’app, cela donne droit à tel ou tel type de connexion (un peu comme une ferme RDS ou Citrix). Après, c’est ces mêmes credentials qui sont utilisés pour atteindre un équipement et on peu (ou pas) selon les droits accordés au dit compte.

    Second point : Dans une infra d’entreprise, le serveur Guacamole serait situé dans une DMZ et derrière un Firewall.

    Personnellement, je réalise tout cela directement avec les fonctionnalités VPN SSL d’un Firewall. Etablissement d’une connexion VPN SSL avec l’IP publique du Firewall. L’établissement du VPN SSL peut être basé sur un compte local de l’applicatif Firewall (déconseillé), ou d’un compte de domaine (conseillé). Ainsi, on a la traçabilité nominative des connexions SSL vers le Firewall. A cette étape, l’utilisateur est « logiquement » sur le réseau local, il peut donc utiliser les mêmes outils qu’il utiliserait s’il était physiquement sur le réseau local (SSH, RemoteManagement, RemoteShell, RDP, HTTPS), afin de faire ces gestes d’administration. Naturellement, pour ce faire, il utilise son compte de domaine auquel sont accordés les droits qui vont bien (RBAC). On a donc également une traçabilité également au niveau des équipements et applications (dans les logs).

    Bien entendu, cela ne remplace pas un véritable Bastion, mais ceci est plus difficile à mettre en oeuvre dans une infra On-Premise.
    Cordialement

    Répondre
    • Bonjour Oliver,
      Merci 🙂 pour ton retour.
      Normalement il est possible de faire une authentification LDAP / AD, vue que j’ai « focus » le tutoriel pour l’accès prestataire dans cette configuration, je préfère un compte local, pour un accès AD, il faut, pour bien faire activer l’authentification à double facteur surtout si Guacamole est exposé sur Internet.
      Après il est vrai que niveau RBAC, c’est très limité, on est loin de ce que propose Walix par exemple, entre rien (accès par TeamViewer) et Walix, je trouve que Guacamole est une bonne solution quand on a pas la possibilité de mettre en place un bastion.
      Romain

      Répondre

Laisser un commentaire