I Présentation

C’est un reverse proxy html/rdp très prometteur ! Il est Open source et permet, à travers une interface web (full html5), de faire de la prise en main de bureau.

Il supporte les protocoles suivants :

  • rdp ;
  • vnc ;
  • ssh ;
  • telnet.

Sous forme de schéma, voici ce que propose « Guacamole »

Pour un résultat suivant :

 

Ce produit ne fonctionne que sous linux. Il s’articule autour de 2 composants principaux :

  • le « guacd », service linux qui effectue les requêtes rdp, vnc, etc…
  • une application web développée en java.

Le site officiel se trouve à l’adresse suivante : http://guacamole.incubator.apache.org/

 

II Installation

II.1 A partir des paquets d’une distribution Linux

 

[pastacode lang= »bash » manual= »yum%20install%20guacd » message= » » highlight= » » provider= »manual »/]

 

II.2 A la main ….

La distribution linux utilisée est CENTOS 7.

II.2.1 Schéma de principe mis en œuvre

 

 

En rouge la solution guacamole dont les composants se trouvent sur le site officiel. Elle repose sur 2 parties distinctes :

  • un service nommé GUACD qui assure les interrogations de type « remote contrôle » aux VM souhaitées ;
  • un site web (application .war) s’exécutant sur une plateforme TOMCAT qui fait le lien entre l’utilisateur et le service GUACD.

En bleu, les services à mettre en place pour :

  • assurer le fonctionnement de guacamole (Tomcat, base de données) ;
  • s’intégrer à un SI par l’utilisation d’un CAS (SSO)

 

II.2.2 Installation des services nécessaires

L’installation de GUACD va se faire manuellement. Pour cela il faut installer les paquets permettant de compiler :

# installation des outils compilation
yum install -y automake
yum install -y autoconf
yum install -y libtool

Ensuite il faut installer les sources des différentes librairies qui seront utilisées par GUACD :

  • concernant les dépendances obligatoires :
# Dépedances obligatoires
# Installation des dépendances de développement obligatoires  pour compiler GUACD "
yum install -y cairo-devel
yum install -y libjpeg-turbo-devel
yum install -y libjpeg-devel
yum install -y libpng-devel
yum install -y uuid-devel
  • concernant les dépendances optionnelles (on les met toutes)
# Installation des dépendances optionnelles de développement pour compiler GUACD "
yum install -y ffmpeg-devel
yum install -y freerdp-devel
yum install -y pango-devel
yum install -y libssh2-devel
yum install -y libtelnet-devel
yum install -y libvncserver-devel
yum install -y pulseaudio-libs-devel
yum install -y openssl-devel
yum install -y libvorbis-devel
yum install -y libwebp-devel

Télécharger sur le site les fichiers sources puis les décompresser. Les fichiers « guacamole-server-xxx » concerne le service « GUACD ».

# Récupération du code source
mkdir ../guacd
wget http://www.apache.org/dist/incubator/guacamole/0.9.10-incubating/source/guacamole-server-0.9.10-incubating.tar.gz -P ../guacd
tar xzvf ../guacd/guacamole-server-0.9.10-incubating.tar.gz -C ../guacd/
cd ../guacd/guacamole-server-0.9.10-incubating/

Compiler les sources :

cd ../guacd/guacamole-server-0.9.10-incubating/
./configure --with-init-dir=/etc/init.d
make
make install

A ce stade le service GUACD est présent dans le répertoire /etc/init.d/

Corriger un bug sur la retransmission du son :

# Correction bug son pour guacd
ln -s /usr/local/lib/freerdp/guacsnd.so /usr/lib64/freerdp/
ln -s /usr/local/lib/freerdp/guacdr.so /usr/lib64/freerdp/

Activer le lancement du service au boot de la machine puis lancer le service :

# Enregistrement service
chkconfig guacd on
# Démarrage service
systemctl start guacd

A ce stade le service est installé. Il n’y a plus rien à faire sur ce dernier.

 

II.2.3 Installation de TOMCAT

II.2.3.1 Installation

L’installation se fait via les packages de la distribution :

# Installation de Tomcat
yum install -y tomcat                                   # tomcat
yum install -y tomcat-webapps tomcat-admin-webapps      # admin package
yum install -y tomcat-docs-webapp tomcat-javadoc                # documentation

II.2.3.2 Paramétrage

Changement de port d’écoute :

Le port d’écoute du serveur Tomcat est 8081.

Pour cela il faut modifier le fichier « server.xml » qui se trouve dans « /etc/tomcat/ »

Changement du mot de passe administrateur :

Il faut ensuite changer le mot de passe par défaut de l’administrateur TOMCAT. Pour cela il faut éditer le fichier « tomcat-users.xml » dans « /etc/tomcat/ ». Puis changer le mot de passe par défaut.

Redémarrage du service :

Enfin pour prendre en compte les modifications il faut redémarrer le service « Tomcat »:

systemctl restart tomcat

II.2.3.3 Démarrage automatique du service Tomcat

Pour configurer le démarrage du service apache à chaque démarrage du serveur :

systemctl enable tomcat

A ce stade la configuration du serveur Tomcat est terminée.

II.2.4 Installation de la base données : Maria db

II.2.4.1 Installation

L’installation se fait via les package de la distribution :

# installation de Mysql (mariadb ...)
yum install -y mariadb-server
systemctl start mariadb

II.2.4.2 Configuration

Lancer la commande suivante qui va apporter un premier niveau de sécurité, c’est-à-dire :

  • changer le mot de passe root ;
  • supprimer les comptes anonymes ;
  • bloquer l’accès à distance à « root » ;
  • supprimer la base de données test.

Donc pour cela taper la commande suivante :

mysql_secure_installation

Puis répondre aux questions posées. Ce qui va donner un écran similaire à celui-ci :

 

II.2.4.2 Démarrage automatique du service MariaDB

Taper la commande suivante :

systemctl enable mariadb

II.2.5 Installation d’Apache

II.2.5.1 Installation

Installation classique d’un serveur apache avec les « mod » nécessaires :

#install de Apache (futur frontal / reverse proxy)
yum install -y httpd
#install mod_auth_cas pour apache (authentification via cas)
yum install -y mod_auth_cas

II.2.5.2 Activation des modules

Bien vérifier la présence des fichiers qui permettent le chargement des modules CAS, Proxy et ssl dans /etc/httpd/conf.modules.d/

 

Sinon les créer.

Fichier « 00-ssl.conf » :

#
LoadModule ssl_module modules/mod_ssl.so

 

Fichier « 10-auth_cas.conf » :

#
# mod_auth_cas is an Apache 2.2/2.4 compliant module that supports the
# CASv1 and CASv2 protocols
#
<IfModule !ssl_module>
    LoadModule ssl_module modules/mod_ssl.so
</IfModule>
LoadModule auth_cas_module modules/mod_auth_cas.so

 

Fichier « 00-proxy.conf » :

# This file configures all the proxy modules:
LoadModule proxy_module modules/mod_proxy.so
LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_express_module modules/mod_proxy_express.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
LoadModule proxy_fdpass_module modules/mod_proxy_fdpass.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so

 

II.2.5.3 Configuration des modules

Configuration du mod_CAS :

Il doit contenir les instructions suivantes :

LoadModule auth_cas_module modules/mod_auth_cas.so
CASCookiePath /var/run/mod_auth_cas/
CASCertificatePath /etc/pki/tls/certs/cas.pem
CASLoginURL https://url_cas:443/cas/login
CASValidateURL https://url_cas:443/cas/serviceValidate
CASProxyValidateURL https://url_cas:443/cas/proxyValidate

Vérifier si le répertoire « /var/run/mod_auth_cas/ » existe. Dans le cas contraire le créer et donner les droits au groupe/utilisateur « apache »

Rem : à votre charge de renseigner le fichier cas.pem

Configuration du ssl :

… A votre charge …

Configuration du « proxypass »

Créer le fichier « proxypass.conf » dans le répertoire « /etc/httpd/conf.d/ »

 

Renseigner les lignes suivantes dans le fichier :

<Location />
   AuthType CAS
   AuthName "CAS"
   require valid-user
   ProxyPass http://nom_serveur:8081/guacamole/ flushpackets=on
   ProxyPassReverse http://nom_serveur:8081/guacamole/
</Location>


<Location /websocket-tunnel>
    Order allow,deny
    Allow from all
    ProxyPass ws://nom_serveur:8081/guacamole/websocket-tunnel
    ProxyPassReverse ws://nom_serveur:8081/guacamole/websocket-tunnel
</Location>

Toutes les requêtes faites sur le « / » (en 80 ou 443 qui sont les 2 ports web en écoute sur Apache) seront redirigées vers le serveur Tomcat à l’adresse suivante : « http://nom_serveur:8081/guacamole/ ».

II.2.5.4 Démarrage automatique du service Apache

Lancer le démarrage du service apache à chaque démarrage du serveur :

systemctl enable httpd

A ce stade la configuration d’apache est terminée.

II.2.6 Installation du portail web Guacamole

II.2.6.1 Téléchargement des fichiers sources

Comme pour le service « Guacd », il faut aller chercher les fichiers sources de l’application web.

Ces fichiers sont :

  • le fichier .war correspondant à l’application web « Guacamole » qui sera placé dans Tomcat.
  • le module « guacamole-auth-jdbc » permet, au sein de l’application, de mettre en place un accès avec authentification dont les comptes sont stockés en base de données et qui propose une administration via un « backend » web. Le fichier compressé comprend :
    • le module en tant que tel,
    • les fichiers « sql » pour monter la structure des tables de la base de données (MySQL et Postresql).

 

mkdir ../appliweb
wget http://www.apache.org/dist/incubator/guacamole/0.9.10-incubating/binary/guacamole-0.9.10-incubating.war -P ../appliweb/
wget http://www.apache.org/dist/incubator/guacamole/0.9.10-incubating/binary/guacamole-auth-jdbc-0.9.10-incubating.tar.gz -P ../appliweb/
tar xzvf ../appliweb/guacamole-auth-jdbc-0.9.10-incubating.tar.gz -C ../appliweb/

Ce qui donne l’arborescence suivante :

II.2.6.2 Base de données

Création de la base de données

La préparation de la base de données consiste à créer une base ainsi que compte utilisateur associé. Le nom de la base de données sera « guacamole_db » et l’utilisateur sera « guacamole_user».

A partir d’une console shell :

mysql -u root -p
MariaDB [(none)]> CREATE DATABASE guacamole_db;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> CREATE USER 'guacamole_user'@'localhost' IDENTIFIED BY 'mot_de_passe_à_définir_ici';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> GRANT SELECT,INSERT,UPDATE,DELETE ON guacamole_db.* TO 'guacamole_user'@'localhost';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
Création des tables

Ensuite il faut créer la structure des tables au sein de la base de données.

Les fichiers nécessaires de type « sql » sont dans les fichiers qui ont été téléchargés précédemment.

Dans une console, taper la ligne de commande pour injecter les fichiers sql à Mysql :

# créer schéma des tables dans base guacamole_db
 cat /home/suroot/sources/guacamole/v0.9.10/appliweb/guacamole-auth-jdbc-0.9.10-incubating/mysql/schema/*.sql | mysql -u root -p guacamole_db

A ce stade les tables sont créées.

II.2.6.3 Installation de l’application web

Installation

Récupération du fichier « .war »

wget http://www.apache.org/dist/incubator/guacamole/0.9.10-incubating/binary/guacamole-0.9.10-incubating.war -P ../appliweb/

Placement du fichier war dans répertoire Tomcat :

cp ../appliweb/guacamole-0.9.10-incubating.war  /usr/share/tomcat/webapps/guacamole.war

Tomcat va automatiquement détecter la présence du fichier « guacamole.war » et va créer le site web correspondant. Les sous répertoires doivent ressembler à ceux-ci :

A ce stade l’application est installée.

II.2.6.4 Paramétrage

Répertoire de configuration

Les fichiers de paramétrages ainsi que les modules et librairies externes doivent être placés dans un répertoire nommé « .guacamole » à la racine du répertoire de Tomcat.

Pour cela il faut le créer :

# Création du répertoire de configuration du site web
mkdir /usr/share/tomcat/.guacamole
Ajout connecteur java MySql

Pour que l’application, développée en java, puisse discuter avec une base de données Mysql demande à utiliser un connecteur jdbc. Ce connecteur étant à placer dans un répertoire « lib » lui-même dans le répertoire de configuration « général ».

# Ajout JDBC driver mysql
mkdir /usr/share/tomcat/.guacamole/lib
/usr/share/tomcat/.guacamole/lib
yum install -y mysql-connector-java
cp /usr/share/java/mysql-connector-java.jar /usr/share/tomcat/.guacamole/lib/
chown tomcat:tomcat /usr/share/tomcat/.guacamole/lib/mysql-connector-java.jar
Ajout du module de connexion « guacamole-auth-jdbc »

Pour rappel ce module va permettre d’obtenir une authentification locale (compte stocké en base de données) et une administration web centralisée. Les extensions ou modules de type « guacamole » doivent être placés dans un répertoire nommé « extension » du répertoire principal de configuration.

# Ajout connecteur base de données au site web guacamole
mkdir /usr/share/tomcat/.guacamole/extensions
cp ../appliweb/guacamole-auth-jdbc-0.9.10-incubating/mysql/guacamole-auth-jdbc-mysql-0.9.10-incubating.jar /usr/share/tomcat/.guacamole/extensions/
Fichier de configuration global

Une fois tous les éléments en place, il faut créer un fichier de configuration « guacamole.properties » dans le répertoire principal. Dans ce fichier il doit y contenir les lignes suivantes :

# Hostname and port of guacamole proxy
guacd-hostname: localhost
guacd-port:     4822

##################################
# Authentification BDD
#################################
mysql-hostname: localhost
mysql-port: 3306
mysql-database: guacamole_db
mysql-username: guacamole_user
mysql-password: mot_de_passe_compte_utilisateur
Vérification finale

Dans le répertoire « Tomcat » il doit y avoir le répertoire « .guacamole » qui contient les éléments suivants :

Si tel est le cas, alors le site guacamole est prêt.

Avant de l’utiliser il faut redémarrer les services Guacd et Tomcat :

systemctl stop guacd
systemctl stop tomcat
systemctl start guacd
sysmtelctl start tomcat

Ainsi pour accéder au serveur il faut renseigner l’adresse suivante https://mon_serveur/ ou http://mon_serveur/ dans un navigateur.

Ce qui aura pour effet les actions suivantes :

  • prise en compte de la requête par le serveur apache (monté en reverse proxy) ;
  • demande d’authentification sur le serveur d’authentification CAS (Mod_CAS du serveur Apache) ;
  • une fois l’authentification vérifiée, transfert des requêtes web sur le serveur Tomcat
  • authentification locale sur le serveur Guacamole puis utilisation des ressources à prendre à distance.

II.2.7 Sauvegarde

II.2.7.1 Introduction

Les éléments à sauvegarder sont :

  • les fichiers de configurations ;
  • le contenu de la base de données qui contient :
    • les utilisateurs ;
    • les groupes de ressources d’accès à distances ;
    • les droits utilisateurs sur ces groupes.

II.2.7.2 Fichiers de configurations

Les fichiers de configurations sont ceux :

  • d’Apache :
    • /etc/httpd/conf/httpd.conf
    • /etc/httpd/conf.d/auth_cas.conf
    • /etc/httpd/conf.d/proxypass.conf
    • /etc/httpd/conf.d/guacamole.conf
    • /etc/httpd/conf.d/ssl.conf
    • /etc/httpd/conf.modules.d/10-auth_cas.conf
  • de Guacamole :
    • le fichier /usr/share/tomcat/.guacamole/guacamole.properties

Autres fichiers :

  • /etc/pki/tls/certs/cas.pem
  • /etc/pki/tls/certs/nom_serveur.crt
  • /etc/pki/tls/private/nom_serveur.key
  • /etc/pki/tls/certs/DigiCertCA.crt

II.2.7.3 Base de données

Faire un dump de la table :

mysqldump -u root -p guacamole_db > sauve_guacamole_db_.sql

II.2.7.4 Script de sauvegarde

Le script ci-dessous sauvegarde l’ensemble des fichiers précités ainsi que la base de données.

Localisation du script : /home/suroot/sauvegarde_guacamole.sh

#!/bin/bash
clear
chemin_sauvegarde_racine='/root/sauve_guacamole'
# jour de la semaine
date_of_week=$(date +%u)
# Tableau de jour
tableau_jours[1]='lundi'
tableau_jours[2]='mardi'
tableau_jours[3]='mercredi'
tableau_jours[4]='jeudi'
tableau_jours[5]='vendredi'
tableau_jours[6]='samedi'
tableau_jours[7]='dimanche'

chemin_sauvegarde_jour=$chemin_sauvegarde_racine
chemin_sauvegarde_jour+="/${tableau_jours[$date_of_week]}"
#echo ${tableau_jours[$date_of_week]}
echo "repertoire à sauvegarder : $chemin_sauvegarde_jour"

#######################################################
### Création des répertoires jours s'il n'existe pas
if [ -d $chemin_sauvegarde_racine ]
then
        echo "Répertoire existant : $chemin_sauvegarde_racine"
else
        echo "Répertoire à créer : $chemin_sauvegarde_racine"
        mkdir $chemin_sauvegarde_racine
fi

if [ -d $chemin_sauvegarde_jour ]
then
        echo "Répertoire existant : $chemin_sauvegarde_jour"
else
        echo "Répertoire à créer : $chemin_sauvegarde_jour"
        mkdir $chemin_sauvegarde_jour
fi


######################################################
##  Copie fichiers
/bin/cp -f -v /etc/httpd/conf/httpd.conf $chemin_sauvegarde_jour
/bin/cp -f -v /etc/httpd/conf.d/auth_cas.conf $chemin_sauvegarde_jour
/bin/cp -f -v /etc/httpd/conf.d/proxypass.conf $chemin_sauvegarde_jour
/bin/cp -f -v /etc/httpd/conf.d/guacamole.conf $chemin_sauvegarde_jour
/bin/cp -f -v /etc/httpd/conf.d/ssl.conf $chemin_sauvegarde_jour
/bin/cp -f -v /etc/httpd/conf.modules.d/10-auth_cas.conf $chemin_sauvegarde_jour
/bin/cp -f -v /usr/share/tomcat/.guacamole/guacamole.properties $chemin_sauvegarde_jour
/bin/cp -f -v /etc/pki/tls/certs/cas.pem $chemin_sauvegarde_jour
/bin/cp -f -v /etc/pki/tls/certs/nom_serveur.crt $chemin_sauvegarde_jour
/bin/cp -f -v /etc/pki/tls/private/nom_serveur.key $chemin_sauvegarde_jour
/bin/cp -f -v /etc/pki/tls/certs/DigiCertCA.crt $chemin_sauvegarde_jour

######################################################
## Export base de données
mysqldump -u root guacamole_db > $chemin_sauvegarde_jour/sauve_guacamole_db_.sql

 

Remarque sur le mot de passe pour l’export de la base de données :

pour que « mysqldump » ne demande pas de mot de passe au sein du script , il faut créer dans le répertoire home du compte exécutant le fichier de configuration « .my.cnf » et qui doit comprendre les lignes suivantes :

[mysqldump]
user=root
password=mot_de_passe_du_compte

Ce qui au final doit donner le résultat suivant (pour lundi) :

II.2.7.5Automatisation de la sauvegarde

La sauvegarde sera lancée une fois par jour à l’aide du crontab. Il sera utilisé les répertoires dédiés dont celui qui est attribué à un lancement par jour.

En mode console :

# Se positionner dans le répertoire cron daily
cd /etc/cron.daily/
# faire un lien symbolique vers le script
ln -s /home/suroot/sauvegarde_guacamole.sh sauvegarde_guacamole.sh
# si cela n’a pas été fait à rendre executable le script
chmod +x  /home/suroot/sauvegarde_guacamole.sh

 

 

 

Guacamole

Laisser un commentaire

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