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