Introduction
Les Security information and event management, ou SIEM pour les intimes, sont des systemes essentiels pour centraliser les logs (journaux d’activité) provenant de diverses machines qui composent un système d’information (SI). Ces machines peuvent inclure des firewalls, des switches, des serveurs Windows ou Linux, ou tout autre systeme capable de générer des journaux.
Un système SIEM collecte ces logs et les analyse en les soumettant à des règles prédéfinies. Si une activité suspecte est détectée (comme une attaque par force brute, la suppression d’un fichier, des connexions anormales, ou le lancement de processus non autorisés), le SIEM déclenche une alerte. Cela permet de vérifier si l’alerte est un vrai positif (en distinguant les faux positifs) et d’agir en conséquence pour réduire le risque de compromettre la fameuse triade CIA : Confidentialité, Intégrité, et Disponibilité.
Vous l’aurez deviné, un système tel qu’un SIEM est un élément essentiel si nous voulons améliorer la sécurité de notre SI.7
Lançons-nous maintenant dans un guide sur comment installer et configurer une marque de SIEM open source, mais qui, malgré cela, est très puissante : cette solution est Wazuh. Je vais vous présenter au fur et à mesure des articles le processus d’installation, de configuration, et, si j’ai le temps, même des démos pour vous montrer à quel point un SIEM peut être puissant.
Prerequis
Bon, nous allons nous lancer dans un projet qui est passionnant, mais avant de se lancer dans un tel projet, il faut avoir un certain bagage. Il faudra savoir manipuler un terminal Linux. Et c’est tout !
Vous voyez, je suis quand même sympa, je ne vous demande pas beaucoup ;)
Decouverte de Wazuh
Wazuh est une des références dans le domaine des SIEM.
Wazuh va nous permettre de faire tout ce qu’on veut et plus ! Pour information, Wazuh est basé sur pas mal d’outils de la maison ElasticSearch, et ce, avant que ElasticSearch ne change sa politique financière. En fait, Wazuh est basé sur OpenSearch, lui-même dérivé d’ElasticSearch. Wazuh a donc fait un fork pour être plus indépendant d’OpenSearch. Bon, un vrai bourbier, mais les complications s’arrêtent ici. Nous allons maintenant voir comment l’installer sur une machine Debian.
Mais avant cela, parlons un peu de l’architecture que nous allons mettre en place.
Architecture :
Voilà l’architecture que nous allons mettre en place. Cette infrastructure, plutôt simple en apparence, cache beaucoup de choses derrière elle.
Pour commencer, parlons des endpoints. Ici, Wazuh est un très bon élève, car il supporte beaucoup de plateformes. Sur ces plateformes qu’il supporte, on pourra installer des agents-Wazuh qui, en plus de récupérer et d’envoyer les journaux, peuvent faire un pré-traitement. De plus, Wazuh propose une fonctionnalité de réponse automatique aux événements. Nous verrons cette partie plus tard. Parmi les systèmes supportés, on trouve les principaux : Linux, Windows, et même des firewalls comme pfSense.
Également, il supporte les redirections des logs Syslog, ce qui permet de récupérer les logs des firewalls, switches, et/ou autres serveurs où le Wazuh-Agent n’est pas installable, et de les intégrer à notre infrastructure.
Une fois que les agents ou les redirections Syslog auront récupéré les journaux qui nous intéressent, ils vont les envoyer à notre cerveau, au maître de la conférence : le Wazuh Server, ou le Wazuh-Manager pour les intimes. Ici, c’est là où tout se passe, de l’analyse à la réponse à incident, c’est là où tout se décide.
Une fois que le Wazuh-Server aura décidé ou non de lancer une alerte, on pourra voir ces alertes dans un magnifique dashboard appelé Wazuh-Dashboard (pas d’originalité dans les noms…). Ici, on pourra chercher, observer, et même créer des dashboards personnalisés selon nos envies.
Mais ces logs, une fois traités, il faut bien entendu les stocker quelque part pour les analyses futures, non ? Oui, absolument, vous avez raison ! C’est là où le Wazuh-Indexer (base de données) va entrer en action, en stockant, et surtout, en fournissant à la demande toutes les infos que le Wazuh-Dashboard lui demandera, et ce, super rapidement.
Et tout cela, on peut intégrer des Webhooks ou même des appels API pour pouvoir recevoir des notifications sur notre plateforme de messagerie préférée. C’est pas beau, ça ?
Installation
Bon fini de blabla et passons au choses serieuses, dans cette partie on va utiliser une seule machine Debian 12 et cela pour simplifier le tuto car sinon j’aurais bien aime mettre des cluster de partout, mais si je fais ça, en 2026 je serais toujours en train d’ecrire ce post.
Wazuh-Indxer
Nous allons maintenant se concentrer dans la partie Wazuh-Indexer.
On télécharge un ficher de conf préremplie de plus que le script qui va nous servir a créer nos, certificats internes. Pour permettre la connexion par https entre les differents services
Attention ! En environnement de production il faudra utiliser les certificats SSL qui seront valides par les authorites de certification pour éviter tout problème dans le futur.
curl -sO https://packages.wazuh.com/4.7/wazuh-certs-tool.sh
curl -sO https://packages.wazuh.com/4.7/config.yml
Une fois que nous avons fait ceci, nous allons modifier le fichier config.yaml pour lui indiquer quels seront les serveurs a qui on doit crer les certificats, vu qu’on a un seul serveur cela va grandemment nous simplfier la tache.
nano ./config.yml
nodes:
# Wazuh indexer nodes
indexer:
- name: SIEM-11.makhal.lan
ip: "192.168.222.145"
#- name: node-2
# ip: "<indexer-node-ip>"
#- name: node-3
# ip: "<indexer-node-ip>"
# Wazuh server nodes
# If there is more than one Wazuh server
# node, each one must have a node_type
server:
- name: SIEM-11.makhal.lan
ip: "192.168.222.145"
# node_type: master
#- name: wazuh-2
# ip: "<wazuh-manager-ip>"
# node_type: worker
#- name: wazuh-3
# ip: "<wazuh-manager-ip>"
# node_type: worker
# Wazuh dashboard nodes
dashboard:
- name: SIEM-11.makhal.lan
ip: "192.168.222.145"
Ici dans ce fichier nous allons indiquer 3 choses, le nom et addresse IP de notre Indexer de meme pour le server, et pareil pour le Dashboard. Une bonne pratique est d’utiliser le hostname. Donc si jamais vous etes en cluster il faudra bien verifier que vos records DNS sont bons (ou modif du /etc/hosts
)
Ensuite nous allons lancer le script de creation de certificats :
bash ./wazuh-certs-tool.sh -A
tar -cvf ./wazuh-certificates.tar -C ./wazuh-certificates/ .
Une fois que le .tar cree avec tous nos certificats nous allons maintenant proceder a l’importation des clefs et l’ajour des depots Wazuh dans notre systeme, pour le faire, rien de plus simple que faire ces commandes :
apt-get install gnupg apt-transport-https
curl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH | gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/wazuh.gpg --import && chmod 644 /usr/share/keyrings/wazuh.gpg
echo "deb [signed-by=/usr/share/keyrings/wazuh.gpg] https://packages.wazuh.com/4.x/apt/ stable main" | tee -a /etc/apt/sources.list.d/wazuh.list
apt-get update
Et enfin :
apt-get -y install wazuh-indexer
Une fois le wazuh-indexer installe, on va modifer le /etc/wazuh-indexer/opensearch.yml
pour configurer notre indexer.
network.host: "192.168.222.145"
node.name: "SIEM-11.makhal.lan"
cluster.initial_master_nodes:
- "SIEM-11.makhal.lan"
#- "node-2"
#- "node-3"
cluster.name: "wazuh-cluster"
discovery.seed_hosts:
- "192.168.222.145"
# - "node-2-ip"
# - "node-3-ip"
node.max_local_storage_nodes: "1"
path.data: /var/lib/wazuh-indexer
path.logs: /var/log/wazuh-indexer
Il faudra bien entendu connaitre son addresse IP, egalement si jamais vous avez sur votre VM un deuxieme disque ou vous allez vouloir stocker les logs, c’est les champs :
path.data: /var/lib/wazuh-indexer
path.logs: /var/log/wazuh-indexer
Qu’il faudra modifier pour indiquer votre propre disque !
Ensuite on importe les certifcats crees un peu plus tot, vers le indexer avec les commandes suivantes:
NODE_NAME=SIEM-11.makhal.lan
Ici on met le meme hostname qu’on a mis lors de la creation des certificats, et pour la suite il faudra lancer cet ensemble de commandes, pour mettre en place les certificats.
mkdir /etc/wazuh-indexer/certs
tar -xf ./wazuh-certificates.tar -C /etc/wazuh-indexer/certs/ ./$NODE_NAME.pem ./$NODE_NAME-key.pem ./admin.pem ./admin-key.pem ./root-ca.pem
mv -n /etc/wazuh-indexer/certs/$NODE_NAME.pem /etc/wazuh-indexer/certs/indexer.pem
mv -n /etc/wazuh-indexer/certs/$NODE_NAME-key.pem /etc/wazuh-indexer/certs/indexer-key.pem
chmod 500 /etc/wazuh-indexer/certs
chmod 400 /etc/wazuh-indexer/certs/*
chown -R wazuh-indexer:wazuh-indexer /etc/wazuh-indexer/certs
Puis on enable et on start le service du wazuh indexer
systemctl daemon-reload
systemctl enable wazuh-indexer
systemctl start wazuh-indexer
Une fois que nous avons lance notre indexer, nous allons lancer ce script pour le faire rejoindre dans le cluster (meme s’il est tout seul), c’est une etape obligatoire :)
/usr/share/wazuh-indexer/bin/indexer-security-init.sh
Une fois cela fait on peut verifier le fonctionnment du Wazuh-Indexer en tappant la commande suivante :
curl -k -u admin:admin https://192.168.222.145:9200
Et on aura le retour suivant :
{
"name" : "SIEM-11.makhal.lan",
"cluster_name" : "wazuh-cluster",
"cluster_uuid" : "mUnh6H8FRsugnOc_i8HbIg",
"version" : {
"number" : "7.10.2",
"build_type" : "rpm",
"build_hash" : "db90a415ff2fd428b4f7b3f800a51dc229287cb4",
"build_date" : "2023-06-03T06:24:25.112415503Z",
"build_snapshot" : false,
"lucene_version" : "9.6.0",
"minimum_wire_compatibility_version" : "7.10.0",
"minimum_index_compatibility_version" : "7.0.0"
},
"tagline" : "The OpenSearch Project: https://opensearch.org/"
}
Conclusion
Et voilà, rien de plus simple qu’une installation de Wazuh-Indexer. Normalement, si vous avez suivi jusqu’ici, vous avez une BDD Wazuh-Indexer prête à l’emploi.
Mais cela ne veut pas dire qu’elle est prête à être mise en production. Dans le prochain post, nous allons l’optimiser un peu et la rendre parfaite pour notre futur système SIEM.
Dans la suite, nous allons également continuer notre installation et enfin commencer la configuration des différents services.
Jusqu’ici, merci beaucoup d’avoir suivi, et n’hésitez pas à me suivre sur LinkedIn, c’est là où je mettrai les mises à jour du statut des posts. Merci encore.
Mohamad El Akhal El Bouzidi