Guacamole, contrôler vos équipements en SSH ou RDP via une interface Web
Guacamole est un outil développé par Apache permettant d'accéder via un navigateur web à ses différents équipements réseau, que ce soit via SSH, RDP, VNC ou encore TELNET. L'avantage, comme vous l'aurez compris, est qu'il ne nécessite pas de client lourd, ce qui vous permettra de vous connecter sur votre réseau depuis n'importe quel appareil disposant d'un navigateur, et ce, même depuis votre travail, où ces ports sont souvent fermés vers l'extérieur.
Pour fonctionner correctement, Guacamole a besoin de 3 parties : une base de données, un moteur qui va faire office de passerelle et une interface web. On pourrait utiliser les images fournies par Apache pour les 2 derniers (guacamole/guacd en tant que passerelle serveur et guacamole/guacamole pour l'interface web) ainsi que mariadb ou postgres en tant que base de données. Mais il se trouve qu'il existe une version tout en un, packagée pour nous en simplifier la mise en place.
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 /apps/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 > /apps/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:latest
container_name: guacd
restart: unless-stopped
volumes:
- /apps/guacamole/drive:/drive:rw
- /apps/guacamole/record:/record:rw
labels:
- "autoupdate=true"
- "autoupdate.webhook=webhook_url"
networks:
- guacamole-network
guacamole_db:
image: postgres:13.4
container_name: guacamole_db
restart: unless-stopped
environment:
PGDATA: /var/lib/postgresql/data/guacamole
POSTGRES_DB: guacamole_db
POSTGRES_PASSWORD: GUAC_DB_PASSWORD
POSTGRES_USER: guacdb_user
TZ: Europe/Paris
volumes:
- /apps/guacamole/init:/docker-entrypoint-initdb.d:ro
- /apps/guacamole/data:/var/lib/postgresql/data:rw
labels:
- "autoupdate=true"
- "autoupdate.webhook=webhook_url"
networks:
- guacamole-network
guacamole_app:
image: guacamole/guacamole:latest
container_name: guacamole_app
restart: unless-stopped
ports:
- 8080:8080
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
labels:
- "autoupdate=true"
- "autoupdate.webhook=webhook_url"
networks:
- guacamole-network
networks:
guacamole-network:
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.
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.


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 :