Apache Guacamole Bastion : Votre Passeport pour une Connexion Sécurisée et Simplifiée !
Contexte
Avec le développement du télétravail accéder aux outils, serveurs, services de son entreprise, sont devenus monnaies courantes.
Les solutions communes existantes sont l’accès à l’entièreté du réseau de l’entreprise via un tunnel VPN ou la connexion à un serveur dit de rebond donnant ensuite accès aux ressources et services internes
Solution:
L’arrivée de HTML5 a permis d’étendre les possibilités de contenu dynamique sur les sites web. Le projet Guacamole de la fondation Apache offre désormais une solution qui permet un accès sécurisé à des serveurs distants (VNC, SSH et RDP) via un simple navigateur web.
Nous avons choisi de conteneuriser ce bastion afin de pouvoir de l’exécuter sur nos environnements, sans avoir à installer et configurer manuellement toutes les dépendances.
L’utilisation d’une gestion centralisée des accès permet d’ajouter ou de supprimer des droits de connexion pour les utilisateurs et/ou groupes d’utilisateurs sur l’ensemble des serveurs du parc
Il est également possible d’instaurer des connexions masquées pour renforcer la sécurité, ce qui permet à l’utilisateur d’accéder à un serveur sans avoir à connaître les informations telles que l’identifiant, le mot de passe ou l’adresse IP du serveur ciblé
Implémentation:
Vous pourrez retrouver le script bash que nous avons développé pour automatiser la configuration de ce bastion en cliquant ici
Ce script est découpé en plusieurs fonctions. Voir les étapes ci-dessous:
- Vérification installation Docker
- Installation Docker et Doker compose (si besoin)
- Téléchargement des images rquises depuis registry Docker
- Initialisation de la base de données mysql
- Génération d’un mot de passe random pour accéder à la DB
- Instanciation fichier d’initialisation de la DB
- Démarrage de la Base de données mysql
- Création tables DB
- Vérification présence tables
- Sortie du shell du contenur mysql
- Démarrage guacd
- Démarrage guacamole
-
Vérification installation docker et Docker compose
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
function install_docker() {
echo "[etape1]: Partie installation docker"
#Maj systeme
sudo apt update
#installation dependances
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
#Ajout referentiel docker
sudo curl -fsSL hhtps://download.docker.com/linux/ubuntu/gpg | sudo gpg --dermor -o /etc/apt/trusted.gpg.d/docker.gpg
sudo rm /etc/apt/sources.list.d/docker.list
sudo sh -c 'echo "deb [arch=amd64 signed-by=/etc/apt/trusted.gpg.d/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list'
#installation moteur docker
sudo apt update
sudo apt install -y docker-ce
#demarrer et activer docker
sudo systemctl start docker
sudo systemctl enable docker
echo "docker a ete installe avec succes"
echo "[etape2]: Partie installation docker-compose"
sudo curl -L https://gihtub.com/docker/compose/releases/latest/download/docker-compose-$(uname -m) -o /usr/local/bin/docker-compose
echo "docker-comopose a ete installe avec succes"
}
|
-
Vérification si Docker installé
1
2
3
4
5
6
7
8
9
|
function check_docker_status() {
if ! command -v docker &> /dev/null
then
echo "docker n'est pas installé sur ce système"
exit 1
else
echo "docker est bien installé"
fi
}
|
-
Téléchargement des images requises depuis registry Docker
1
2
3
4
5
6
7
8
|
function pull_images() {
echo "lancement du pull des différentes images"
sudo docker pull guacamole/guacamole
sudo docker pull guacamole/guacd
sudo docker pull mysql/mysql-server
echo "pull des images terminé avec succès"
}
|
-
Initialisation de la base de données mysql
1
2
3
4
5
6
|
function initdb() {
echo "lancement initialiation db"
sudo docker run --rm guacamole/guacamole /opt/guacamole/bin/initdb.sh --mysql > initdb.sql
echo "fin initialisation db"
}
|
-
Génération mot de passe au hasard
1
2
3
4
5
6
7
|
function() gen_otp {
echo "connexion db avec pwd random"
sudo docker run --name example-mysql -e MYSQL_RANDOM_ROOT_PASSWORD=yes -e MYSQL_ONETIME_PASSWORD=yes -d mysql/mysql-server
echo "on récupère le mot de passe dans la log (à améliorer)"
sudo docker logs example-mysql
}
|
-
Instanciation fichier d’initialisation de la DB
1
2
3
4
|
function move_initdb_file() {
echo "copie fichier initdb.sql dans le conteneur et renommage fichier"
sudo docker cp initdb.sql mysql:/guac_db.sql
}
|
-
Démarrage de la Base de données mysql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
function start-mysql() {
echo "exécution conteneur mysql"
sudo docker exec -it mysql bash
echo "connexion et alter user root"
mysql -u root -p <<EOF
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';
CREATE DATABASE guacamole_db;
CREATE USER 'guacamole_user'@'%' IDENTIFIED BY 'password';
GRANT SELECT,INSERT,UPDATE,DELETE ON guacamole_db.* TO 'guacamole_user'@'%';
FLUSH PRIVILEGES;
quit;
EOF
echo "fin connexion, alter et grant"
}
|
-
Création tables DB
1
2
3
4
|
function create_tables() {
cat guac_db.sql | mysql -u root -p guacamole_db
echo "tables creees"
}
|
-
Vérification présence tables
1
2
3
4
5
6
7
|
function verif_tables() {
echo ""
#Affiche sur ecran le resultat de la requete SHOW TABLES et exit"
echo "AFFICHAGE DES TABLES"
echo ""
sudo docker exec -it mysql sh -c "mysql -u guacamole_user -ppassword guacamole_db -e 'USE guacamole_db; SHOW TABLES;' < /dev/null"
}
|
-
Sortie du shell du contenur mysql
1
2
3
|
function exit_shell_mysql() {
exit
}
|
-
Démarrage guacd et guacamole
1
2
3
4
5
6
7
8
9
10
11
12
|
function start_guacd_guacamole() {
echo "demarrage conteneur guacd"
sudo docker run --name guacd --restart unless-stopped -d guacamole/guacd
echo "demmarage guacd effectue avec succes"
echo""
echo "demarrage conteneur guacamole mapping sur les port 8080:8080"
sudo docker run --name guacamole --restart unless-stopped --link guacd:guacd --link mysql:mysql -e MYSQL_DATABASE=guacamole_db -e MYSQL_USER=guacamole_user -e MYSQL_PASSWORD=$PASSWORD_DB -d -p 0.0.0.0:8080:8080 guacamole/guacamole
echo""
echo "demarrage guacamole effectue avec succes"
}
|
Premiers pas:
La connexion se fait en rentrant l’url dans votre navigateur (Vous pouvez éventuellement mettre en frontal un reverse proxy):
1
|
[IP]:[PORT]/guacamole (Exemple: 172.10.25:8080/guacamole)
|
Mire de connexion
-
user : guacadmin
-
password : guacadmin

Etapes création d’un user

copier/coller via le clipboard
Lorsque vous vous connectez à une machine via Apache Guacamole, il peut arriver que vous ayez besoin d’effectuer des actions de copier/coller depuis votre lapotop vers la machine distante.
-
Touches à effectuer:
1
2
|
MAJ+ALT+CTRL
coller les infos que vous soutaitez utiliser , ensuite copier les et coller les dans la machine cible.
|
Clipboard