Guacamole – mise en place d’un portail d’accès distant

Introduction

Guacamole est un projet open-source qui permet de créer un portail d’accès distant pour vos applications et vos ordinateurs. Il est idéal pour les entreprises qui souhaitent donner à leurs employés un accès à distance aux ressources de l’entreprise, tout en maintenant la sécurité et la conformité.

Fonctionnalités principales

  • Accès à distance: Guacamole vous permet de vous connecter à distance à vos ordinateurs, vos serveurs et vos applications, à partir d’un navigateur web. Il prend en charge les protocoles RDP, VNC, SSH et Telnet, ce qui permet de se connecter à presque tous les systèmes d’exploitation et à toutes les applications.
  • Authentification unique: Guacamole utilise des mécanismes d’authentification tels que LDAP, CAS et RADIUS pour s’assurer que seuls les utilisateurs autorisés peuvent accéder aux ressources de l’entreprise. Il prend également en charge l’authentification à deux facteurs pour une sécurité accrue.
  • Gestion des utilisateurs et des groupes: Guacamole vous permet de créer des utilisateurs et des groupes, et d’attribuer des autorisations à chacun d’eux. Cela vous permet de contrôler qui a accès à quelles ressources, et de faciliter la gestion des utilisateurs et des groupes.
  • Audit et journalisation: Guacamole enregistre toutes les activités des utilisateurs, y compris les connexions, les déconnexions et les modifications de paramètres. Cela vous permet de suivre les activités de vos utilisateurs et de détecter les anomalies.
  • Intégration avec d’autres outils: Guacamole peut être intégré à d’autres outils tels que WordPress, pour donner accès à des ressources distantes depuis le site web.

Cas d’utilisation

  • Accès à distance aux ordinateurs de bureau: Guacamole permet aux employés de se connecter à distance à leurs ordinateurs de bureau, même lorsqu’ils sont en déplacement ou à la maison. Cela permet de travailler à distance de manière efficace, sans avoir à se soucier de la compatibilité des logiciels. On peut, par exemple, utiliser un rebond TSE pour ce faire.
  • Accès à distance aux serveurs: Guacamole permet aux administrateurs système de se connecter à distance aux serveurs de l’entreprise, pour gérer les applications et les services. Cela permet de gérer les serveurs de manière efficace, même lorsque vous n’êtes pas sur place.
  • Accès à distance aux applications métier: Guacamole permet aux employés de se connecter à distance aux applications métier de l’entreprise, telles que les logiciels de gestion de la comptabilité ou de la gestion de projets. Cela permet de travailler sur ces applications, même lorsque vous n’êtes pas sur place.
  • Intégration avec WordPress: Guacamole peut être intégré à un site web sous WordPress, pour donner accès à des ressources distantes depuis le site web. Cela permet aux utilisateurs de se connecter aux ressources de l’entreprise, sans avoir à utiliser un client de bureau ou un VPN.

Composants

Guacamole est composé de plusieurs composants qui travaillent ensemble pour permettre l’accès distant aux machines. Les principaux composants de Guacamole sont :

  1. Guacamole Client : C’est l’application web qui permet aux utilisateurs de se connecter aux machines distantes. Il est généralement intégré à un navigateur web pour permettre une expérience utilisateur transparente.
  2. guacd : C’est le service de décodage de Guacamole. Il reçoit les informations de l’interface utilisateur et les transmet aux protocoles de bureau distant tels que RDP, VNC ou SSH. Il effectue également la compression et la décompression des données pour optimiser la performance.
  3. Authentification : Guacamole utilise une authentification basée sur des utilisateurs et des groupes pour contrôler l’accès aux connexions. Il peut utiliser des sources d’authentification telles que le LDAP, la base de données, TOTP, etc.
  4. Connexions : Guacamole permet aux utilisateurs de se connecter aux machines distantes en utilisant différents protocoles tels que RDP, VNC, SSH, Telnet, etc. Les connexions sont définies par un ensemble de paramètres tels que l’adresse IP, le nom d’utilisateur, le mot de passe, etc.
  5. Plugins : Guacamole est extensible grâce à l’utilisation de plugins. Les plugins ajoutent des fonctionnalités supplémentaires à l’application telles que l’authentification

Mise en place de Guacamole avec Kubernetes

Voici les étapes pour déployer Guacamole sur Kubernetes :

  1. Créez un fichier de configuration pour guacd en utilisant un fichier YAML. Il est important de spécifier les paramètres de configuration pour guacd, tels que les protocoles, les utilisateurs et les groupes.
  2. Créez un fichier de configuration pour guacamole en utilisant un fichier YAML. Il est important de spécifier les paramètres de configuration pour guacamole, tels que les informations d’authentification et les paramètres de connexion.
  3. Créez un fichier de configuration pour la base de données en utilisant un fichier YAML. Il est important de spécifier les paramètres pour la base de données, tels que les informations d’authentification et les paramètres de stockage.
  4. Utilisez la commande kubectl apply pour déployer guacd, guacamole et la base de données sur votre cluster Kubernetes.
  5. Utilisez la commande kubectl get pods pour vérifier le statut des pods et s’assurer qu’ils sont en cours d’exécution.
  6. Utilisez la commande kubectl expose pour exposer les services guacd et guacamole en utilisant un type de service approprié, comme NodePort ou LoadBalancer.
  7. Utilisez la commande kubectl get services pour vérifier le statut des services et obtenir l’URL d’accès à Guacamole.

Exemple de fichier de configuration pour guacd (backend)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: guacd
spec:
  replicas: 1
  selector:
    matchLabels:
      app: guacd
  template:
    metadata:
      labels:
        app: guacd
    spec:
      containers:
      - name: guacd
        image: guacamole/guacd
        ports:
        - containerPort: 4822
        env:
        - name: GUACD_LOG_LEVEL
          value: "debug"
        - name: GUACD_DATABASE_TYPE
          value: "mysql"
        - name: GUACD_DATABASE_HOSTNAME
          value: "guac-db"
        - name: GUACD_DATABASE_PORT
          value: "3306"
        - name: GUACD_DATABASE_NAME
          value: "guacamole_db"
        - name: GUACD_DATABASE_USER
          value: "guacamole_user"
        - name: GUACD_DATABASE_PASSWORD
          value: "password"

Ce fichier de configuration YAML utilise un déploiement Kubernetes pour lancer un conteneur guacd. Il spécifie l’image à utiliser, les ports à exposer et les variables d’environnement nécessaires pour configurer guacd pour se connecter à une base de données MySQL externe. Il vous faudra remplacer les valeurs des variables avec les valeurs appropriées pour votre installation.

Exemple de fichier de configuration pour guacamole (frontend)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: guacamole
spec:
  replicas: 1
  selector:
    matchLabels:
      app: guacamole
  template:
    metadata:
      labels:
        app: guacamole
    spec:
      containers:
      - name: guacamole
        image: guacamole/guacamole
        ports:
        - containerPort: 8080
        env:
        - name: GUACAMOLE_HOME
          value: /etc/guacamole
        - name: GUACAMOLE_EXT
          value: /etc/guacamole/extensions
        - name: GUACAMOLE_GUACD_HOSTNAME
          value: "guacd"
        - name: GUACAMOLE_GUACD_PORT
          value: "4822"
        - name: GUACAMOLE_AUTH_JDBC_DRIVER
          value: "org.mariadb.jdbc.Driver"
        - name: GUACAMOLE_AUTH_JDBC_URL
          value: "jdbc:mariadb://guac-db:3306/guacamole_db?user=guacamole_user&password=password"
        - name: GUACAMOLE_AUTH_LDAP_PROTOCOL
          value: "ldap"
        - name: GUACAMOLE_AUTH_LDAP_HOSTNAME
          value: "ldap.example.com"
        - name: GUACAMOLE_AUTH_LDAP_PORT
          value: "389"
        - name: GUACAMOLE_AUTH_LDAP_USER_BASE_DN
          value: "ou=users,dc=example,dc=com"
        - name: GUACAMOLE_AUTH_LDAP_USERNAME_ATTRIBUTE
          value: "uid"
        - name: GUACAMOLE_AUTH_LDAP_SEARCH_BIND_DN
          value: "cn=admin,dc=example,dc=com"
        - name: GUACAMOLE_AUTH-LDAP_SEARCH_BIND_PASSWORD
          value: "password"

Ce fichier YAML définit un déploiement pour guacamole, qui utilise l’image officielle Docker de guacamole, et expose le port 8080 pour les connexions. Il définit également un environnement pour définir le répertoire de configuration de Guacamole, ainsi qu’un volume pour stocker les fichiers de configuration et les variables d’environnement nécessaires pour configurer guacamole pour se connecter à une base de données MySQL externe ainsi qu’à une connexion d’authentification LDAP. Il vous faudra remplacer les valeurs des variables avec les valeurs appropriées pour votre installation.

Il est important de noter que ces fichiers YAML ne contiennent pas de configuration spécifique, il faut donc les adapter à votre infrastructure et à vos besoins.

Exemple de configuration de reverse proxy sous caddy

D’autre part, j’avais utilisé caddy en reverse proxy pour publier l’application sur le port 443, voici un fichier d’exemple sous caddy v1 :

*:80, http://portail.test.fr {
  redir https://{host}{uri}
}

*:443, https://portail.test.fr {
    tls {
	load "C:/caddy/certs"
    }
    proxy / https://portail.test.intra/guacamole {
    insecure_skip_verify
    transparent
    websocket
  }
  log "C:/caddy/logs_ssl.txt"
}

Plugins utiles

Il existe de nombreux plugins pour Guacamole qui ajoutent des fonctionnalités supplémentaires à l’application. Les plugins les plus utiles et populaires pour Guacamole comprennent :

  • guacamole-auth-totp: Ce plugin ajoute une authentification à deux facteurs à Guacamole en utilisant des codes TOTP (Temps basé sur un mot de passe). Il est basé sur l’application mobile Google Authenticator.
  • guacamole-auth-ldap: Ce plugin ajoute une authentification LDAP à Guacamole, qui permet de se connecter à un annuaire LDAP pour l’authentification des utilisateurs. Il est utile pour les entreprises qui utilisent déjà un annuaire LDAP pour gérer les utilisateurs.
  • guacamole-auth-jdbc: Ce plugin ajoute une authentification JDBC à Guacamole, qui permet de se connecter à une base de données pour l’authentification des utilisateurs. Il est utile pour les entreprises qui utilisent déjà une base de données pour gérer les utilisateurs.
  • guacamole-auth-duo: Ce plugin ajoute une authentification à deux facteurs à l’aide de l’API de Duo Security pour l’authentification des utilisateurs. Il est utile pour les entreprises qui utilisent déjà Duo Security pour la sécurité de l’authentification.
  • guacamole-auth-cas: Ce plugin ajoute une authentification CAS à Guacamole, qui permet de se connecter à un serveur CAS pour l’authentification des utilisateurs. Il est utile pour les entreprises qui utilisent déjà CAS pour l’authentification centralisée.

Variables utiles

Afin de configurer les connexions dans l’interface guacamole, vers vos serveurs TSE, serveurs internes ou vos postes utilisateurs, vous pouvez récupérer les informations génériques de la connexion utilisateur en cours en utilisant des variables.

Voici quelques-unes des variables les plus couramment utilisées pour configurer des connexions sous Guacamole :

  • GUAC_PROTOCOL: Spécifie le protocole utilisé pour la connexion (RDP, VNC, SSH, Telnet, etc.).
  • GUAC_HOSTNAME: Spécifie l’adresse IP ou le nom d’hôte de la machine distante à laquelle vous voulez vous connecter.
  • GUAC_PORT: Spécifie le port utilisé pour la connexion.
  • GUAC_USERNAME: Spécifie le nom d’utilisateur utilisé pour la connexion.
  • GUAC_PASSWORD: Spécifie le mot de passe utilisé pour la connexion.
  • GUAC_DOMAIN: Spécifie le domaine utilisé pour la connexion (uniquement pour RDP).
  • GUAC_SECURITY: Spécifie le type de sécurité utilisé pour la connexion (uniquement pour RDP).
  • GUAC_IGNORE_CERT: Spécifie si Guacamole doit ignorer les problèmes de certificat (uniquement pour SSH et Telnet).
  • GUAC_PRIVATE_KEY: Spécifie le chemin vers la clé privée utilisée pour la connexion (uniquement pour SSH).
  • GUAC_COLOR_DEPTH: Spécifie la profondeur de couleur utilisée pour la connexion (uniquement pour RDP).

Il existe beaucoup d’autres variables qui peuvent être utilisées pour configurer des connexions sous Guacamole, cela dépendra de vos besoins spécifiques. Il est recommandé de consulter la documentation de Guacamole pour obtenir une liste complète des variables disponibles et de comprendre comment les utiliser.

Modifier la page d’accueil

Il existe plusieurs façons de modifier les éléments de la page d’accueil de Guacamole.

branding.jar

Il est possible de personnaliser l’interface de Guacamole en utilisant le fichier branding.jar, qui permet de remplacer les images et les feuilles de style par défaut de Guacamole. Voici les étapes pour utiliser branding.jar pour personnaliser l’interface de Guacamole :

  1. Téléchargez le fichier branding.jar à partir du site web de Guacamole.
  2. Placez branding.jar dans le répertoire de Guacamole (généralement /usr/share/tomcat9/.guacamole/)
  3. Créez un répertoire pour les fichiers de personnalisation (par exemple, /usr/share/tomcat9/.guacamole/branding/)
  4. Placez les fichiers de personnalisation (images, feuilles de style CSS, etc.) dans ce répertoire
  5. Redémarrez le serveur Tomcat pour charger les fichiers de personnalisation
  6. Accédez à l’interface de Guacamole et vérifiez si les fichiers de personnalisation ont été appliqués.

En modifiant les fichiers de thème

Voici les étapes pour remplacer le logo de Guacamole :

  1. Téléchargez le logo que vous souhaitez utiliser et placez-le dans le répertoire de thème de Guacamole (généralement /etc/guacamole/guacamole-web/extensions/guacamole-auth-jdbc/webapp/ext/images)
  2. Ouvrez le fichier de thème CSS correspondant à votre thème actuel, généralement dans le répertoire /etc/guacamole/guacamole-web/extensions/guacamole-auth-jdbc/webapp/ext/css/guacamole.css
  3. Cherchez la ligne ou le block qui correspond à l’affichage de logo actuel, généralement quelque chose comme
background-image: url(../images/logo.png)
  1. Remplacez « logo.png » par le nom de votre nouveau logo
  2. Sauvegardez le fichier CSS et rechargez la page d’accueil de Guacamole pour voir les modifications.

Il est important de noter que ces étapes peuvent varier en fonction de votre installation de Guacamole et de votre thème utilisé. Il est donc important de vérifier la documentation de votre installation pour obtenir des informations plus précises. Il est également important de faire une sauvegarde des fichiers avant de les modifier pour éviter tout problème potentiel.

Conclusion

Guacamole est un projet open-source très utile pour les entreprises qui souhaitent donner à leurs employés un accès à distance aux ressources de l’entreprise. Il prend en charge les protocoles RDP, VNC, SSH et Telnet, et permet une authentification unique et une gestion des utilisateurs et des groupes. Il est également possible d’intégrer Guacamole à un site web sous WordPress.