Aller au contenu
Accueil » Articles » Mise en place d’un Bastion Apache Guacamole

Mise en place d’un Bastion Apache Guacamole

  • par

Introduction

Guacamole est une solution Open Source gratuite qui permet de mettre en place des accès à distance à travers un portail Web sur différents équipements avec différents protocoles comme le 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. L’un des principaux avantages de cette solution est qu’il n’est pas nécessaire de communiquer les identifiants des différents à machines à l’utilisateur, il faut seulement donner les identifiants d’accès au portail web où l’utilisateur pourra se connecter aux différentes machines voulues. Tous les accès sont enregistrés dans Guacamole, il est donc facile de suivre l’activité des prestataires, enregistrer en vidéo les sessions, ou configurer des horaires d’accès sur les comptes.

Le fonctionnement

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 nous permet de nous connecter à nos serveurs/ordinateurs de bureau distants. Ceci est soutenu par le serveur Tomcat.

Initialisation de la VM

Tout d’abord nous allons utiliser une VM Ubuntu 20.04 avec la configuration ci-dessous pour réaliser ce projet :

Une fois la VM lancer nous devons la mettre à jour et installer le ssh pour pouvoir nous y connecter plus facilement :

apt update

apt upgrade

apt install openssh-server

systemctl enable ssh

systemctl start ssh

On édite ensuite le fichier de configuration du ssh pour autoriser la connexion avec l’utilisateur « root », en rajoutant la ligne suivante :

nano /etc/ssh/sshd_config

PermitRootLogin yes

Il faut ensuite exécuter la commande suivante en root pour modifier le mot de passe, si nous n’effectuons pas cela nous ne pourrons pas nous connecter en ssh avec l’utilisateur « root » :

passwd root

#On renseigne le mot de passe que l’on souhaite

Installation de l’outil

Une fois connecter en ssh nous pouvons commencer l’installation de guacamole, pour cela il nous faut installer différents paquets nécessaires au bon fonctionnement de cet outil :

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

 

Ensuite, nous exécutons la commande ci-dessous pour installer le package Apache Tomcat 9 (tomcat9), que nous utiliserons plus tard pour exécuter l’application client Guacamole :

apt install tomcat9 -y

systemctl enable –now tomcat9

 

Une fois tomcat9 installé, nous pouvons installer guacamole :

wget https://dlcdn.apache.org/guacamole/1.4.0/source/guacamole-server-1.4.0.tar.gz

tar -xzf guacamole-server-1.4.0.tar.gz

cd guacamole-server-1.4.0./configure —with-systemd-dir=/etc/systemd/system/ –disable-dependency-tracking

Nous exécutons maintenant la commande « make » qui permet de compiler le serveur Guacamole sur le serveur Linux et ainsi installer les fichiers du serveur dans le répertoire /usr/local/bin :

make

make install

ldconfig

systemctl daemon-reload

systemctl enable –now guacd

Configuration de Guacamole

Nous définissons le répertoire de configuration de Guacamole pour tomcat9 :

echo GUACAMOLE_HOME=/etc/guacamole >> /etc/default/tomcat9

Nous créons ensuite deux répertoires qui nous servirons par la suite :

  • extensions : répertoire qui stocke les extensions Guacamole.
  • lib : répertoire qui stocke les bibliothèques dont le serveur Guacamole a besoin.

mkdir -p /etc/guacamole/{extensions,lib}

Nous devons ensuite créer deux fichiers qui permettront la configuration de guacamole

touch /etc/guacamole/{guacamole.properties,guacd.conf}

Installation de MariaDB

Une fois Guacamole configurer, nous allons maintenant installer une méthode d’authentification grâce à MariaDB (système de gestion de base de données). Pour cela nous devons installer la version client et la version serveur :

apt install mariadb-server mariadb-client

On créer ensuite une base de données « guacamole_db » :

mysql -u root -p

CREATE DATABASE guacamole_db;

exit

On installe ensuite l’extension d’authentification de la base de données Guacamole :

wget https://dlcdn.apache.org/guacamole/1.4.0/binary/guacamole-auth-jdbc-1.4.0.tar.gz

tar -xf guacamole-auth-jdbc-1.4.0.tar.gz

cd guacamole-auth-jdbc-1.4.0/mysql/

Nous exécutons la commande « cat » ci-dessous pour importer le schéma de base de données Apache Guacamole MariaDB dans la  base de données « guacamole_db » :

ls

cat schema/*.sql | mysql -u root -p guacamole_db

Enfin, nous exécutons les requêtes MariaDB ci-dessous pour créer un utilisateur de base de données :

mysql -u root -p

CREATE USER ‘guacamole_user’@‘localhost’ IDENTIFIED BY ‘StrongPassword’;

GRANT SELECT,INSERT,UPDATE,DELETE ON guacamole_db.* TO ‘guacamole_user’@‘localhost’;

FLUSH PRIVILEGES;

exit

Installation de l'extension d'authentification de base de données

On copie l’extension dans le répertoire de Guacamole :

cp guacamole-auth-jdbc-mysql-1.4.0.jar /etc/guacamole/extensions/guacamole-auth-jdbc-mysql.jar

On télécharge ensuite le connecteur MySQL/Java et on déplace le fichier dans le répertoire de Guacamole :

wget https://cdn.mysql.com//Downloads/Connector-J/mysql-connector-java_8.0.30-1ubuntu20.04_all.deb

dpkg -i mysql-connector-java_8.0.301ubuntu20.04_all.deb

cp /usr/share/java/mysql-connector-java-8.0.30.jar /etc/guacamole/lib/mysql-connector.jar

Configuration d'Apache Guacamole avec la base de données MariaDB

Maintenant que l’on a installé les extensions nous pouvons les configurer pour cela il faut aller modifier le fichier « guacamole.properties » et rajouter les lignes suivantes :

nano /etc/guacamole/guacamole.properties

 

#MySQL

mysql-hostname: localhost

mysql-port: 3306

mysql-database: guacamole_db

mysql-username: guacamole_user

mysql-password: StrongPassword

mysql-auto-create-accounts: true

On configure ensuite le fichier guacd.conf en rajoutant les informations du serveur :

nano /etc/guacamole/guacd.conf

 

[server]

bind_host = 0.0.0.0

bind_port = 4822

On redémarre les services pour que les changements soient pris en compte :

sudo systemctl restart guacd

sudo systemctl restart tomcat9

Installation de l'application Web client Guacamole

Maintenant que nous avons installé la partie serveur, il faut installer la partie client en exécutant les commandes suivantes :

wget https://dlcdn.apache.org/guacamole/1.4.0/binary/guacamole-1.4.0.war

mv guacamole-1.4.0.war guacamole.war

cp guacamole.war /var/lib/tomcat9/webapps

ls /var/lib/tomcat9/webapps

Configuration d'Apache en tant que proxy inverse pour le client Guacamole

Afin d’accéder à la page web de manière sécurisée nous allons mettre en place un proxy inverse avec un serveur web Apache et un chiffrement SSL.

Pour cela nous installons apache2 et nous activons le différent module nécessaire à la mise en place d’un proxy inverse :

sudo apt install apache2 -y

sudo a2enmod proxy proxy_wstunnel proxy_http ssl rewrite

systemctl restart apache2

Nous créons ensuite nos certificats grâce à OpenSSL :

mkdir /etc/openssl/

openssl req –new -x509 -sha256 -newkey rsa :2048 -nodes -keyout guacamole.key.pem -days 3650out guacamole.cert.pem

cp guacamole.cert.pem  /etc/openssl/guacamole.cert.pem

cp guacamole.key.pem /etc/openssl/guacamole.key.pem

Maintenant, nous créons un nouveau fichier de configuration d’hôte virtuel :

nano /etc/apache2/sites-available/guacamole.conf

 

 

<VirtualHost * :80>

    ServerName afo-bastion.cerealog.fr

    ServerAlias afo-bastion.cerealog.fr

 

    Redirect permanent / https://afo-bastion.cerealog.fr/

</VirtualHost>

 

<VirtualHost * :443>

    ServerName afo-bastion.cerealog.fr

    ServerAlias www.afo-bastion.cerealog.fr

 

    <If « %{HTTP_HOST} == ‘www.afo-bastion.cerealog.fr’ »>

    Redirect permanent / https://afo-bastion.cerealog.fr/

    </If>

 

    ErrorLog /var/log/apache2/example.io-error.log

    CustomLog /var/log/apache2/example.io-access.log combined

 

    SSLEngine On

    SSLCertificateFile /etc/openssl/guacamole.cert.pem

    SSLCertificateKeyFile /etc/openssl/guacamole.key.pem

 

    <Location />

        Order allow,deny

        Allow from all

        ProxyPass http ://127.0.0.1:8080/guacamole/flushpackets=on

        ProxyPassReverse http://127.0.0.1:8080/guacamole/

    </Location>

 

    <Location /websocket-tunnel>

        Order allow,deny

        Allow from all

        ProxyPass ws ://127.0.0.1 :8080/guacamole/websocket-tunnel

        ProxyPassReverse ws ://127.0.0.1 :8080/guacamole/websocket-tunnel

    </Location>

 

</VirtualHost>

 

Nous exécutons les commandes suivantes pour activer la configuration :

a2ensite guacamole.conf

apachectl configtest

 

Nous devons ensuite mettre en place la configuration suivante car elle permet à une
application dans Tomcat de voir la véritable adresse IP du client. Nous aurons
besoin de cette configuration car le client Guacamole de l’application
principale se trouve derrière le proxy inverse Apache.

Nano /etc/tomcat9/server.xml

 

<Valve className= »org.apache.catalina.valves.RemoteIpValve »

            internalProxies= »127.0.0.1 »

            remoteIpHeader= »x-forwarded-for »

            remoteIpProxiesHeader= »x-forwarded-by »

            protocolHeader= »x-forwarded-proto »
/>

 

Enfin nous redémarrons les services pour appliquer les modifications :

sudo systemctl restart apache2

sudo systemctl restart tomcat9

Mise en place de LDAP

Maintenant que nous pouvons nous connecter avec MySQL à Apache Guacamole, nous allons voir qu’il est aussi possible de lier un annuaire LDAP pour se connecter avec des comptes présents dans cet annuaire.

Dans cet exemple nous allons utiliser l’annuaire LDAP d’un Active Directory d’un Windows Server. Nous allons donc créer un compte qui va permettre à Guacamole de venir lire l’annuaire (ce compte n’a besoin d’aucun droit particulier) :

Plus-tard, il faudra ensuite renseigner le mot de passe du compte de lecture dans la configuration de Guacamole

Nous pouvons aussi créer un groupe « GRP_Guacamole » où nous renseignerons tous les utilisateurs ayant un accès à Guacamole :

Maintenant que notre annuaire LDAP est prêt, nous pouvons installer extension « guacamole-auth-ldap » sur le serveur :

wget https://downloads.apache.org/guacamole/1.4.0/binary/guacamole-auth-ldap-1.4.0.tar.gz

tar -xzf guacamole-auth-ldap-1.4.0.tar.gz

cd guacamole-auth-ldap-1.4.0/

cp guacamole-auth-ldap-1.4.0.jar /etc/guacamole/extensions/

 

On édite le fichier de configuration de guacamole en renseignant les lignes suivantes :

nano /etc/guacamole/guacamole.properties

 

guacd-hostname : localhost

guacd-port : 4822

auth-provider :  net.sourceforge.guacamole.net.auth.ldap.LDAPAuthenticationProvider

 

On rajoute ensuite dans ce même fichier la configuration pour le LDAP :

#LDAP

ldap-hostname : IP

ldap-port : 389

ldap-encryption-method : none

ldap-username-attribute : sAMAccountName

ldap-search-bind-dn : CN=LectureLDAP,CN=Users,DC=alban,DC=local

ldap-search-bind-password : MotDePasse

ldap-user-base-dn : CN=Users,DC=alban,DC=local

ldap-follow-referrals : true

ldap-dereference-aliases : always

ldap-user-search-filter : (&(objectClass=person)(sAMAccountName=*)(memberOf :1.2.840.113556.1.4.1941 :=CN=GRP_Guacamole,CN=Users,DC=alban,DC=local)( !(userAccountControl :1.2.840.113556.1.4.803 :=2)))

 

Pour finir la configuration de LDAP nous allons devoir nous connecter en mode graphique avec le compte par défaut « guacadmin » ainsi lorsque nous nous connectons et que nous allons voir les utilisateurs présents, nous ne voyons qu’un compte (MySQL). 

Pour faire apparaitre les comptes LDAP nous devons nous connecter avec un compte de l’annuaire LDAP une première fois, puis nous reconnecter avec le compte « guacadmin ».

Maintenant nous pouvons voir que notre compte LDAP apparaît bien. Ainsi, pour faire apparaitre tous les comptes présents dans le groupe « GRP_Guacamole » nous allons devoir mettre l’utilisateur (LDAP) avec lequel nous nous sommes connectés en administrateur :

Ainsi, lorsque nous nous connectons avec le compte LDAP administrateur nous voyons apparaitre tous les autres comptes de l’annuaire :

Mise en place double authentification

Pour mettre en place la double authentification qui apporte plus de sécurité, nous devons installer l’extension « guacamole-auth-totp » et la déplacer dans le répertoire de Guacamole :

wget https://dlcdn.apache.org/guacamole/1.4.0/binary/guacamole-auth-totp-1.4.0.tar.gz

tar -zxf guacamole-auth-totp-1.4.0.tar.gz

cd guacamole-auth-totp-1.4.0/

cp guacamole-auth-totp-1.4.0.jar /etc/guacamole/extensions/

 

On édite le fichier de configuration de guacamole en rajoutant les lignes suivantes :

nano /etc/guacamole/guacamole.properties

 

#TOTP

totp-issuer : apache_guacamole

totp-digits : 6

totp-period : 30

totp-mode : sha512

On redémarre les services suivants pour appliquer les modifications :

systemctl restart tomcat9

systemctl restart guacd

Ainsi, lorsque l’on se connecte pour la première fois, nous devons scanner un QR code avec l’application Google Authenticator :

Désormais lorsque nous voulons nous connecter nous devons indiquer le code affiché dans l’application :

Mise place des connexions

Une fois que les utilisateurs sont bien configurés, nous pouvons passer à la partie la plus intéressante : La configuration de la connexion sur les équipements. Il est possible de configurer plusieurs types de connexions avec Guacamole, comme Kubernetes, RDP, SSH, Telnet, VNC. Nous allons donc voir maintenant deux types de connexion parmi les 5 : RDP et SSH.

Pour commencer la configuration du RDP, il est nécessaire de rentrer les commandes ci-dessous sur le serveur Guacamole pour qu’il n’y est pas d’erreurs lors de la connexion :

useradd -M -d /var/lib/guacd/ -r -s /sbin/nologin -c « Guacd User » guacd

mkdir /var/lib/guacd

chown -R guacd: /var/lib/guacd

sed -i ‘s/daemon/guacd/’ /etc/systemd/system/guacd.service

systemctl daemon-reload

systemctl restart guacd

 

Une fois ces commandes entrées nous pouvons nous rendre dans les paramètres sur la partie graphique de Guacaomle, dans l’onglet « Connexions » et cliquer sur « Nouvelle Connexion » :

Tout d’abord nous devons définir le nom de la machine et sélectionner le protocole utilisé (RDP) :

Nous devons ensuite configurer la partie réseau en mettant le nom d’hôte (FQDN ou IP) le numéro de port 3389 qui correspond au protocole RDP. Nous devons aussi renseigner les identifiants d’authentification, le mot de passe et le domaine s’il y en a un. Il faut aussi penser à cocher la case « ignorer le certificat du serveur » sinon la connexion ne se fera pas.

Ainsi lorsque nous retournons sur la page d’accueil nous pouvons nous connecter à notre machine précédemment configurée :

Pour la connexion SSH, il faut effectuer la même manipulation mais choisir le protocole SSH :

Nous devons ensuite configurer la partie réseau en mettant le nom d’hôte (FQDN ou IP) le numéro de port 22 qui correspond au protocole SSH. Nous devons aussi renseigner les identifiants d’authentification et le mot de passe :

Ainsi, lorsque nous retournons sur la page d’accueil nous pouvons nous connecter à notre machine précédemment configurée :

Enregistrement des sessions

Pour configurer l’enregistrement des sessions des utilisateurs nous devons tout d’abord créer un répertoire records où seront stockées les vidéos nous devons ensuite mettre l’utilisateur guacd propriétaire de ce fichier. Nous devons créé un fichier que l’o nommera « vidéo » qui servira de base pour la création des fichiers vidéo. Puis nous installons VLC qui nous permettra de visionner les vidéos :

mkdir /opt/guacamole/ /opt/guacamole/records/

touch /opt/guacamole/records/video

chown -R guacd: /opt/guacamole/records/

apt install vlc

 

Il faut ensuite se rendre sur la partie graphique de guacamole, aller dans les paramètres d’une connexion en remplissant la partie « Enregistrement Ecran » comme ceci :

Ainsi lorsque nous lançons une session, un fichier « video.1 » est créer :

Pour pouvoir visionner la vidéo il faut tout d’abord l’encoder, pour cela nous utilisons la commande « guacenc » :

Nous obtenons ensuite une vidéo en .mv4 que nous pouvons visionner avec VLC :

Étiquettes:

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *