Ce projet porte sur la conception et le déploiement d'une infrastructure GLPI sécurisée, pensée selon de bonnes pratiques d'administration systèmes et réseaux. L'architecture repose sur une séparation des rôles afin de renforcer la sécurité et la robustesse de l'ensemble.
Un serveur GLPI hébergeant l'interface web (Apache / PHP), accessible aux utilisateurs. Un serveur de base de données dédié, situé sur un réseau interne, est accessible uniquement depuis le serveur GLPI, afin d'isoler les données sensibles.
L'objectif de ce projet est de concevoir et de déployer une infrastructure GLPI sécurisée, en appliquant de bonnes pratiques d'administration systèmes et réseaux.
L'architecture repose sur une séparation des rôles entre deux serveurs distincts : un serveur GLPI hébergeant l'interface web (Apache / PHP), accessible aux utilisateurs, et un serveur de base de données dédié, situé sur un réseau interne, accessible uniquement depuis le serveur GLPI. Cette séparation permet d'isoler les données sensibles et de renforcer la robustesse de l'ensemble.
Au cours de ce projet, les éléments suivants ont été mis en place :
Ce projet a pour but de démontrer ma capacité à concevoir, configurer et valider une infrastructure applicative dans un contexte professionnel, en mettant l'accent sur la sécurité, la clarté de l'architecture et la cohérence des choix techniques.
L'infrastructure repose sur deux réseaux distincts : un réseau LAN interne hébergeant les hyperviseurs et les serveurs sensibles, et une zone DMZ exposant uniquement le serveur web GLPI accessible aux utilisateurs.
A. LAN 01 : 172.16.0.0
| Machine | Adresse IP | Masque | Passerelle | Rôles |
|---|---|---|---|---|
| ESXi | 172.16.0.100 | 255.255.255.0 | 172.16.0.254 | Hyperviseur type 1 |
| SRV-AD | 172.16.0.1 | 255.255.255.0 | 172.16.0.254 | Annuaire Active Directory |
| SRV-BDD-GLPI | 172.16.0.7 | 255.255.255.0 | 172.16.0.254 | Base de données GLPI |
Tableau — Inventaire LAN 01 : 172.16.0.0
B. LAN 02 : 192.168.200.0
| Machine | Adresse IP | Masque | Passerelle | Rôles |
|---|---|---|---|---|
| Hyper-V | 192.168.200.200 | 255.255.255.0 | 192.168.200.254 | Hyperviseur de type 1 |
| SRV-WEB (GLPI) | 192.168.200.1 | 255.255.255.0 | 192.168.200.254 | Serveur Apache et PHP |
Tableau — Inventaire LAN 02 : 192.168.200.0
Le schéma ci-dessous représente l'architecture globale de l'infrastructure GLPI déployée, avec la séparation entre le réseau LAN interne et la zone DMZ. Cliquez sur l'image pour l'agrandir.
Schéma — Topologie Infrastructure GLPI multi-serveurs
Solution de gestion de parc informatique et de tickets. Elle centralise les équipements, les utilisateurs, les incidents et les demandes dans une interface unique.
Serveur web qui héberge l'application GLPI. Il reçoit les requêtes des utilisateurs via le navigateur et transmet les pages générées par l'application.
Langage utilisé par GLPI pour fonctionner. Il exécute le code de l'application et génère dynamiquement les pages web affichées aux utilisateurs.
Gestionnaire de processus qui exécute les scripts PHP de manière optimisée. Il améliore les performances et assure une communication efficace entre Apache et le moteur PHP.
Système de gestion de base de données utilisé pour stocker toutes les données de GLPI (utilisateurs, tickets, équipements, etc.). Il centralise et sécurise les données de l'application.
Dans cette section, je configure le serveur applicatif destiné à héberger GLPI. Je mets en place l'environnement web (Apache et PHP), je déploie l'application et je sécurise les répertoires sensibles en appliquant une séparation entre les fichiers publics et les fichiers internes.
Je vérifie également le bon fonctionnement de l'intégration entre Apache et PHP-FPM afin de garantir une exécution correcte et sécurisée de l'application.
Serveur GLPI
Les configurations suivantes concerneront le serveur 192.168.200.1
Je vérifie que le serveur Apache est bien installé sur le système. La présence du paquet Apache HTTP Server confirme que le service web nécessaire à l'hébergement de GLPI est correctement déployé et opérationnel.
Apache permet de traiter les requêtes HTTP et de fournir l'interface web de GLPI aux utilisateurs.
L'utilisation d'une version récente et stable garantit le bon fonctionnement et les performances de l'application.
Je vérifie la version de PHP installée sur le serveur afin de m'assurer de sa compatibilité avec GLPI. Apache permet de traiter les requêtes HTTP et de fournir l'interface web de GLPI aux utilisateurs.
PHP est le moteur d'exécution de l'application : il interprète le code dynamique et génère les pages web affichées dans le navigateur.
Je vérifie que l'ensemble des extensions PHP requises par GLPI sont bien installées.
Ces modules permettent notamment :
Cette validation confirme que l'environnement PHP est complet et que GLPI peut interagir correctement avec les différents composants de l'infrastructure.
L'application GLPI est correctement déployée dans le répertoire /var/www/glpi.
La structure complète des fichiers et dossiers de l'application est présente, ce qui confirme que le déploiement a été effectué correctement.
Le répertoire public est bien utilisé comme point d'entrée de l'application.
Ce choix permet de limiter l'exposition des fichiers sensibles en ne rendant accessibles via le navigateur que les éléments strictement nécessaires au fonctionnement de l'interface web.
Les répertoires /var/www/glpi et /var/www/glpi/public appartiennent à l'utilisateur et au groupe www-data, utilisés par Apache.
Les permissions appliquées permettent au serveur web d'accéder aux fichiers nécessaires tout en évitant l'attribution de droits excessifs.
Je vérifie que les répertoires dédiés à la configuration, aux données et aux journaux de GLPI existent en dehors du répertoire web principal.
Cette organisation permet de séparer les fichiers sensibles des fichiers accessibles via le serveur web.
Les dossiers config et files ont bien été déplacés vers leurs nouveaux emplacements sécurisés.
Le dossier de configuration est désormais situé dans /etc/glpi et le dossier contenant les fichiers applicatifs est stocké dans /var/lib/glpi/files. Ils ne sont plus présents dans /var/www/glpi, ce qui empêche toute exposition directe via le serveur web.
Je configure GLPI pour utiliser un répertoire de configuration situé en dehors du dossier web principal.
Le fichier downstream.php définit le chemin /etc/glpi comme répertoire de configuration principal étant donné que j'ai déplacé les fichiers sensibles précédemment. Cette redirection permet à l'application de ne plus utiliser le dossier config situé dans /var/www/glpi.
Cette approche évite que les fichiers de configuration sensibles soient exposés via le serveur web.
Je définis explicitement les emplacements des données applicatives et des journaux dans le fichier local_define.php.
Les constantes internes de GLPI (GLPI_CONFIG_DIR, GLPI_VAR_DIR, GLPI_LOG_DIR) pointent correctement vers les nouveaux emplacements définis.
Cette validation confirme que l'application utilise bien les chemins sécurisés configurés et que la séparation des répertoires est pleinement opérationnelle.
Je vérifie que le VirtualHost dédié à GLPI est bien chargé par Apache. La configuration active montre que le site glpi-lab est correctement activé et associé au port 80.
Je configure le VirtualHost pour que le répertoire exposé publiquement soit /var/www/glpi/public.
Ce choix permet de limiter l'accès aux seuls fichiers nécessaires à l'exécution de l'application et d'éviter l'exposition directe de l'ensemble du dossier GLPI.
Le service PHP-FPM est bien actif et configuré pour démarrer automatiquement avec le système.
Le fichier socket php8.3-fpm.sock est bien dans le répertoire /run/php/. La présence de ce fichier confirme que PHP-FPM fonctionne correctement et qu'il est prêt à recevoir les requêtes envoyées par le serveur web.
Ce socket permet la communication entre Apache et PHP-FPM.
Le VirtualHost Apache est configuré pour transmettre les fichiers .php au moteur PHP-FPM via le socket Unix.
La directive SetHandler confirme que toute requête concernant un fichier PHP est redirigée vers PHP-FPM pour exécution.
Je vérifie que les modules Apache requis pour la communication avec PHP-FPM sont bien activés.
La présence des modules proxy, proxy_fcgi et setenvif confirme que le serveur web est capable de transmettre les requêtes PHP au moteur FastCGI.
Je réalise un test d'exécution en créant temporairement un fichier phpinfo() accessible via le navigateur. Ce test montre concrètement que le moteur PHP est bien interprété via Apache.
Ce test valide le bon fonctionnement de la chaîne complète : navigateur → Apache → PHP-FPM.
Après validation, je supprime le fichier de test info.php montrant que la tentative d'accès ultérieure retourne une erreur 403, ce qui confirme que le fichier n'est plus accessible et que le serveur applique correctement les règles de sécurité.
Je réalise un test HTTP en local afin de vérifier la réponse du serveur web après suppression du fichier de test.
La réponse 403 Forbidden confirme que l'accès au fichier n'est plus autorisé, ce qui valide le bon fonctionnement des règles de sécurité côté Apache.
Je consulte ensuite les journaux Apache afin de contrôler le comportement du service. Le serveur fonctionne normalement et aucune erreur critique n'est détectée.
Cette vérification démontre que le serveur web répond correctement aux requêtes et applique les restrictions prévues.
Je vérifie la présence des journaux applicatifs dans le répertoire /var/log/glpi. Les fichiers de logs liés aux accès, aux erreurs PHP, aux événements et aux tâches planifiées sont bien présents.
Cette validation confirme que GLPI enregistre correctement ses activités et que la redirection des journaux vers un répertoire dédié fonctionne comme prévu.
Dans cette section, je mets en place le serveur de base de données dédié à GLPI. Je configure MariaDB, je sécurise les comptes administrateur et je crée une base ainsi qu'un utilisateur spécifique pour l'application.
Je vérifie également la communication entre le serveur GLPI et le serveur de base de données afin de garantir un fonctionnement correct dans une architecture multi-serveurs.
Serveur Base de données MariaDB
Les configurations suivantes concerneront le serveur 172.16.0.1
Les paquets MariaDB nécessaires au fonctionnement du serveur de base de données sont correctement installés.
Le statut indique que le service est actif (running) et activé (enabled), ce qui confirme que le moteur de base de données fonctionne correctement et est prêt à traiter les requêtes SQL provenant du serveur GLPI.
Je vérifie la liste des comptes présents dans la table système mysql.user.
Cette configuration démontre que l'accès administrateur distant est désactivé et que l'application GLPI utilise un compte dédié distinct du compte root.
Je vérifie spécifiquement que le compte root est autorisé uniquement depuis localhost.
Cette restriction empêche toute connexion distante au compte administrateur de la base de données, ce qui constitue une mesure de sécurité essentielle.
La présence de la base db_glpi dans la liste des bases confirme que l'environnement est prêt à accueillir les tables et les données de l'application.
Cette séparation permet d'isoler les données GLPI des bases système internes, renforçant l'organisation et la sécurité de l'infrastructure.
L'utilisateur glpi_adm est bien présent dans la table des utilisateurs MariaDB.
Cet utilisateur est configuré pour se connecter depuis n'importe quelle adresse (%), ce qui permet au serveur GLPI de communiquer avec le serveur de base de données situé sur un autre réseau.
La configuration montre que cet utilisateur dispose de l'ensemble des droits sur la base db_glpi, tout en restant limité à cette base uniquement.
Le paramètre bind-address est configuré sur 0.0.0.0 ce qui permet au serveur MariaDB d'écouter sur toutes les interfaces réseau, et non uniquement sur localhost — rendant possible la connexion distante depuis le serveur GLPI.
La présence de l'état LISTEN sur l'adresse 0.0.0.0:3306 confirme que le service accepte les connexions réseau et que le moteur MariaDB est prêt à traiter les requêtes provenant du serveur applicatif.
Je teste la connexion distante à la base de données depuis le serveur GLPI en utilisant l'utilisateur applicatif glpi_adm.
Cela confirme les configurations précédentes : accès sur le réseau, port 3306 ouvert, les privilèges de l'utilisateur glpi_adm.
Ce compte est utilisé exclusivement pour permettre à GLPI d'interroger l'annuaire Active Directory.
Je configure un nouvel annuaire LDAP dans GLPI afin d'intégrer l'authentification Active Directory.
Je renseigne
Cette configuration permet à GLPI de se connecter à l'annuaire Active Directory pour authentifier les utilisateurs et synchroniser leurs informations.
J'ai stocké l'agent GLPI dans un dossier partagé afin de le partager sur le réseau.
Le groupe Utilisateurs authentifiés est autorisé en lecture, ce qui permet aux postes clients membres du domaine d'accéder au partage sans donner de privilèges excessifs.
Le groupe Utilisateurs authentifiés dispose des permissions de lecture et d'exécution, ainsi que de l'affichage du contenu du dossier.
J'ai configuré une stratégie de groupe afin de déployer automatiquement le package GLPI Agent 1.5 sur les postes du domaine.
Le logiciel est attribué aux ordinateurs via les paramètres d'installation logicielle, ce qui permet un déploiement automatique lors du démarrage des machines.
Je configure des paramètres de registre via les préférences de la stratégie de groupe.
Cette configuration permet de définir automatiquement les paramètres de l'agent GLPI sur les postes clients, notamment l'adresse du serveur et les informations d'identification du domaine.
L'utilisation des préférences de registre assure une configuration homogène et contrôlée sur l'ensemble du parc.
Je définis dans le registre la clé SOFTWARE\GLPI-Agent afin d'indiquer à l'agent l'adresse du serveur GLPI.
La valeur configurée pointe vers l'URL du serveur, permettant aux agents installés sur les postes clients d'envoyer leurs informations d'inventaire vers la plateforme GLPI.
Je configure un paramètre supplémentaire dans le registre afin d'attribuer un tag d'identification aux machines.
Ce tag permet d'identifier et de classer les équipements dans GLPI selon le domaine ou l'environnement concerné.
Dans cette section, j'effectue des tests de fonctionnement afin de valider l'ensemble des configurations ci-dessus.
Je me connecte avec un utilisateur de mon domaine via LDAP.
La connexion a réussi. L'authentification LDAP fonctionne correctement.
Un ticket a été créé depuis l'interface GLPI avec un titre unique et une pièce jointe afin de valider le bon fonctionnement de l'application.
Côté serveur de base de données (SRV-BDD-GLPI), le ticket est correctement enregistré dans la table glpi_tickets de la base MariaDB, confirmant l'écriture des données applicatives.
Côté serveur GLPI (SRV-GLPI), l'ajout de la pièce jointe entraîne bien la création de fichiers dans le répertoire applicatif /var/lib/glpi/files.
Aucune donnée utilisateur n'est stockée dans le DocumentRoot (/var/www/glpi), ce qui confirme la séparation entre contenu web public et données sensibles, conformément à l'architecture définie.
L'enregistrement dans la base de données et le stockage des pièces jointes sur le serveur GLPI fonctionnent correctement.
La stratégie de groupe a été appliquée avec succès sur le poste client, confirmant le bon déploiement automatisé de l'agent GLPI via GPO.
L'agent GLPI est correctement installé sur le poste client, comme confirmé dans les programmes installés du système.
Le poste client remonte bien dans l'interface GLPI, avec un inventaire matériel et logiciel visible et à jour, attestant de la communication entre le client et le serveur GLPI.
L'agent GLPI se déploie correctement au sein de l'infrastructure. Les ressources remontent dans le dashboard GLPI.