Académique Documents
Professionnel Documents
Culture Documents
Marius COUVRAT-DESVERGNES
MISTRAL INFORMATIQUE – SIMPLON.CO
Sommaire
1. Remerciements ................................................................................................................................... 3
2. Introduction......................................................................................................................................... 4
3. Abstract ............................................................................................................................................... 5
4. Tableau récapitulatif ........................................................................................................................... 6
5. Présentation de l’entreprise................................................................................................................ 7
5.1. Présentation générale .................................................................................................................. 7
5.2. Les grandes dates ......................................................................................................................... 7
5.3. Les services ................................................................................................................................... 8
5.3.1. Zoom sur le service Opérations et Services IT ....................................................................... 9
5.3.2. Mon rôle au sein de Mistral .................................................................................................. 9
5.4. Présentation des logiciels ........................................................................................................... 11
5.4.1. Présentation générale ......................................................................................................... 11
5.4.2. Présentation technique ....................................................................................................... 12
6. Projet en entreprise – Inventaire du parc clients .............................................................................. 13
6.1. Contexte ..................................................................................................................................... 13
6.2. Expression des besoins ............................................................................................................... 14
6.3. Schéma directeur ....................................................................................................................... 15
6.3.1. Cibler les informations essentielles des serveurs – Étude des infrastructures ................... 16
6.3.2. Mettre en place une solution d’extraction des informations – Script d’inventaire ............ 17
6.3.3. Configuration du socle ........................................................................................................ 18
6.3.4. Traitement automatique des données – Logstash .............................................................. 19
6.3.5. Stockage des données de manière centralisée – ElasticSearch .......................................... 21
6.3.6. Affichage des données – Kibana.......................................................................................... 23
6.3.7. Sécurisation des outils ......................................................................................................... 25
Logstash ..................................................................................................................................... 25
ElasticSearch .............................................................................................................................. 28
Kibana ........................................................................................................................................ 29
6.4. Suite du projet ............................................................................................................................ 31
6.4.1. Restructuration du DNS de l’entreprise .............................................................................. 32
6.4.2. Mise en place d’une plateforme de collecte de l’inventaire ............................................... 32
6.4.3. Réflexion sur la méthode de collecte des données par Logstash ....................................... 32
7. Projet en entreprise – Analyse des rapports DMARC ....................................................................... 33
7.1. Contexte ..................................................................................................................................... 33
7.2. Expression des besoins ............................................................................................................... 33
Page 1 sur 43
7.3. Schéma directeur ....................................................................................................................... 34
7.3.1. Rassembler les rapports – Création d’une boîte aux lettres dédiées ................................. 34
7.3.2. Collecter les données – ParseDMARC ................................................................................. 35
7.3.3. Visualiser les rapports DMARC – Kibana ............................................................................. 38
7.3.4. Sécurisation de l’outil .......................................................................................................... 38
8. Conclusion ......................................................................................................................................... 42
9. Annexe – Script d’inventaire ............................................................................................................. 43
Page 2 sur 43
1. Remerciements
Cette alternance fut une opportunité assez exceptionnelle, puisqu’embauché récemment en CDI à
Mistral Informatique. Mes remerciements vont en premier lieu à M. Fabrice LE CAMUS, Président
Directeur Général de la société, ainsi qu’à M. Vincent PORCEL, Directeur Opérations et Services IT et
également mon tuteur, pour avoir cru en mon travail et ma motivation et m’avoir permis poursuivre
ma formation au sein de l’entreprise.
Je remercie également l’organisme Simplon.co, pour m’avoir suivi une troisième année dans mon
parcours de formation dans le domaine des Systèmes et Réseaux, et surtout pour m’avoir accordé
leur confiance en me contactant lors de l’ouverture de cette promotion d’Administrateur
d’Infrastructures Sécurisées (AIS). Parmi eux, j’accorde une pensée particulière à Mme Christine
CAVARRETTA, ma chargée de formation sur cette promotion ; ainsi qu’à Mme Pauline MATHELIN-
ROUILLET, qui n’est plus en poste à Simplon à l’heure où j’écris ces lignes, mais qui est pour
beaucoup dans mon parcours d’études à Simplon et dans mon intégration à cette promotion AIS.
Je souhaite adresser des remerciements particuliers à M. Duncan ORRO, mon formateur pour cette
année qui, par sa disponibilité, ses compétences et sa pédagogie, a su faire naître cette motivation
pour le métier. Son soutien et son accompagnement ont participé à l’éveil de ma curiosité et à
l’accroissement de mes compétences techniques.
Enfin, j’adresse mes pensées aux personnes m’ayant apporté, collègues de formation comme
collaborateurs de société, ce sentiment de progression en collectif et l’acquisition de ces
compétences dans une atmosphère de travail sereine et efficace.
Leur présence sur l’ensemble de l’année a contribué positivement au travail fourni et fut pour moi
une expérience professionnelle épanouissante.
Page 3 sur 43
2. Introduction
J’ai effectué cette année de formation d’Administrateur d’Infrastructures Sécurisées auprès de
l’organisme Simplon.co, basé à Grenoble. Ces études ont été menées en complément de mon contrat
d’apprentissage au sein de Mistral Informatique.
Cette formation s’est naturellement présentée comme la suite logique de mon parcours, étant déjà
diplômé à deux reprises dans le domaine des Systèmes et Réseaux : Technicien d’Assistance
Informatique (2019) et Technicien Supérieur Systèmes et Réseaux (2021 – en alternance également).
Désireux de consolider mes compétences et de m’initier à l’automatisation et la supervision des
infrastructures, je n’ai pas hésité à postuler lorsque j’ai eu l’occasion d’intégrer la promotion.
En pleine crise COVID, Mistral Informatique s’est trouvé en sous-effectif. Je fus alors embauché en
CDI dans le service Opérations et Services IT afin de le renforcer. Satisfait et confiant dans mon
travail, M. Le Camus et M. Porcel m’ont permis de reprendre mon parcours de formation lorsque j’en
ai eu l’opportunité.
Ces projets, très formateurs car impliquant des systèmes sur lesquels je n’avais pas encore eu
l’occasion de travailler ni en formation, ni en environnement professionnel, m’ont fait acquérir une
méthode de réflexion différente puisque je devais réfléchir de manière globale. Malgré les
spécificités de chaque client, j’ai su mettre en place des méthodes uniformes pour répondre aux
besoins de chaque projet.
Page 4 sur 43
3. Abstract
I have the opportunity to graduate as a System and Network Administrator within Simplon.co while
working part time in Mistral Informatique. This formation lasts twelve months and follows my
training path in the profession since I already have two degrees :
Mistral is actively implemented in France as a software company since 1980. Their softwares
depends on the operating AIX and Linux servers working essentially through command lines. By
selling equipments that might be necessary depending on the client infrastructure, the society also
prepares and maintains devices such as PCs, printers, routers and other network appliances.
This document describes my experience through fifteen months within the company where I learned
about its operating conditions and history. It brought me a better comprehension of the context and
its technical problematics. As a support technician, I’ve worked on basic incidents with customers
through phone and tickets, and happened to study on implementing larger scale solutions like
automation of maintenance via scripts.
The project I’ve worked on within Mistral is my answer to large scale maintenance of client
infrastructures. One of its part is a script collecting specific data of the operating system and its
services. Another part is the configuration of the ELK stack (ElasticSearch, Logstash and Kibana) on a
dedicated server.
Page 5 sur 43
4. Tableau récapitulatif
Voici le tableau récapitulant les compétences professionnelles sollicitées durant mon implication au
projet d’entreprise présenté.
Configuration et sécurisation du
système hébergeant ElasticSearch
Appliquer les bonnes pratiques et selon les bonnes pratiques de sécurité.
participer à la qualité de service Configuration de Kibana pour faciliter
l’accès à l’information avec les stricts
accès nécessaires.
Page 6 sur 43
5. Présentation de l’entreprise
5.1. Présentation générale
Groupe Mistral est un éditeur de logiciel ERP basé à Clermont-Ferrand. Ciblant principalement les
professionnels du métier agricole, de la location ou de la manutention, Mistral Informatique a été
créé en 1980 dans le but de révolutionner la distribution et la location de matériels. Groupe Mistral
est créé en 2018 afin de regrouper les multi sociétés ouvertes suivant les besoins administratifs des
différentes solutions. En constante évolution depuis plus de 40 ans, le logiciel Mistral est devenu une
référence, plaçant la société dans le top 250 des éditeurs de logiciels français (étude menée par
Numeum sur l’édition 2021). L’entreprise dépasse les dix millions de chiffre d’affaires avec 75
collaborateurs sur la fin de l’année 2021 en accompagnant plus de 550 clients pour plus de 17 000
postes de travail en France et à l’étranger. Parmi eux, nous pouvons citer les concessionnaires, les
distributeurs, les loueurs et les réparateurs de matériels divers.
1997 –
Première
version 2012 –
graphique des Premières 2018 – Reprise
ERP Magrix et applications de et création du
DLRIX mobilités Groupe Mistral
Cet historique permet la compréhension du contexte dans lequel se trouve aujourd’hui cette société
chargée d’histoire.
Page 7 sur 43
5.3. Les services
Dans un but commun de délivrer le meilleur service possible à ses clients, Groupe Mistral est
partitionné en différents services répondant aux besoins techniques, administratifs et commerciaux,
dont voici la liste et leurs chef·fes.
Opérations et
Support Logiciel services IT
• Aurélie Bijon • Vincent Porcel
Développement Commercial
• Cédric Gouttebroze • Vincent Chardot
Formations Marketing et
• Philippe Ranval communication
• Bruno Viallefont
Administratif et
financier
• Stéphanie Laurent
Administratif et S’occupe de la facturation et des contrats des différents services proposés par Mistral et par leurs
partenaires.
Financier
Commercial Couvre l’ensemble du territoire Français pour assurer les relations commerciales.
Développement Équipe de développeurs travaillant sur l’évolution, les projets et l’ajout de fonctionnalités des
solutions Mistral.
Formations Dispense les formations sur l’ensemble des modules du logiciel ; réalise des audits d'utilisation afin de
cibler les pratiques de l’entreprise cliente et ses process, dans un but d'amélioration du logiciel.
Marketing et Service prospectant de nouveaux clients, et médiatisant par le biais de vidéos ou d'infographies les
produits et solutions Mistral, dans le but d'être mieux connus de nos clients. Inversement, ils agissent
Communication pour que Mistral connaissent mieux leur clients afin d'être pertinent dans l'ajout de fonctionnalités.
Opérations et Assure le bon fonctionnement technique des solutions Mistral côté infrastructure, réseau et
périphériques.
Services IT
Support Logiciel Assiste les clients finaux dans l’utilisation et les incidents des solutions Mistral.
Page 8 sur 43
5.3.1. Zoom sur le service Opérations et Services IT
En tant que Technicien Support, ma prise de poste eut lieu dans le service Opérations et Services IT,
au sein d’une équipe constituée de sept techniciens. L’existence d’un tel service dans une société
éditrice de logiciel s’explique par le fort besoin d’infrastructure pour permettre le bon
fonctionnement des logiciels. La société étant positionnée comme revendeur de matériel, il fallait un
service pour le maintenir. Aussi, le service Opérations et Services IT s’occupe de l’installation, du
paramétrage et du maintien en condition opérationnelle des matériels vendus par la société, dont
voici une liste exhaustive :
Le service a également permis l’ouverture et le maintien du datacenter, par lequel les clients
accèdent au logiciel en mode SaaS.
Ainsi, dans les premiers mois de mon intégration dans l’entreprise, je traitai par mail et par
téléphone les demandes bloquantes des clients telles que :
Page 9 sur 43
• Le dépannage utilisateur sous Windows
Enfin, j’ai finalement pris part à des projets à plus long terme, comme le fonctionnement de Mistral
sous Windows 11, ou suite à la désinstallation d’Internet Explorer (sur lequel le logiciel s’appuie pour
certaines fonctionnalités).
Page 10 sur 43
5.4. Présentation des logiciels
5.4.1. Présentation générale
Mistral est une solution ERP divisée en deux logiciels, Magrix3G et DLRX3G qui peuvent sembler
similaires de par leur interface, mais qui auront des fonctionnalités différentes selon les besoins du
domaine d’activité. Magrix est destiné aux professionnels du monde agricole, tandis que DLRX
s’adresse au monde du BTP et de la location. Cette différence n’étant pas essentielle d’un point de
vue technique, nous désignerons les solutions par leur nom générique qu’est Mistral.
Regroupant plus de 300 modules avec chacun leur utilité, l’ERP couvre un ensemble de besoins dont
les plus notables sont la gestion des achat et des stocks, la comptabilité ou encore la gestion de parc
et de la location.
Il se présente à l’utilisateur comme une interface par laquelle l’appel de module se fait via une liste
déroulante, ou par l’appel de mnémonique.
Mistral s’accompagne de logiciels dits de « mobilités » pour les professionnels itinérants, permettant
l’accès à certaines fonctionnalités depuis des appareils mobiles comme des tablettes sous Apple ou
Android.
Page 11 sur 43
5.4.2. Présentation technique
Mistral est un logiciel historiquement développé en Cobol qui s’exécute sur un serveur dédié sous
Linux Redhat ou AIX. Si son utilisation à ses débuts se faisait au travers d’une console directement sur
le serveur, l’évolution massive des outils informatiques et de notre manière de les utiliser pousse le
logiciel à se moderniser et permettre, dès 1997, son utilisation au travers de clients.
AcuConnect, une fois mis en place sur les serveurs, permet l’ouverture de ports d’écoute pour la
connexion des clients, et le renvoie des informations du logiciel.
ThinClient, côté client, initie la connexion à AcuConnect selon l’adresse IP et le port renseignés dans
ses fichiers de configuration. Une fois la page d’authentification affichée, l’utilisateur peut naviguer
au travers du logiciel et de ses différents modules. Il est intéressant de noter que chaque ouverture
de module voit son processus associé côté serveur. Ainsi, chaque fonctionnalité du logiciel de chaque
utilisateur est gérée par le serveur de manière indépendante.
Selon les besoins exprimés par le client, Mistral peut être vendu sous différents supports, allant du
SaaS à l’infrastructure physique, ou encore la livraison du logiciel qui sera installé sur un équipement
non géré par la société.
L’accès au logiciel par les équipes techniques ou pour le déploiement de mises à jour, lorsqu’il est
délivré autrement qu’en mode SaaS, se fait via une télémaintenance, mise en place et maintenue par
Groupe Mistral et éventuellement par le client. Il s’agit d’un tunnel IPSec entre deux équipements
permettant la connexion à distance au serveur hébergeant le logiciel. L’équipement côté client est
configuré en mode responder, ce qui permet de monter le tunnel uniquement à l’initiative du réseau
Mistral, avec par exemple la tentative de connexion au serveur pour les opérations de maintenance.
Page 12 sur 43
6. Projet en entreprise – Inventaire du parc clients
6.1. Contexte
Mistral est une société éditrice de logiciels ayant la particularité de fournir du matériel informatique
et d’en assurer son maintien en condition opérationnelle. S’adaptant aux problématiques techniques
des infrastructures clients dans lesquelles nous intervenons, les équipements pourront varier. Dans
le cas de serveurs, il s’agira d’AIX ou de Redhat Linux qui seront vendus et donc sous la propriété du
client. Réputés très durables, ces serveurs ont une grande durée de vie et seront remplacés selon le
bon vouloir du client, généralement lors d’une défaillance technique hors garantie. Ce point est
important car il explique que le parc client que nous maintenons est hétérogène, non seulement du
fait qu’il s’y trouve deux systèmes d’exploitation aux différences notables, mais également de par les
différences de versions des serveurs toujours en production, pour certains depuis plus de 15 ans. Ces
versions plus anciennes, bien que toujours fonctionnelles, posent la question de l’obsolescence des
services installés, et les problématiques de sécurité que cela engendre.
Le mode SaaS se présente comme une solution à ces questions d’hétérogénéité. En effet, les
serveurs sont hébergés sur un hyperviseur VmWare dans notre datacenter ; ils sont faciles d’accès et
à maintenir à jour ; et ils sont sous la propriété de Mistral, en location pour le client.
C’est également un avantage pour le client, qui ne dispose pas de serveur à installer et à surveiller au
sein de sa société. Il n’a pas non plus à disposer d’équipements supplémentaires pour nous
permettre de maintenir son infrastructure Mistral en fonctionnement, comme c’est le cas avec les
tunnels IPSec mis en place pour assurer la télémaintenance.
Cependant, le mode SaaS n’est promu auprès des clients que depuis très récemment, et s’il séduit
les nouveaux clients, la migration des anciens se fait plus difficilement malgré nos démarchages
commerciaux. Cela s’explique du fait qu’ils sont propriétaires de leur infrastructure, et que celle-ci
est toujours fonctionnelle. De ce fait, nous avons toujours une très grande majorité de serveurs à
maintenir se trouvant chez les clients, et si nous avons conscience de ce parc hétérogène, nous
n'avons aucun moyen de déployer des solutions adaptées à chaque infrastructure.
Page 13 sur 43
6.2. Expression des besoins
En prenant le contexte en compte, l’objectif final est donc de sécuriser l’ensemble du parc
informatique client. Cependant, cet objectif en amenait d’autres, sans lesquels il ne peut être atteint,
que j’ai identifiés en trois étapes :
Inventaire technique de
l'ensemble des serveurs
Déploiement de solutions de
sécurisation des serveurs
Dans le cas de Mistral, tout restait à faire. Il m’a alors été confié la première étape de ce projet de
sécurisation des infrastructures : étudier et mettre en place une solution d’inventaire du parc
hétérogène client.
Cette mise en place doit se faire sous plusieurs contraintes, définies avec mon chef de service :
Ce projet d’inventaire constitue mon projet d’entreprise pour mon alternance d’Administrateur
d’Infrastructures Sécurisées.
Page 14 sur 43
6.3. Schéma directeur
Partant de zéro, j’ai identifié les étapes du projet pour formaliser le schéma directeur suivant :
•Une fois ces informations ciblées, la mise en place d'une solution d'extraction des
données de manière automatique doit être mise en place et compatible avec tous
Extraire les serveurs installés chez les clients.
•Suite à leur extraction, ces informations ne peuvent pas rester contenues dans de
simples fichiers textes. Elles doivent être traitées dans le but d'être interprétables
Traiter par d'autres outils.
•Les données, une fois formatées, nécessitent ensuite d'être stockées dans une base
Stocker de données centralisée.
•Enfin, ces données, doivent être rendues accessibles au sein d'une même interface
Afficher dans le but d'être exploitées.
La finalité du projet est d’avoir une interface dans laquelle nous pourrons, par exemple, filtrer les
résultats en affichant seulement les serveurs présentant un service obsolète. Un tel résultat nous
permet d’avoir une liste de clients sur lesquels déployer une solution.
Page 15 sur 43
6.3.1. Cibler les informations essentielles des serveurs – Étude des infrastructures
Inventorier les serveurs impliquait de connaître les informations essentielles à extraire. Un serveur
hébergeant le logiciel Mistral a besoin, pour fonctionner, de plusieurs services réseaux différents. A
titre d’exemple, la prévisualisation de documents PDF et leur impression nécessite que le serveur soit
serveur web et serveur d’impression.
Voici la liste des différents services que l’on peut trouver sur un serveur Mistral, et que l’on souhaite
donc connaître pour notre inventaire :
Il était pertinent de rajouter à cette liste un inventaire des protocoles non sécurisés susceptibles
d’être toujours activés, comme la connexion via Telnet ou le transfert de fichiers en FTP.
Bien sûr, cette liste de données à récupérer n’est qu’une base qui évoluera par la suite. Mais celle-ci
constitue pour le moment un bon point de départ pour la mise en place de ces solutions.
Page 16 sur 43
6.3.2. Mettre en place une solution d’extraction des informations – Script d’inventaire
En possession des informations à obtenir des serveurs, il faut réfléchir à une solution pour les
extraire. Les cibles étant des serveurs Linux/UNIX, j’ai fait le choix de rédiger un script allant chercher
ces données pour les stocker ensuite dans un fichier. Ce script devait répondre à plusieurs
contraintes :
• Être compatible avec Bash et KSH, étant respectivement les shells par défaut des
environnements Linux Redhat et AIX.
• Dans certains cas, prévoir le cas où le système serait type Linux ou type Unix. En effet, les
commandes ne sont pas toujours les mêmes car le fonctionnement des services peut différer
d’une distribution à l’autre.
J’ai donc décidé que ce script serait orienté objet, où chaque fonction serait la succession de
commandes pour obtenir les informations d’un service. Ces informations sont stockées sur une seule
ligne dans un fichier texte pour l’apparenter à une donnée de journalisation, afin de faciliter son
traitement ensuite.
Le script est disponible en annexe. Il a bien sûr été modifié à plusieurs reprises afin de se conformer
aux prérequis des étapes suivantes.
Son fonctionnement est simple : après avoir été importé sur le serveur cible, il doit être rendu
exécutable, puis exécuté :
Le script s’exécute de manière silencieuse. Dès que la console rend la main, un fichier inventaire-
hostname-AAA_MM_JJ.inv est créé dans le répertoire /tmp.
$ ls /tmp/*.inv
> /tmp/inventaire-CLIENT7-2022_08_01.inv
Les champs ?IP_2? et ?IP_3? sont des informations optionnelles. Certains des serveurs de nos clients
disposent en effet de plusieurs cartes réseaux, une utilisée pour l’accès local pour les clients, et une
utilisée pour notre accès en télémaintenance. Cette particularité vient du fait que chaque client, chez
lequel nous sommes susceptibles de nous connecter au travers un tunnel IPSec, nécessite son propre
adressage réseau. Il ne doit pas être en double avec l’adressage d’un autre client, sans quoi cela
poserait des problèmes de routage.
Dans la majeure partie des cas, nous avons pu refaire l’adressage réseau de nos clients afin de ne
pas avoir recours à une deuxième carte réseau, mais une minorité de serveurs dispose tout de même
Page 17 sur 43
de deux, voir trois adresses IP (car les contraintes de prestataires extérieurs peuvent aussi nécessiter
la mise en place d’une autre adresse IP).
Le dernier champ COMMENTAIRE a été prévu dans le cas où des informations additionnelles
devraient être signalées. Non utilisé pour le moment, il contient à chaque fois la mention end.
$ cat /tmp/inventaire-CLIENT7-2022_08_01.inv
> client7 AIX 7.2.0.0 192.168.1.1 9.2.1 3.6.25 8.50 1.17 8.1p1 1.0.2u
false true false end
C’est ce fichier qui sera utilisé pour le traitement des données dans les étapes suivantes.
J’ai donc choisi de mettre en place une machine virtuelle sur notre hyperviseur vCenter, avec la
configuration suivante :
• 2 CPU
• 8Go de Mémoire Vive
• 100Go de données sur un disque dur
• Système d’exploitation Debian 11
Mon choix d’OS s’est porté sur Debian, pour ma connaissance du système ainsi que pour sa
popularité auprès des outils open source.
Sachant que je manipulerai un certain nombre de données variables, le disque a été partitionné en
conséquence, en allouant la majeure partie de l’espace dans la partition /var.
Le serveur est installé sans interface graphique, avec simplement un serveur SSH pour permettre la
connexion distante.
Page 18 sur 43
6.3.4. Traitement automatique des données – Logstash
En exécutant le script sur une soixantaine de serveurs, j’avais une base pertinente pour effectuer de
l’analyse de données. Plusieurs solutions ont été explorées pour le traitement :
• Un script Powershell pour compiler les différents inventaires des serveurs dans un fichier
Excel
• Formatter l’inventaire en XML pour le traitement ultérieur par des outils tierces
Je me suis finalement rappelé de cet outil vu en formation, Logstash, utilisé spécialement pour le
traitement et le renvoi des données analysées. Disposant d’un serveur Debian, j’ai pu l’installer et
commencer la configuration avec le filtre.
Logstash intègre nativement l’outil Grok, avec lequel nous pouvons analyser et séparer des données
de manière précise et automatique. Pour rappel, la ligne d’inventaire des fichiers qui seront analysés
a la forme suivante :
Ainsi, après plusieurs essais sur l’outil en ligne grokdebug, j’en suis venu au filtre Grok ci-dessous :
Ici, le filtre prend bien compte le caractère « optionnel » des 2 adresses IP supplémentaires (pour un
maximum de 3).
Page 19 sur 43
Dans les différents cas de figure :
Ce qui m’a permis de faire un premier fichier de configuration inventaire.conf pour en valider le
fonctionnement en condition réelle :
L’entrée d’une ligne d’inventaire nous confirme que les données sont correctement formatées et
prêtes à être envoyées.
Une fois le filtre établi, il nous fallait savoir comment les données serait reçues, et où les envoyer :
soit les paramètres input et output.
Page 20 sur 43
Concernant le paramètre input, j’ai pensé pour le moment à créer un répertoire dédié pour le dépôt
de ces fichiers d’inventaires. Logstash garde ce dossier sous surveillance et traite l’arrivée des
nouveaux fichiers. Le paramètre input est alors configuré comme suit :
L’output, dépendant de la suite du traitement et de l’affichage des données, sera traité dans le
prochain point.
Aussi, le fichier de configuration elasticsearch.yml n’a, pour le moment, pas été modifié. La base de
données est prête à l’emploi et permet de finaliser le paramétrage de l’option output de Logstash,
donnant le fichier de configuration suivant :
Page 21 sur 43
Le dernier paramètre « index » constitue le nom des rapports contenant les informations des
serveurs. Ici, pour chaque fichier analysé, un index, dont le nom dépendra du nom d’hôte du serveur
en question et du jour de l’année, sera généré dans ElasticSearch.
Une fois les fichiers d’inventaire placés à l’emplacement défini, relancer notre commande Logstash
ne renvoie maintenant aucun output. Une erreur de connexion à ElasticSearch aurait été signalée
directement dans la console. Mais nous pouvons tout de même nous assurer que les index ont bien
été créés avec la commande curl.
La console nous renvoie les index créés, et nous constatons bien que nos rapports sont présents
dans la base de données ElasticSearch. Il nous reste à configurer l’interface sur laquelle consulter nos
données.
Page 22 sur 43
6.3.6. Affichage des données – Kibana
Kibana semble le choix le plus approprié pour l’affichage des données d’ElasticSearch, et ce sur
plusieurs points :
Toujours avec les dépôts officiels, l’installation de Kibana s’auto configure pour un accès à l’interface
web en http sur le port 5601, en localhost uniquement. Permettre la connexion à l’interface depuis le
réseau local nécessite d’éditer le fichier de configuration kibana.yml pour modifier le paramètre
server.host, le passant de localhost à 0.0.0.0 pour le faire écouter sur toutes ses interfaces réseaux.
Son interconnexion avec la base de données se fait grâce à un token de sécurité que l’on peut
générer avec une commande ElasticSearch :
$ bin/elasticsearch-create-enrollment-token -s kibana
Cette commande permet la configuration automatique de Kibana pour joindre la base de données
ElasticSearch. Une fois fait, nous pouvons nous connecter à l’interface web avec le super utilisateur
automatiquement créé par ElasticSearch lors de son installation.
Les index sont déjà visibles dans le menu Analytics -> Discover après création de la Data View
rapport_*, permettant de visualiser tous les index dont le nom commence par rapport_.
Page 23 sur 43
A gauche, nous trouvons le nom des champs définis dans notre filtre grok ; et, au centre, les
différents rapports d’inventaire des serveurs collectés. En cliquant sur l’un d’eux, nous avons une
vision détaillée de l’index et de toutes les données récupérées.
Ces données, peu exploitables, peuvent l’être via la création de Dashboards pour une visualisation
simplifiée des informations, dans le menu Analytics -> Dashboard.
Page 24 sur 43
En cliquant sur les différents éléments, nous pouvons affiner notre recherche. Dans l’exemple ci-
dessous, je choisis d’afficher uniquement les serveurs Linux 5.8 avec le port Telnet en écoute :
Cette fonction nous permet de cibler les services présentant des problématiques de sécurité et de
connaître l’étendue des serveurs clients sur lesquels déployer des solutions.
Ainsi, nous avons mis en place l’interface permettant de visualiser l’ensemble des inventaires
effectués sur les serveurs, de manière claire et centralisée.
Logstash
Parce que l’environnement est en phase de test, j’utilisais la commande Logstash démarrant
l’analyse des fichiers en tant que root. Plus tard, la commande sera invoquée automatiquement et
exécutée en tant que l’utilisateur Logstash. Pour cela, j’ajuste dans un premier temps les droits de
sécurité sur le répertoire de configuration Logstash.
$ chown -R root:logstash /etc/logstash
$ chmod -R 640 /etc/logstash
Les dossiers de l’arborescence /etc/logstash doivent également avoir les droits d’exécution, sans
quoi l’utilisateur Logstash ne pourra pas accéder aux fichiers enfants.
$ find /etc/logstash -type d | xargs chmod 750
Ainsi, seul root et logstash ont les droits de lecture sur ces fichiers de configuration contenant des
informations de configurations sensibles. Et ces fichiers ne sont modifiables que par root.
$ mkdir /etc/logstash/certs
$ cp /etc/elasticsearch/certs/http_ca.crt /etc/logstash/certs/http_ca.crt
Page 25 sur 43
Nous éditons ensuite le fichier de configuration inventaire.conf, dans la section Output, pour
redéfinir l’emplacement du certificat.
Dans un premier temps, nous créons un rôle logstash_writer avec les droits suivants :
Page 26 sur 43
Nous éditons enfin le fichier inventaire.conf pour utiliser les identifiants logstash_internal.
Nous ajustons également les droits des fichiers logs contenus dans /var/log/logstash/. En effectuant
les tests de configuration en tant que root, des fichiers non modifiables par logstash ont été créés,
l’empêchant ainsi de journaliser son activité.
Maintenant que notre commande fonctionne, il faut qu’elle soit en constante écoute des fichiers
entrants. Nous l’inscrivons alors en tant que service. De cette manière, la commande pourra être
exécutée au démarrage du système et contrôlée via systemctl.
$ vi /etc/systemd/system/inventaireMistral.service
$ systemctl daemon-reload
$ systemctl start inventaireMistral.service
$ systemctl status inventaireMistral.service
Page 27 sur 43
$ systemctl stop inventaireMistral.service
Logstash est maintenant conforme aux bonnes pratiques systèmes et celles conseillées par
ElasticSearch.
ElasticSearch
Comme dit plus haut, ElasticSearch est installé et autoconfiguré de manière sécurisée.
Conformément à leurs recommandations : l’authentification est activée de sorte à ce que seuls les
utilisateurs autorisés et authentifiés puissent accéder à la base de données et la connexion se fait en
SSL vérifiée par un certificat de sécurité.
L’outil est également livré avec un module de sécurité, activé et fonctionnel par défaut, que nous
avons déjà utilisé pour gérer les rôles et les utilisateurs.
Nous pouvons nous assurer de son bon fonctionnement avec Curl, via la commande suivante :
Aucune modification n’étant nécessaire car répondant déjà aux bonnes pratiques de sécurité, nous
pouvons alors sécuriser Kibana.
Page 28 sur 43
Kibana
Une problématique majeure de sécurité dans la configuration de Kibana est son accès autoconfiguré
en http, contrairement à ElasticSearch. La première étape est donc de configurer l’utilisation du
protocole HTTPS pour chiffrer les données entre le navigateur et l’interface web.
Pour cela, nous générons un certificat grâce à l’outil intégré dans l’installation d’ElasticSearch.
Cette commande génère une archive kibana contenant deux fichiers dont un certificat en .crt et une
clé privée en .key
Ces fichiers, une fois extraits, sont déplacés dans un sous répertoire de /etc/kibana afin d’en garantir
l’accès à l’utilisateur kibana uniquement.
Une fois fait, nous configurons le fichier kibana.yml pour activer la connexion https.
Ainsi, nous avons accès à l’interface web de manière sécurisée après redémarrage du service kibana.
L’outil est configuré de telle sorte à ce que les requêtes http soient redirigées automatiquement sur
du https.
Ceci étant fait, une bonne pratique serait la création de groupes permettant uniquement la lecture
des index d’inventaire rapport_*. Comme La plupart des utilisateurs auront accès de manière
consultative à la plateforme, leur administration en sera beaucoup plus simple.
Pour cela, nous créons un espace Consultation dont nous restreignons la visibilité simplement aux
index et aux dashboards.
Page 29 sur 43
Nous créons ensuite le rôle inventaire_viewer avec des droits de lectures sur les index commençant
par rapport_.
Comme il s’agit, avec ce groupe, d’accéder à Kibana, nous éditons également les accès associés en
autorisant l’accès aux index et aux dashboards.
Enfin, nous créons un utilisateur muni du rôle inventaire_viewer pour nous connecter à l’interface.
Page 30 sur 43
On constate dans le menu sur la gauche que seuls les menus autorisés en lecture sont accessibles, et
que les données sont consultables sans pouvoir être modifiées.
De cette manière, nous pourrons créer les rôles de lecture et d’écriture pour chaque partie de
l’interface, et en attribuer les droits aux utilisateurs définis.
Enfin, il reste à définir le paramètre de l’URL sur laquelle les utilisateurs finaux se connectent. Ce
paramètre server.publicBaseUrl se définit dans le fichier kibana.yml.
La réflexion doit toujours être ouverte sur l’ajout d’informations à inventorier. Nous avons pensé au
nombre de disques installés et leur taux d’occupation, ainsi qu’à des données applicatives spécifiques
à Mistral.
Un outil de déploiement doit être mis en place pour déployer massivement le script d’inventaire.
L’outil Ansible étant connu de l’entreprise, nous nous orientons déjà sur cette solution. Mais cette
mise en place dépend de plusieurs critères :
Déploiement de
l'inventaire (Ansible)
Page 31 sur 43
6.4.1. Restructuration du DNS de l’entreprise
Pour qu’Ansible fonctionne correctement et de manière organisée, nous devons restructurer le DNS
de l’entreprise pour avoir une liste de clients à jour. La connexion chez les clients se fait trop souvent
par adresse IP, par habitude et du fait que le DNS n’est pas toujours maintenu. Remettre le DNS à
jour nous permettrait de limiter les erreurs de connexion lors d’un déploiement.
Plusieurs pistes sont envisagées pour la restructuration du DNS, la plus convaincante étant de lier les
adresses IP au numéro de client interne à Mistral, et de créer des alias pour les différents noms que
peuvent prendre les clients. De cette façon, nous aurions une manière pratique pour les équipes de
joindre les serveurs des clients (via leur nom), et une manière infaillible pour Ansible d’effectuer son
déploiement (via le numéro de client).
Page 32 sur 43
7. Projet en entreprise – Analyse des rapports DMARC
La mise en place d’un serveur ElasticSearch et Kibana ouvrait des possibilités d’analyse de données
pour lesquelles nous n’avions pour le moment pas de solution de traitement. Parmi elles, nous
recevons régulièrement des rapports DMARC au format XML, difficilement lisibles tels quels.
7.1. Contexte
DMARC est une technologie venant se compléter à deux autres, SPF et DKIM, pour prouver
l’authenticité d’un mail délivré par le domaine qu’il protège.
• SPF (Sender Policy Framework) agit comme processus d’identification, par la déclaration
d’adresse IP publique autorisées à envoyer des mails.
• DKIM (DomainKeys Identified Mail) permet d’assurer, par chiffrement asymétrique,
l’intégrité du mail, de son contenu comme de son en-tête, et vérifie la légitimité de
l’expéditeur.
• DMARC s’appuie sur les vérifications SPF et DKIM afin d’appliquer des règles de traitement
des emails. Suivant la politique établie et les résultats, les emails pourront être envoyés,
placés en quarantaine ou rejetés.
Il s’agit donc d’une mesure de sécurité pouvant prévenir l’envoi de mails indésirables en nom et
place d’un domaine de messagerie.
La mise en place de ce service s’accompagne de rapports DMARC envoyés par les hébergeurs de
messagerie, tels que Google ou Outlook, rapportant toutes les informations des tentatives de mails
expédiés avec le domaine de la société. Ces rapports sont envoyés sur la boîte mail de mon chef de
service pour une consultation manuelle.
Page 33 sur 43
7.3. Schéma directeur
La partie traitement et visualisation des données étant déjà en place, j’ai défini le schéma directeur
suivant :
• Plutôt que de recevoir les mails dans une boîte aux lettres
utilisateurs, la création d'une adresse dédiées sur laquelle stocker
Rassembler la réception des rapports DMARC semblait plus approprié.
• Une fois les données traitées, il s'agit de les visualiser sur notre
interface Kibana.
Visualiser
7.3.1. Rassembler les rapports – Création d’une boîte aux lettres dédiées
Cette étape, peut-être anodine au premier abord, est importante car il s’agit du point de départ
pour la collecte des rapports.
Nous créons alors une boîte mail dédiée, et reparamétrons les enregistrements DNS de notre
domaine pour y ajouter la boîte mail en tant que destinataire des rapports. Ces rapports arriveront
alors dans la boîte de réception. Nous créons un dossier processed dans lequel les rapports traités
devront être déplacés, de manière à garder une trace des rapports tels que nous les recevons.
Page 34 sur 43
7.3.2. Collecter les données – ParseDMARC
ParseDMARC est un outil OpenSource développé en Python, dont les fonctionnalités permettent la
connexion en IMAP sur une boîte mail et la récupération des pièces jointes XML. Cet outil est
particulièrement efficace car il est également en capacité de traiter les rapports compressés, comme
cela peut être le cas selon l’hébergeur de mail expédiant le rapport.
Une fois les données traitées, il est en capacité de les envoyer à d’autres outils, comme par exemple
à une instance ElasticSearch.
S’exécutant sur une machine Linux, je décide de le rajouter sur le serveur ElasticSearch déjà en
place. Une fois installé via python3, ParseDMARC fonctionne via une ligne de commande appelant un
fichier de configuration.
$ vi ./parsedmarc.ini
Le champ [general] définit les serveurs DNS ainsi que le traitement des rapports aggregate et
forensic. Le premier est un rapport journalier contenant les tentatives d’envois de mails et leurs
informations, comme par exemple leurs adresses IP sources. Le second est un rapport plus détaillé
dans le cas de refus d’envoi car les challenges SPF et DKIM ont échoué.
Le champ [imap] contient les informations de connexion au serveur de messagerie pour accéder à la
boîte aux lettres dédiée.
Page 35 sur 43
Le champ [mailbox] paramètre le dossier de la boîte mail à scanner, et le dossier de réception des
mails traités. Il s’agit donc respectivement de la boîte de réception et du dossier processed créé plus
tôt.
Enfin, le champ [elasticsearch] indique la base de données ElasticSearch à contacter pour l’envoi des
données.
$ parsedmarc -c ./parsedmarc.ini
Une fois en cours d’exécution, son bon fonctionnement se constate en vérifiant le point d’entrée et
de sortie, avec, d’une part, la boîte mail dont la boîte de réception s’est vidée pour les répartir dans
les différents dossiers créés par ParseDMARC -
- et de l’autre, je constate la création d’index dans la base de données ElasticSearch via la commande
Curl.
Ces index se trouvent également sur l’interface web de Kibana, après la création d’une data view
visualisant les index dont le nom commence par dmarc_.
Page 36 sur 43
Une des fonctionnalités de ParseDMARC permet la géolocalisation des adresses IP source des
tentatives d’envoi de mails. Cette fonctionnalité s’appuie sur la base de données GeoIP, que j’installe
également sur le serveur. Disponible gratuitement à des fins d’utilisation non commerciale, son bon
fonctionnement peut se constater en appelant la version de l’outil.
$ geoipupdate -V
La mise à jour de la base de données s’effectue via une tâche dans le cron de l’utilisateur root,
conformément à la documentation.
Page 37 sur 43
7.3.3. Visualiser les rapports DMARC – Kibana
Pouvant visualiser les données dans le menu Analytics, nous pouvons directement passer à l’étape
de la création de Dashboard, dont voici un aperçu pertinent.
Dans un premier temps, nous créons un utilisateur système dédié à l’exécution des commandes
parsedmarc.
$ useradd parsedmarc -r -s /bin/false
En ajoutant les commandes -r et -s, nous spécifions qu’il s’agit d’un utilisateur système et qu’il ne
dispose pas de shell. Ainsi, nous ne pouvons pas nous connecter avec le compte de cet utilisateur. Il
ne servira qu’à exécuter les commandes parsedmarc.
Les fichiers de configuration ParseDMARC se trouvent dans le répertoire /etc/, dans lequel nous
créons le dossier dédié avec les bonnes autorisations.
$ mkdir /etc/parsedmarc
$ chown root:parsedmarc /etc/parsedmarc
$ chmod 750 /etc/parsedmarc
Page 38 sur 43
Ce dossier accueillera notre fichier parsedmarc.ini auquel nous attribuons les bonnes autorisations.
$ mv ./parsedmarc.ini /etc/parsedmarc/
$ chown root:parsedmarc /etc/parsedmarc/parsedmarc.ini
$ chmod 640 /etc/parsedmarc/parsedmarc.ini
De cette manière, seuls les utilisateurs root et parsedmarc ont accès au fichier, et il n’est modifiable
que par root.
Enfin, nous administrons les rôles et utilisateurs ElasticSearch via l’interface Kibana, dans le but de
dédier la création des index à un utilisateur créé spécifiquement. Nous créons un rôle
parsedmarc_writer permettant la création d’index dmarc_* avec les paramètres ci-dessous :
Page 39 sur 43
Ces configurations nécessitent la mise à jour du fichier parsedmarc.ini, en modifiant l’emplacement
du certificat ainsi que l’utilisateur et le mot de passe utilisés pour la connexion. Ensuite, nous testons
le fonctionnement de l’outil en l’appelant en tant que l’utilisateur parsedmarc.
Une fois le bon fonctionnement de l’outil constaté, on peut inscrire la commande en tant que
service pour qu’elle soit appelée au démarrage du système, et contrôlée via systemctl.
$ vi /etc/systemd/system/parsedmarc.service
La création d’un utilisateur via l’interface Kibana dédié à la consultation de l’inventaire ponctue la
partie de la sécurisation de l’outil ParseDMARC. Nous ajoutons un rôle dmarc_viewer associé à
l’espace Consultation déjà existant, copié sur le rôle inventaire_viewer (en adaptant cependant les
index consultables).
Page 40 sur 43
De cette manière, nous avons un rôle permettant d’autoriser l’accès à la consultation des rapports
DMARC.
Page 41 sur 43
8. Conclusion
Au travers la mise en place de ces différents outils travaillant les uns avec les autres, j’ai mis en place
une plateforme de consultation des données centralisées et sécurisées, traitant et rendant
disponible de manière automatique les fichiers d’inventaires déposés au sein du serveur.
Le script d’inventaire a été un challenge, me heurtant aux commandes non compatibles d’un
système à l’autre, ou la différence de fonctionnement des systèmes d’exploitation me contraignant
de prévoir de multiples scénarios. Ce script a dû être réécrit et adapté plusieurs fois pour formater
correctement la sortie en fonction de l’outil prévu pour le traitement des données. Avant de parler
de Logstash, le script formatait sa sortie en CSV, puis en XML. Finalement, une ligne par serveur avec
les informations voulues a été la meilleure manière de permettre l’intégration des données via
Logstash.
Une fois Logstash choisi, l’utilisation d’ElasticSearch et de Kibana a été plus évidente. La difficulté
résidait dans la configuration du filtre Grok et les paramètres optionnels, nécessitant une mise en
forme stricte sur les espacements entre chaque paramètres présents ou non présents.
Ayant déjà expérimenté l’installation de la suite ELK en formation, j’ai pu étendre mes connaissances
sur les outils, après leur installation et leur interconnexion, en les sécurisant et m’initiant aux bonnes
pratiques de sécurité et d’utilisation. Il ne s’agissait plus de rendre l’interface fonctionnelle en vue
d’une utilisation hypothétique, mais de la rendre exploitable dans un environnement professionnel
de production et de répondre à un cahier des charges. La présentation de cet outil à l’équipe devait
démontrer d’un fonctionnement concret et convaincre de sa pertinence.
Cela m’a permis d’approcher une méthode de travail complétement différente de celle vue jusqu’à
présent en formation. Après trois ans d’expérience professionnelle, ce fut mon premier pilotage de
projets aussi conséquent en autonomie. L’objectif principal étant d’inventorier le parc client, j’avais
carte blanche sur les solutions utilisées (pour peu que je réponde aux contraintes techniques et
budgétaires). Ayant non seulement apporté une réponse aux objectifs, j’ai mis à disposition pour
l’entreprise un nouvel outil de traitement des données qui est aujourd’hui déjà envisagé pour être
utilisé au travers d’autres projets, comme ça a été le cas avec l’analyse des rapports DMARC.
D’un point de vue plus personnel, ces projets m’ont permis de gagner en assurance et en
autonomie, de par les responsabilités qui m’ont été confiées. J’ai pu mettre à profit l’essentiel de
mes connaissances en systèmes et en sécurité pour mettre en place des plateformes sécurisées
répondant à des besoins spécifiques. Le bon déroulé de ces projets m’a fait prendre conscience de
mes capacités professionnelles.
Cette expérience a été, pour moi, une motivation supplémentaire à poursuivre dans le métier
d’Administrateur Systèmes et Réseaux.
Page 42 sur 43
9. Annexe – Script d’inventaire
Page 43 sur 43
Script d’inventaire du parc client
# Exécution du script en mode silencieux
exec 2>/dev/null
# Suppression des fichiers créés par une éventuelle exécution antérieure du script
rm -rf $tempDir $ficInventaire
## FONCTIONS
# endFunc est utile afin de formatter le fichier différemment sans le modifier entièrement
_endFunc() {
printf ' ' >> $ficInventaire
}
# Fonction localisant le service entré ($1), selon si l'OS est de type Linux ou UNIX
_whereis() {
if [ "$OSTYPE" = "linux-gnu" ] ; then
_location=$(whereis $1 | awk -F' ' '{print $2}')
else
type $1 | awk -F' ' '{print $3}' > $tempData/tmpwhereis
_location=$(cat $tempData/tmpwhereis)
fi
if [ "$_location" = "" ] ; then
_location="introuvable"
else
break
fi
echo "$_location" | tr -d "\n"
}
# Version de l'OS
_getOsVersion() {
if [ "$OSTYPE" = "linux-gnu" ] ; then
cat /etc/redhat-release | awk -F'release ' '{print $2}' | tr '(' '#' | awk -F' #' '{print $1}' | tr -d "\n"
>> $ficInventaire
else
oslevel | tr -d "\n" >> $ficInventaire
fi
_endFunc
}
# Récupération des versions de SMB, GhostScript et PsUtil, en prévoyant le cas de figure où ceux-ci ne seraient pas
installés sur la machine
_getSmbdVersion() {
_smbdLocation=$(_whereis smbd)
if [ "$_smbdLocation" = "introuvable" ] ; then
printf 'introuvable' >> $ficInventaire
else
$_smbdLocation --version | awk '{print $2}' | tr -d "\n" >> $ficInventaire
fi
_endFunc
}
_getGsVersion() {
_gsLocation=$(_whereis gs)
if [ "$_gsLocation" = "introuvable" ] ; then
printf 'introuvable' >> $ficInventaire
else
$_gsLocation -v | awk 'NR==1{print $3}' | tr -d "\n" >> $ficInventaire
fi
_endFunc
}
_getPsselectVersion() {
_psSelectLocation=$(_whereis psselect)
if [ "$_psSelectLocation" = "introuvable" ] ; then
printf 'introuvable' >> $ficInventaire
else
$_psSelectLocation -v 2>$tempData/psselect
head -1 $tempData/psselect | awk '{print $3,$5}' | tr " " "." | tr -d "\n" >> $ficInventaire
fi
_endFunc
}
_getSshVersion() {
ssh -V 2>$tempData/sshV
head -1 $tempData/sshV | awk -F, '{print $1}' | awk -F_ '{print $2}' | tr -d "\n" >> $ficInventaire
_endFunc
}
_getSslVersion() {
ssh -V 2>$tempData/sshV
head -1 $tempData/sshV | awk '{print $3}' | tr -d "\n" >> $ficInventaire
_endFunc
}
_getTelnetStatus () {
if [ "$OSTYPE" = "linux-gnu" ] ; then
_isTelnet=$(netstat -an | grep :23 | grep LISTEN | awk 'NR==1{print $6}')";"
else
_isTelnet=$(netstat -an | grep *.23 | awk 'NR==1{print$6}')";"
fi
if [ $_isTelnet == 'LISTEN;' ] ; then
printf "true" >> $ficInventaire
else
printf "false" >> $ficInventaire
fi
_endFunc
}
_getHostname
_getOs
_getOsVersion
_getIpAddress
_getAcushareVersion
_getSmbdVersion
_getGsVersion
_getPsselectVersion
_getSshVersion
_getSslVersion
_getFtpStatus
_getSshStatus
_getTelnetStatus