Créer un bastion Guacamole auto-hébergé avec Docker

Dans ce tutoriel, je vais vous expliquer comment déployer Guacamole en conteneur avec Docker et docker-compose.

Dans mon premier tutoriel sur Guacamole, j’explique comment installer Guacamole directement sur Ubuntu et son utilisation en tant que bastion.

Comment vous allez pouvoir le voir, le déploiement de Guacamole en conteneur est très simple et rapide. La maintenance de l’application est aussi plus facile notamment pour les mises à jour, car les images des conteneurs contiennent déjà les différentes extensions et plugin.

Pour commencer, vous avez besoin d’un serveur Linux avec Docker et Docker Compose d’installés, vous trouverez un tutoriel qui explique pas à pas : Ubuntu 24.04 : Installation de Docker et Docker compose

Si vous lisez régulièrement mes tutoriels sur Docker et les conteneurs, vous avez maintenant que j’ai l’habitude de travailler dans le dossier /containers sur mes environnements Ubuntu.

Commencer par créer un dossier qui va conteneur les différents fichiers et dossier pour notre environnement Guacamole.

sudo mkdir guacamole

Dans le dossier guacamole, créer le fichier docker-compose.yml.

sudo touch docker-compose.yml

Maintenant, ouvrez le fichier docker-compose.yml pour l’éditeur :

sudo nano docker-compose.yml

Voici le conteneu du fichier docker-compose.yml, adapter le à votre environnement et changer les mots de passe des comptes MYSQL.

version: '3.8'

services:
    guacamole_db:
        container_name: guacamole_db
        hostname: guacamole_db
        image: mariadb:10.11
        restart: always
        volumes:
            - ./guacamole_db:/var/lib/mysql
        environment:
            - MYSQL_ROOT_PASSWORD=change-me-root-password
            - MYSQL_DATABASE=guacamole_db
            - MYSQL_USER=guacamole_user
            - MYSQL_PASSWORD=change-me-user-password
        expose:
            - 3306
    
    guacd:
        container_name: guacd
        hostname: guacd
        image: guacamole/guacd:latest
        restart: always
        volumes:
            - ./guacd_drive:/drive:rw 
            - ./guacd_record:/record:rw 
        expose:
            - 4822

    guacamole:
        container_name: guacamole
        hostname: guacamole
        restart: always
        image: guacamole/guacamole:latest
        depends_on:
            - guacamole_db
            - guacd
        ports:
            - 8080:8080
        links:
            - guacd
        environment:
            - GUACD_HOSTNAME=guacd
            - MYSQL_HOSTNAME=guacamole_db
            - MYSQL_DATABASE=guacamole_db
            - MYSQL_USER=guacamole_user
            - MYSQL_PASSWORD=change-me-user-password
            - REMOTE_IP_VALVE_ENABLED=true

Vous pouvez aussi utiliser les fichiers du dépôt suivant : https://git.rdr-it.com/docker/guacamole. Une fois clone, éditer le fichier .env

Télécharger les images et démarrer les conteneurs :

sudo docker compose pull && sudo docker compose up -d

Il faut maintenant initialiser la base de données MySQL.

Passer en root :

sudo su

Récupérer le script d’initialisation de la base :

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

Injecter le fichier de la base de données :

docker exec -i guacamole_db mysql --user guacamole --password=change-me guacamole_db < initdb.sql

La commande doit être adapter à votre configuration notamment les mots de passe.

Une fois les conteneurs démarrés, vous pouvez suivre le tutoriel Guacamole : gérer les accès à votre environnement informatique à la section Utilisation de Guacamole

L’utilisation de conteneur permet de gagner beaucoup de temps dans le déploiement de Guacamole mais aussi de gagner du temps pour les mises à jour.

Pour mettre à jour, il vous suffit d’utiliser ces lignes de commande :

sudo docker compose pull && sudo docker compose up -d

Romain Drouche
Architecte Système | MCSE: Core Infrastructure
Expert en infrastructures IT avec plus de 15 ans d’expérience sur le terrain. Actuellement Chef de projet Systèmes et Réseaux et Référent SSI (Sécurité des Systèmes d’Information), je mets mon expertise au service de la fiabilité et de la sécurité des environnements technologiques.

Laisser un commentaire