Guacamole, contrôler vos équipements en SSH ou RDP via une interface Web

Guacamole a déjà fait l'objet d'une présentation, mais on revient dessus pour essayer d'aller plus loin dans son utilisation et vous montrer comment mettre en place l'authentification à deux facteurs avec un code TOTP, ainsi que la configuration d'accès en SSH ou RDP.

Guacamole, ou comment prendre le contrôle sur vos équipements SSH, RDP ou VNC via une interface Web
Vous vous êtes déjà retrouvés dans la situation où vous deviez lancer un programme, faire un dépannage, récupérer un document, ... tout en étant à distance de votre domicile ? Avec Guacamole, cela devient possible !

On va en profiter pour changer d'image Docker, celle utilisée jusqu'alors n'étant plus maintenue par son développeur, oznu. Attention, celle-ci reste fonctionnelle, mais ne bénéficie pas des améliorations ou correctifs de sécurité ou de bugs qu'il pourrait y avoir ! Cela nous permet également de basculer sur les images officielles, fournies par la fondation Apache.

Nous allons donc utiliser guacd en tant que passerelle serveur et guacamole pour l'interface web, ainsi que postgres en tant que base de données.

Info ! Cet article a été écrit pour être déployé avec un fichier docker-compose et l'utilisation de dossiers en tant que volumes persistents. Pour ceux qui souhaitent déployer la stack via Portainer, il faudra penser à remplacer les dossiers (par exemple ./data) par un nom de volume (par exemple volume-guac-data), et déclarer les volumes à la fin de la stack.

Commençons par créer les répertoires nécessaires au bon fonctionnement de la stack :

mkdir -p /docker/guacamole/{data,drive,init,record}

Il faut ensuite générer le script d'initialisation de la base de données avec la commande suivante :

docker run --rm guacamole/guacamole /opt/guacamole/bin/initdb.sh --postgres > /docker/guacamole/init/initdb.sql

Dans le cas de l'utilisation de Portainer, vous pouvez créer le fichier initdb.sql dans /tmp.

Créez le fichier docker-compose.yml et collez-y le contenu suivant :

version: '2'

services:
  guacd:
    image: guacamole/guacd
    container_name: guacd
    volumes:
      - /docker/guacamole/drive:/drive:rw
      - /docker/guacamole/record:/record:rw
    restart: unless-stopped
    
  guacamole_db:
    image: postgres:13.4
    container_name: guacamole_db
    environment:
      PGDATA: /var/lib/postgresql/data/guacamole
      POSTGRES_DB: guacamole_db
      POSTGRES_PASSWORD: GUAC_DB_PASSWORD
      POSTGRES_USER: guacdb_user
      TZ: Europe/Paris
    volumes:
      - /docker/guacamole/init:/docker-entrypoint-initdb.d:ro
      - /docker/guacamole/data:/var/lib/postgresql/data:rw
    restart: unless-stopped

  guacamole_app:
    image: guacamole/guacamole
    container_name: guacamole_app
    environment:
      GUACD_HOSTNAME: guacd
      POSTGRES_DATABASE: guacamole_db
      POSTGRES_HOSTNAME: guacamole_db
      POSTGRES_PASSWORD: GUAC_DB_PASSWORD
      POSTGRES_USER: guacdb_user
#      TOTP_ENABLED: 'true'
    depends_on:
      - guacd
      - guacamole_db
    ports:
      - 8080:8080
    restart: unless-stopped

Lançons la stack avec la commande docker-compose up -d.

Attention ! Guacamole est accessible depuis l'adresse http://IP.HOTE.DOCKER:8080/guacamole
Après ce premier lancement, vous pouvez commenter la ligne du volume init dans le conteneur guac_db en ajoutant un # en début de ligne. Ce volume n'est utile que pour initialiser la base de données et ne sera plus utilisé.
Les identifiants par défaut sont guacadmin / guacadmin.

L'interface que vous obtenez est très sobre.

Commencez par vous rendre dans les paramètres, avec le menu disponible en haut à droite en cliquant sur le nom d'utilisateur. Dans l'onglet Utilisateurs, créez un nouvel utilisateur et donnez lui les droits Administrateurs.

Une fois le nouvel utilisateur créé, déconnectez vous et reconnectez-vous avec ce dernier. Retournez dans les réglages et bloquez ou supprimez l'utilisateur par défaut guacadmin.


Sécurité

Pour activer l'authentification à double facteur avec code TOTP et renforcer la sécurité de Guacamole, c'est très simple ! Décommentez la ligne TOTP_ENABLED: 'true' dans la stack et mettez là à jour en la relançant avec la commande docker-compose up -d.

Quand vous accéderez de nouveau à Guacamole et vous identifierez avec votre identifiant, il vous sera demandé de configurer l'authentification à double facteur. Scannez le QR Code avec votre application de gestion TOTP et renseignez le code donné pour valider.

A chaque connexion, vous devrez maintenant saisir le code fourni par l'application en plus de vos identifiant et mot de passe.


Passons maintenant à la configuration des connexions, le but de Guacamole ! Dans les paramètres, rendez-vous dans l'onglet Connexions, et cliquez sur le bouton "Nouvelle Connexion".

Donnez un nom à la connexion, et choisissez le protocole à utiliser (au choix parmi VNC, RDP, SSH, Telnet ou Kubernetes).


SSH

Le protocole SSH permet à un client (un utilisateur ou bien même une machine) d'ouvrir une session interactive sur une machine distante fin d'envoyer des commandes ou des fichiers de manière sécurisée.

Pour le configurer, choisissez SSH en tant que protocole et renseignez dans la partie Paramètres, Réseau, l'adresse IP ou nom d'hôte ainsi que le port pour le serveur que vous êtes en train de configurer (22 étant le port standard du protocole SSH), puis dans la partie Authentification, l'identifiant et son mot de passe (si vous n'enregistrez pas de mot de passe, il vous sera demandé systématiquement, pareil pour l'identifiant). Vous pouvez également personnaliser l'affichage (utile pour différencier vos différents environnements) ou encore exécuter une commande spécifique. Enfin, enregistrez cette connexion.

En complément, si vous cochez la case "Activer SFTP" dans la configuration de la connexion, vous aurez la possibilité de charger ou télécharger des fichiers avec votre hôte depuis votre navigateur.


RDP

Le protocole RDP est aussi appelé communément Bureau à Distance et permet de prendre le contrôle d'un système d'exploitation comme si on était installé devant. Développé par Microsoft, il est disponible sur toutes les versions de Windows mais peut également être installé sur macOS.

Sur Windows 10 ou 11, le Bureau à Distance est disponible uniquement sur les éditions "Professionnel". Pour l'activer, rendez-vous dans le Panneau de configuration et utilisez le champ de recherche pour trouver le paramètre.

Dans Guacamole, ajoutez une nouvelle connexion et choisissez cette fois le protocole RDP. Dans la partie Paramètres, Réseau, saisissez l'adresse IP ou le nom d'hôte de la machine à connecter, ainsi que le port (le port standard du protocole RDP est le 3389). Enfin, dans la partie Authentification, indiquez le nom d'utilisateur et le mot de passe. Plusieurs options matérielles sont disponibles pour transmettre le son, le microphone, les imprimantes, ou monter un partage. D'autres options sont disponibles pour améliorer les performances de la connexion.


Connexion

En revenant sur l'accueil (accessible en cliquant sur votre nom d'utilisateur), vous retrouverez les connexions que vous aurez créé. Cliquez sur une d'entre elles pour vous retrouver connecté à l'hôte distant à travers votre navigateur web.


Astuces

Vous pouvez quitter le terminal avec la commande exit ou avec la combinaison de touches Ctrl + D. Vous pourrez alors choisir de revenir à l'accueil, de vous reconnecter, ou de vous déconnecter de Guacamole.

Lorsque vous êtes connectés, un menu contextuel est disponible en utilisant la combinaison de touches Alt + Ctrl + Shift.
Dans ce menu, vous trouverez :

  • En haut à gauche la session en cours, avec la possibilité d'en ouvrir une nouvelle, ce qui permet de naviguer entre plusieurs connexions simultanément, qui apparaîtront en bas à droite.
  • Toujours en haut, vous trouverez votre session Guacamole ou vous pouvez vous déconnecter, aller à l'accueil ou dans les paramètres.
  • Juste en-dessous, vous aurez le presse-papier Guacamole et pourrez en modifier le contenu avant de le coller dans la fenêtre.
  • Appareil correspond à la partie SFTP et vous permettra d'échanger des fichiers entre votre poste et le poste accédé à distance.
  • Vous pourrez également choisir d'afficher un clavier virtuel ou régler le zoom de l'affichage.

Conclusion

On espère que ce tutoriel mis à jour vous sera utile et vous permettra d'accéder avec Guacamole à votre infrastructure, de manière centralisée, et surtout à travers une simple interface web. On vous conseille fortement de passer par un proxy inversé (NPM par exemple) pour y accéder de l'extérieur, tout en sécurisant la connexion en https et avec un certificat Let's Encrypt. L'utilisation de la double authentification permet également de renforcer le contrôle d'accès à votre infrastructure.

Si vous avez des questions sur cet article, n'hésitez pas à laisser des commentaires ou à venir échanger avec la communauté sur le groupe Telegram.