Déployez Graylog sur Debian 12 pour centraliser et analyser vos logs facilement
Sommaire
I. Présentation
Graylog est une solution open source de type "puits de logs" dont l'objectif est de permettre la centralisation, le stockage, et l'analyse en temps réel des journaux de vos machines et vos périphériques réseaux. Dans ce tutoriel, nous allons apprendre à installer Graylog, dans sa version gratuite, sur une machine Debian 12 !
Au sein d'un système d'information, chaque serveur, qu'il soit sous Linux ou Windows, et chaque équipement réseau (switch, routeur, firewall, etc...) génère ses propres journaux, stockés en local. Les journaux étant stockés sur chaque machine en local, l'analyse et la corrélation des événements est très difficile... C'est là que Graylog intervient. Il va assurer la fonction de puits de logs, c'est-à-dire que toutes vos machines vont lui envoyer leurs logs (via syslog, par exemple). Graylog va ensuite stocker et indexer ces logs, tout en vous permettant d'effectuer des recherches globales et de créer des alertes.
Graylog est un outil d'analyse et de surveillance qui va vous permettre d'identifier plus facilement les comportements suspects et les problèmes divers et variés (stabilité, performance, etc...).
- IT-Connect - L'importance de la centralisation des logs
Remarque : la version gratuite, Graylog Open, ne se présente pas comme un SIEM comme peut l'être Wazuh, notamment, car il manque de vraies fonctions de détection d'intrusion.
II. Prérequis
La stack Graylog s'appuie sur plusieurs composants que nous devrons installer et configurer. Ici, nous installerons tous les composants sur le même serveur, mais il est possible de créer des clusters basés sur plusieurs nœuds et de répartir les rôles sur plusieurs serveurs. Dans le cadre de ce tutoriel, nous installerons Graylog 6.1, soit la version la plus récente à ce jour.
- MongoDB 6, qui est la version actuellement recommandée pour Graylog (minimum 5.0.7, maximum 7.x)
- OpenSearch, qui est un fork open source de Elasticsearch créé par Amazon (minimum 1.1.x, maximum 2.15.x)
- OpenJDK 17
Le serveur Graylog est sous Debian 12, mais l'installation est possible sur d'autres distributions, y compris par l'intermédiaire de Docker. La machine virtuelle est équipée de 8 Go de RAM et 256 Go d'espace disque, afin d'avoir assez de ressources pour tous les composants (sinon cela peut avoir un impact important sur les performances). Mais, je l'indique à titre indicatif, car le dimensionnement de l'architecture Graylog dépend de la quantité d'informations à traiter. Graylog peut tout à fait traiter 30 Mo ou 300 Mo de données par jour, comme 300 Go de données par jour... C'est une solution scalable capable de gérer des téraoctets de logs (voir cette page)
Avant de commencer la configuration, attribuez une adresse IP statique à la machine Graylog et installez les dernières mises à jour. Veillez aussi à configurer le fuseau horaire de la machine locale et définissez un serveur NTP pour la synchronisation de la date et l'heure. Voici la commande à exécuter :
sudo timedatectl set-timezone Europe/Paris
Afin de configurer le client NTP sous Linux, consultez ce tutoriel :
Remarque : l'installation d'OpenSearch est facultative si vous utilisez Graylog Data Node à la place.
III. Installation pas à pas de Graylog
Commençons par une mise à jour du cache des paquets et l'installation d'outils nécessaires pour la suite des événements.
sudo apt-get update
sudo apt-get install curl lsb-release ca-certificates gnupg2 pwgen
A. Installation de MongoDB
Une fois que c'est fait, nous allons commencer l'installation de MongoDB. Téléchargez la clé GPG correspondante au dépôt MongoDB :
curl -fsSL https://www.mongodb.org/static/pgp/server-6.0.asc | sudo gpg -o /usr/share/keyrings/mongodb-server-6.0.gpg --dearmor
Puis, ajoutez le dépôt de MongoDB 6 sur la machine Debian 12 :
echo "deb [ signed-by=/usr/share/keyrings/mongodb-server-6.0.gpg] http://repo.mongodb.org/apt/debian bullseye/mongodb-org/6.0 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
Ensuite, nous allons mettre à jour le cache des paquets et tenter d'installer MongoDB :
sudo apt-get update
sudo apt-get install -y mongodb-org
L'installation de MongoDB ne peut pas être effectuée, car il manque une dépendance : libssl1.1. Nous allons devoir installer ce paquet manuellement avant de pouvoir poursuivre parce que Debian 12 ne l'a pas dans ses dépôts.
Les paquets suivants contiennent des dépendances non satisfaites :
mongodb-org-mongos : Dépend: libssl1.1 (>= 1.1.1) mais il n'est pas installable
mongodb-org-server : Dépend: libssl1.1 (>= 1.1.1) mais il n'est pas installable
E: Impossible de corriger les problèmes, des paquets défectueux sont en mode « garder en l'état ».
Nous allons télécharger le paquet DEB nommé "libssl1.1_1.1.1f-1ubuntu2.23_amd64.deb" (version la plus récente) avec la commande wget, puis procéder à son installation via la commande dpkg. Ce qui donne les deux commandes suivantes :
wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2.23_amd64.deb
sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2.23_amd64.deb
Relancez l'installation de MongoDB :
sudo apt-get install -y mongodb-org
Ensuite, relancez le service MongoDB et activez son démarrage automatique au lancement du serveur Debian.
sudo systemctl daemon-reload
sudo systemctl enable mongod.service
sudo systemctl restart mongod.service
sudo systemctl --type=service --state=active | grep mongod
MongoDB est installé, nous pouvons passer à l'installation du prochain composant.
B. Installation d'OpenSearch
Nous allons passer à l'installation d'OpenSearch sur le serveur. La commande suivante permet d’ajouter la clé de signature pour les paquets OpenSearch :
curl -o- https://artifacts.opensearch.org/publickeys/opensearch.pgp | sudo gpg --dearmor --batch --yes -o /usr/share/keyrings/opensearch-keyring
Puis, ajoutez le dépôt OpenSearch pour que nous puissions télécharger le paquet avec apt par la suite :
echo "deb [signed-by=/usr/share/keyrings/opensearch-keyring] https://artifacts.opensearch.org/releases/bundle/opensearch/2.x/apt stable main" | sudo tee /etc/apt/sources.list.d/opensearch-2.x.list
Mettez à jour votre cache de paquets :
sudo apt-get update
Puis, installez OpenSearch en prenant soin de définir le mot de passe par défaut pour le compte Admin de votre instance. Ici, le mot de passe est "IT-Connect2024!", mais remplacez cette valeur par un mot de passe robuste. Évitez les mots de passe faibles du style "P@ssword123" et utilisez au moins 8 caractères avec au moins un caractère de chaque type (minuscule, majuscule, chiffre et caractère spécial), sinon il y aura une erreur à la fin de l'installation. C'est un prérequis depuis OpenSearch 2.12.
sudo env OPENSEARCH_INITIAL_ADMIN_PASSWORD=IT-Connect2024! apt-get install opensearch
Patientez pendant l'installation...
Quand c'est terminé, prenez le temps d'effectuer la configuration minimale. Ouvrez le fichier de configuration au format YAML :
sudo nano /etc/opensearch/opensearch.yml
Lorsque le fichier est ouvert, configurez les options suivantes :
cluster.name: graylog
node.name: ${HOSTNAME}
path.data: /var/lib/opensearch
path.logs: /var/log/opensearch
discovery.type: single-node
network.host: 127.0.0.1
action.auto_create_index: false
plugins.security.disabled: true
Cette configuration OpenSearch est destinée à configurer un nœud unique. Voici des explications sur les différents paramètres que nous utilisons :
- cluster.name: graylog : ce paramètre nomme le cluster OpenSearch avec le nom "graylog".
- node.name: ${HOSTNAME} : le nom du nœud est défini dynamiquement pour correspondre à celui de la machine Linux locale. Même si nous n'avons qu'un seul nœud, il est important de le nommer correctement.
- path.data: /var/lib/opensearch : ce chemin spécifie où OpenSearch stocke ses données sur la machine locale, en l'occurrence dans "/var/lib/opensearch".
- path.logs: /var/log/opensearch : ce chemin définit où les fichiers journaux d'OpenSearch sont stockés, ici dans "/var/log/opensearch".
- discovery.type: single-node : ce paramètre configure OpenSearch pour fonctionner avec un nœud unique, d'où le choix de l'option "single-node".
- network.host: 127.0.0.1 : cette configuration fait qu'OpenSearch écoute uniquement sur son interface de boucle locale, ce qui est suffisant puisqu'il est sur le même serveur que Graylog.
- action.auto_create_index: false : en désactivant la création automatique d'index, OpenSearch ne créera pas d’index automatiquement lorsqu’un document est envoyé sans index existant.
- plugins.security.disabled: true : cette option désactive le plugin de sécurité d'OpenSearch, ce qui signifie qu'il n'y aura ni authentification, ni gestion des accès, ni chiffrement des communications. Ce paramétrage permet de gagner du temps pour effectuer la mise en place de Graylog, mais il est à éviter en production (voir cette page).
Certaines options sont déjà présentes, donc vous devez simplement enlever le "#" pour les activer, puis indiquer votre valeur. Si vous ne trouvez pas une option, vous pouvez la déclarer directement à la fin du fichier.
Enregistrez et fermez ce fichier.
C. Configurer Java (JVM)
Vous devez configurer Java Virtual Machine utilisé par OpenSearch afin d'ajuster la quantité de mémoire que peut utiliser ce service. Éditez le fichier de configuration suivant :
sudo nano /etc/opensearch/jvm.options
Avec la configuration déployée ici, OpenSearch démarrera avec une mémoire allouée de 4 Go et pourra atteindre jusqu'à 4 Go, il n'y aura donc pas de variation de mémoire pendant le fonctionnement. Ici, la configuration tient compte du fait que la machine virtuelle dispose d'un total de 8 Go de RAM. Les deux paramètres doivent avoir la même valeur. Ceci implique de remplacer ces lignes :
-Xms1g
-Xmx1g
Par ces lignes :
-Xms4g
-Xmx4g
Voici la modification à apporter en image :
Fermez ce fichier après l'avoir enregistré.
En complément, nous devons vérifier la configuration du paramètre "max_map_count" au niveau du noyau Linux. Il définit la limite des zones de mémoire mappées par processus, afin de répondre aux besoins de notre application. OpenSearch, au même titre que Elasticsearch, recommande de fixer cette valeur à "262144" pour éviter des erreurs liées à la gestion de la mémoire.
En principe, sur une machine Debian 12 fraîchement installée, la valeur est déjà correcte. Mais, nous allons le vérifier. Exécutez cette commande :
cat /proc/sys/vm/max_map_count
Si vous obtenez une valeur différente de "262144", exécutez la commande suivante, sinon ce n'est pas nécessaire.
sudo sysctl -w vm.max_map_count=262144
Enfin, activez le démarrage automatique d'OpenSearch et lancez le service associé.
sudo systemctl daemon-reload
sudo systemctl enable opensearch
sudo systemctl restart opensearch
Si vous affichez l'état de votre système, vous devriez voir un processus Java avec 4 Go de RAM.
top
Passons à la prochaine étape : l'installation tant attendue, celle de Graylog !
D. Installation de Graylog
Pour effectuer l'installation de Graylog 6.1 dans sa dernière version, exécutez les 4 commandes suivantes afin de télécharger et d'installer Graylog Server :
wget https://packages.graylog2.org/repo/packages/graylog-6.1-repository_latest.deb
sudo dpkg -i graylog-6.1-repository_latest.deb
sudo apt-get update
sudo apt-get install graylog-server
Quand c'est fait, nous devons apporter des modifications à la configuration de Graylog avant de chercher à le lancer.
Commençons par configurer ces deux options :
- password_secret : ce paramètre sert à définir une clé utilisée par Graylog pour sécuriser le stockage des mots de passe utilisateurs (dans l'esprit d'une clé de salage). Cette clé doit être unique et aléatoire.
- root_password_sha2 : ce paramètre correspond au mot de passe de l’administrateur par défaut dans Graylog. Il est stocké sous forme d'un hash SHA-256.
Nous allons commencer par générer une clé de 96 caractères pour le paramètre password_secret :
pwgen -N 1 -s 96
wVSGYwOmwBIDmtQvGzSuBevWoXe0MWpNWCzhorBfvMMhia2zIjHguTbfl4uXZJdHOA0EEb1sOXJTZKINhIIBm3V57vwfQV59
Copiez la valeur retournée, puis ouvrez le fichier de configuration de Graylog :
sudo nano /etc/graylog/server/server.conf
Collez la clé au niveau du paramètre password_secret, comme ceci :
Enregistrez et fermez le fichier.
Ensuite, vous devez définir le mot de passe du compte "admin" créé par défaut. Dans le fichier de configuration, c'est le hash du mot de passe qui doit être stocké, ce qui implique de le calculer. L'exemple ci-dessous permet d'obtenir le hash du mot de passe "PuitsDeLogs@" : adaptez la valeur avec votre mot de passe.
echo -n "PuitsDeLogs@" | shasum -a 256
6b297230efaa2905c9a746fb33a628f4d7aba4fa9d5c1b3daa6846c68e602d71
Copiez la valeur obtenue en sortie (sans le tiret en bout de ligne).
Ouvrez de nouveau le fichier de configuration de Graylog :
sudo nano /etc/graylog/server/server.conf
Collez la valeur au niveau de l'option root_password_sha2 comme ceci :
Profitez d'être dans le fichier de configuration pour configurer l'option nommée "http_bind_address". Indiquez "0.0.0.0:9000" pour que l'interface web de Graylog soit accessible sur le port 9000, via n'importe quelle adresse IP du serveur.
Puis, configurez l'option "elasticsearch_hosts" avec la valeur "http://127.0.0.1:9200" pour déclarer notre instance locale OpenSearch. Ceci est nécessaire, car nous n'utilisons pas de Graylog Data Node. Et sans cette option, il ne sera pas possible d'aller plus loin...
Enregistrez et fermez le fichier.
Cette commande active Graylog pour qu'il démarre automatiquement au prochain démarrage et elle lance immédiatement le serveur Graylog.
sudo systemctl enable --now graylog-server
Une fois que c'est fait, tentez une connexion à Graylog à partir d'un navigateur. Indiquez l'adresse IP du serveur (ou son nom) et le port 9000.
À titre d'information :
Il n'y a pas si longtemps que cela, une fenêtre d'authentification similaire à celle ci-dessous apparaissait lors de la première connexion à Graylog. Il fallait indiquer l'identifiant "admin" et votre mot de passe. Et, là, on pouvait avoir la mauvaise surprise de constater que la connexion ne fonctionnait pas.
Il était nécessaire de retourner en ligne de commande sur le serveur Graylog et de consulter les journaux. On pouvait alors que pour la première connexion, il est nécessaire d'utiliser un mot de passe temporaire, spécifié dans les logs.
tail -f /var/log/graylog-server/server.log
Il fallait ensuite retenter une connexion avec l'utilisateur "admin" et le mot de passe temporaire, et cela permettait de se connecter !
Désormais, ce n'est plus le cas. Il suffit de se connecter avec son compte admin et le mot de passe configuré en ligne de commande.
Bienvenue sur l'interface de Graylog !
E. Graylog : créer un nouveau compte administrateur
Plutôt que d'utiliser le compte admin créé nativement par Graylog, vous pouvez créer votre compte administrateur personnel. Cliquez sur le menu "System" puis sur "Users and Teams" afin de cliquer sur le bouton "Create user". Ensuite, remplissez le formulaire et assignez le rôle administrateur à votre compte.
Un compte personnalisé peut contenir des informations complémentaires, comme le nom, le prénom et l'adresse e-mail, contrairement au compte admin natif. De plus, ceci vous assure une meilleure traçabilité lorsque chaque personne travaille avec un compte nominatif.
IV. Conclusion
Voilà, nous venons d'apprendre à installer Graylog sur une machine Debian 12 ! Vous pouvez désormais stocker, indexer et analyser vos logs depuis une console unique !
Par la suite, nous verrons comment envoyer les logs des machines Linux et Windows Server à notre serveur Graylog : c'est là que ça deviendra encore plus intéressant ! Pour cela, nous devrons déclarer de nouveaux "Inputs" dans Graylog (ainsi que des Index et des Stream) et configurer l'envoi des journaux sur les serveurs. J'essaierai de publier aussi un tutoriel sur la sécurisation d'OpenSearch avec l'activation du module de sécurité, ainsi que la configuration des alertes par e-mail via la fonction de notification.
Pour aller plus loin :
Bonjour,
C’est obligé d’installer ça en réseau local ou on peut le paramétrer pour un appareil extérieur ?
Comment faire ?
il est possible de le faire sur un VPS et en ouvrant les ports de pouvoir externaliser les LOGS !