Analyser les logs dans Graylog

Beginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire (lab), vous apprendrez à analyser les journaux (logs) à l'aide de Graylog, une plateforme de gestion de journaux open-source pour la surveillance en cybersécurité. Vous allez pratiquer la configuration de Graylog avec Docker Compose, la configuration des entrées de journaux et effectuer des analyses de journaux grâce à des exercices pratiques.

Ce laboratoire vous guidera tout au long du déploiement de Graylog avec MongoDB et Elasticsearch, puis vous montrera comment utiliser son interface web pour collecter et interroger les données de journaux. Ces tâches pratiques vous aideront à acquérir les compétences essentielles pour la gestion centralisée des journaux et la surveillance de la sécurité.


Skills Graph

Installer Graylog

Dans cette étape, vous allez installer Graylog, une puissante plateforme open-source de gestion de journaux (logs), dans votre environnement de machine virtuelle (VM) LabEx. Graylog permet de centraliser et d'analyser les données de journaux pour la surveillance de la sécurité et la résolution de problèmes en collectant les journaux à partir de diverses sources et en offrant des fonctionnalités de recherche et de visualisation.

Étant donné que nous utilisons des conteneurs Docker, nous allons déployer Graylog à l'aide de Docker Compose pour une configuration facile. Docker Compose nous permet de définir et d'exécuter des applications multi-conteneurs avec un seul fichier de configuration. Cette approche simplifie le processus d'installation et garantit que tous les composants requis fonctionnent correctement ensemble. Suivez attentivement ces étapes :

  1. Tout d'abord, assurez-vous d'être dans le bon répertoire. Le répertoire project est là où nous allons organiser nos fichiers d'installation de Graylog :
cd ~/project
  1. Créez un nouveau répertoire dédié à la configuration de Graylog. Cela permet de séparer et d'organiser nos fichiers d'installation :
mkdir graylog && cd graylog
  1. Créez un fichier docker-compose.yml avec le contenu suivant en utilisant nano. Ce fichier définit tous les services dont Graylog a besoin pour fonctionner :
nano docker-compose.yml
  1. Collez cette configuration (appuyez sur Ctrl+O pour enregistrer, puis Ctrl+X pour quitter). La configuration comprend trois services principaux :
    • MongoDB pour stocker les données de configuration
    • Elasticsearch pour indexer et rechercher les journaux
    • Graylog lui-même en tant qu'interface web et moteur de traitement
version: "3"
services:
  mongodb:
    image: mongo:4.2
    volumes:
      - mongo_data:/data/db
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch-oss:7.10.2
    volumes:
      - es_data:/usr/share/elasticsearch/data
    environment:
      - "discovery.type=single-node"
      - "bootstrap.memory_lock=true"
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
  graylog:
    image: graylog/graylog:4.3
    volumes:
      - graylog_data:/usr/share/graylog/data
    environment:
      - GRAYLOG_PASSWORD_SECRET=somepasswordpepper
      - GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
      - GRAYLOG_HTTP_EXTERNAL_URI=http://127.0.0.1:9000/
    depends_on:
      - mongodb
      - elasticsearch
    ports:
      - "9000:9000"
      - "1514:1514"
      - "1514:1514/udp"
      - "12201:12201"
      - "12201:12201/udp"
volumes:
  mongo_data:
  es_data:
  graylog_data:
  1. Démarrez la pile (stack) Graylog avec Docker Compose. Le flag -d exécute les conteneurs en arrière-plan :
docker-compose up -d
  1. Vérifiez que les conteneurs fonctionnent correctement. Cette commande affiche l'état de tous les services définis dans notre fichier docker-compose :
docker-compose ps

Vous devriez voir trois services (mongodb, elasticsearch et graylog) avec l'état "Up". L'interface web de Graylog sera accessible à l'adresse http://127.0.0.1:9000 (nom d'utilisateur : admin, mot de passe : admin). Cela termine l'installation de base de Graylog, et nous sommes maintenant prêts à configurer les entrées de journaux dans les étapes suivantes.

Configurer une entrée de journal (log)

Dans cette étape, vous allez configurer une entrée de journal dans Graylog pour recevoir des messages syslog. Imaginez cela comme la création d'un "port d'écoute" où Graylog peut collecter les données de journal à partir de divers appareils et applications. Cela est essentiel pour la surveillance de la sécurité car les journaux contiennent des informations précieuses sur les activités du système et les menaces potentielles.

  1. Tout d'abord, vérifions que Graylog fonctionne correctement après notre configuration précédente. Exécutez cette commande pour vérifier l'état du conteneur :
cd ~/project/graylog
docker-compose ps
  1. Accédez à l'interface web de Graylog en ouvrant votre navigateur et en vous rendant à l'adresse http://127.0.0.1:9000. Utilisez les identifiants suivants :

    • Nom d'utilisateur : admin
    • Mot de passe : admin
  2. Dans l'interface web de Graylog, nous allons créer une nouvelle source d'entrée :

    • Cliquez sur "System" dans le menu supérieur - c'est là que nous gérons les fonctions principales de Graylog
    • Sélectionnez "Inputs" dans le menu déroulant - les entrées sont la façon dont Graylog reçoit les données de journal
    • Sous "Select input", choisissez "Syslog UDP" - UDP est plus rapide pour la collecte de journaux que TCP
    • Cliquez sur "Launch new input" pour commencer la configuration
  3. Configurez maintenant l'entrée avec les paramètres spécifiques suivants :

    • Noeud (Node) : Sélectionnez votre serveur Graylog (ce devrait être la seule option disponible)
    • Titre (Title) : "Syslog UDP Input" (donnez-lui un nom descriptif)
    • Adresse de liaison (Bind address) : 0.0.0.0 (signifie écouter sur toutes les interfaces réseau)
    • Port : 1514 (alternative au port syslog standard)
    • Cliquez sur "Save" pour activer l'entrée
  4. Après avoir enregistré, vérifiez que l'entrée fonctionne correctement :

    • Recherchez un statut vert "Running" à côté de votre nouvelle entrée - cela signifie qu'elle est active
    • La section "Local inputs" devrait maintenant afficher "1 input running" - confirmant la configuration réussie
  5. Testons notre nouvelle entrée en envoyant un message de journal d'exemple. Exécutez cette commande dans votre terminal :

echo "<14>$(date +'%b %d %H:%M:%S') localhost labex: Test syslog message" | nc -w1 -u 127.0.0.1 1514

Cette commande crée un message de journal de test avec un niveau de priorité 14 (info) et l'envoie à Graylog en utilisant netcat (nc). Le message inclut la date/heure actuelle et identifie la source comme "localhost".

Vous avez maintenant configuré avec succès Graylog pour recevoir des messages syslog. Dans les étapes suivantes, nous allons explorer comment envoyer des journaux plus complexes et les rechercher pour trouver des informations de sécurité importantes.

Envoyer des journaux (logs) d'exemple

Dans cette étape, vous allez générer et envoyer des messages de journal d'exemple à Graylog via l'entrée syslog que vous avez configurée précédemment. Cette exercice pratique permet de vérifier que votre pipeline de journalisation fonctionne correctement avant d'analyser des données réelles. Nous allons créer des journaux de test qui simulent différents niveaux de gravité et types d'applications, ce qui est essentiel pour comprendre comment Graylog traite et catégorise les entrées de journal.

  1. Tout d'abord, assurez-vous que vos conteneurs Graylog sont en cours d'exécution. Cette commande vérifie l'état de vos conteneurs Docker - ils devraient afficher l'état "Up" si tout fonctionne correctement :
cd ~/project/graylog
docker-compose ps
  1. Nous allons créer un simple script bash pour générer des journaux d'exemple. Le script produira des messages de journal structurés qui incluent des horodatages, des niveaux de gravité et des noms d'applications. Créez un nouveau fichier dans votre répertoire de projet :
nano ~/project/generate_logs.sh
  1. Ajoutez le contenu suivant au fichier. Ce script fait plusieurs choses importantes :
    • Génère 10 messages de journal avec des niveaux de gravité aléatoires (0 - 7)
    • Inclut des horodatages appropriés au format syslog
    • Utilise la commande 'nc' pour envoyer les journaux via UDP au port 1514
    • Ajoute un délai d'une seconde entre les messages pour une meilleure visualisation :
#!/bin/bash
for i in {1..10}; do
  severity=$(((RANDOM % 8)))
  timestamp=$(date +'%b %d %H:%M:%S')
  echo "<$((severity + 8))>$timestamp localhost sample_app[$i]: Sample log message $i with severity $severity" | nc -w1 -u 127.0.0.1 1514
  sleep 1
done
  1. Rendez le script exécutable afin de pouvoir le lancer directement. La commande chmod modifie les autorisations du fichier :
chmod +x ~/project/generate_logs.sh
  1. Exécutez le script pour envoyer des journaux d'exemple à Graylog. Vous ne verrez pas de sortie directe dans le terminal car les journaux sont envoyés à l'entrée syslog de Graylog :
~/project/generate_logs.sh
  1. Maintenant, vérifions que les journaux sont arrivés dans Graylog. Suivez ces étapes dans l'interface web :

    • Ouvrez votre navigateur et accédez à http://127.0.0.1:9000
    • Cliquez sur "Search" dans le menu supérieur pour afficher les messages entrants
    • Vos journaux d'exemple devraient apparaître en quelques secondes
    • Essayez de rechercher "sample_app" pour filtrer et afficher uniquement vos journaux de test
  2. (Facultatif) Pour des tests plus complets, vous pouvez envoyer des messages de journal supplémentaires qui simulent des applications de serveur courantes. Ces exemples montrent différents formats de journal que Graylog peut traiter :

## Journal d'un serveur web de type Apache
echo '<13>$(date +"%b %d %H:%M:%S") localhost apache: 127.0.0.1 - - [$(date +"%d/%b/%Y:%H:%M:%S %z")] "GET / HTTP/1.1" 200 45' | nc -w1 -u 127.0.0.1 1514

## Tentative de connexion SSH (événement de sécurité courant)
echo '<12>$(date +"%b %d %H:%M:%S") localhost sshd[1234]: Failed password for root from 192.168.1.100 port 22 ssh2' | nc -w1 -u 127.0.0.1 1514

Interroger les données de journal (log)

Dans cette étape, nous allons explorer comment rechercher et analyser les données de journal dans Graylog en utilisant son langage de requête. La fonctionnalité de recherche de Graylog vous permet de trouver rapidement les journaux pertinents parmi de grandes quantités de données. Nous allons utiliser les journaux d'exemple que vous avez envoyés précédemment pour pratiquer ces techniques.

  1. Tout d'abord, accédez à l'interface web de Graylog à l'adresse http://127.0.0.1:9000 (nom d'utilisateur : admin, mot de passe : admin). C'est là que toute l'analyse des journaux se fait dans Graylog.

  2. Opérations de recherche de base :

    • Cliquez sur "Search" dans le menu supérieur pour accéder à l'interface de recherche
    • Dans la barre de recherche, entrez source:localhost pour voir tous les journaux de notre source de test. Cela montre comment filtrer les journaux par leur champ source.
    • Essayez ces requêtes de base pour comprendre différents motifs de recherche :
      message:"Sample log message"  ## Trouve les journaux contenant exactement la phrase
      severity:3                   ## Filtre par niveau de gravité 3
      source:localhost AND severity:[2 TO 4]  ## Combine des conditions
  3. Filtrage par plage de temps :

    • Cliquez sur le sélecteur de plage de temps (par défaut, c'est "Last 5 minutes"). Les journaux sont sensibles au temps, donc cela permet de se concentrer sur les périodes de temps pertinentes.
    • Changez pour "Last 15 minutes" pour voir tous vos journaux de test car ils ont été envoyés récemment
    • Essayez la plage de temps "Absolute" pour spécifier des heures de début et de fin exactes lorsque vous avez besoin de fenêtres de temps précises
  4. Analyse des champs :

    • Cliquez sur n'importe quel message de journal pour voir ses champs. Chaque journal contient plusieurs champs avec différentes informations.
    • Notez les champs extraits automatiquement comme source, severity, etc. Ils sont créés lorsque Graylog traite les journaux.
    • Cliquez sur l'onglet "Quick values" pour voir les distributions de valeurs - cela montre quelles valeurs apparaissent le plus souvent dans vos journaux.
  5. Enregistrer une recherche :

    • Après avoir exécuté une requête utile, cliquez sur "Save search". Cela est utile lorsque vous avez besoin de réutiliser la même recherche plus tard.
    • Nommez-la "Sample Log Analysis" pour une identification facile
    • Elle apparaîtra dans votre section "Saved searches" pour un accès ultérieur
  6. Créer un raccourci de requête de recherche :

    • Cliquez sur "Search" → "Edit search shortcuts". Les raccourcis économisent du temps lorsque vous utilisez fréquemment certains filtres.
    • Ajoutez un nouveau raccourci nommé "High Severity" avec la requête severity:[4 TO 7]
    • Maintenant, vous pouvez accéder rapidement à cette vue filtrée depuis le menu déroulant de recherche
  7. (Facultatif) Essayez ces requêtes avancées pour explorer des motifs de recherche plus complexes :

    _exists_:severity AND severity:>3  ## Journaux qui ont un champ de gravité avec une valeur >3
    message:/(sample|test)/i           ## Recherche par expression régulière (insensible à la casse)
    NOT severity:5                     ## Exclut les journaux de gravité 5

Créer un tableau de bord (dashboard)

Dans cette étape finale, vous allez créer un tableau de bord Graylog pour visualiser et analyser les données de journal que vous avez collectées. Les tableaux de bord sont des outils puissants qui aident les analystes en sécurité à surveiller l'activité du système d'un coup d'œil, à identifier des modèles et à détecter rapidement les problèmes potentiels de sécurité.

Commençons par accéder à l'interface web de Graylog où nous allons construire notre tableau de bord :

  1. Accédez à l'interface web de Graylog à l'adresse http://127.0.0.1:9000 (nom d'utilisateur : admin, mot de passe : admin)

  2. Créez un nouveau tableau de bord :

    • Cliquez sur "Dashboards" dans le menu supérieur - c'est là que tous vos tableaux de bord sont gérés
    • Cliquez sur "Create dashboard" - nous commençons avec une nouvelle visualisation
    • Nommez-le "Security Monitoring Dashboard" - choisissez un nom descriptif qui reflète son objectif
    • Cliquez sur "Create" - cela initialise votre tableau de bord vide
  3. Ajoutez des widgets à votre tableau de bord. Les widgets sont des composants individuels qui affichent des visualisations de données spécifiques :

    a. Graphique de comptage de messages (montre combien de journaux arrivent au fil du temps) :

    • Cliquez sur "Add widget" → "Message Count"
    • Configurez-le avec :
      • Titre : "Log Volume" - nomme le widget pour une référence facile
      • Plage de temps : "Last 15 minutes" - montre l'activité récente
      • Intervalle : "Minute" - regroupe les données par minute pour des tendances claires
    • Cliquez sur "Save"

    b. Valeurs rapides (affiche les valeurs les plus courantes dans un champ) :

    • Cliquez sur "Add widget" → "Quick Values"
    • Configurez-le avec :
      • Titre : "Top Sources" - montre quels systèmes génèrent des journaux
      • Champ : "source" - le champ de journal contenant les informations d'origine
      • Afficher les données sous forme de : "Pie chart" - visualise clairement les proportions
    • Cliquez sur "Save"

    c. Statistiques de champ (résume les données numériques) :

    • Cliquez sur "Add widget" → "Field Statistics"
    • Configurez-le avec :
      • Titre : "Severity Levels" - surveille la gravité des événements enregistrés
      • Champ : "severity" - le champ contenant les évaluations de gravité
      • Afficher les données sous forme de : "Bar chart" - compare les valeurs côte à côte
    • Cliquez sur "Save"
  4. Organisez votre tableau de bord pour une visibilité optimale :

    • Faites glisser et déposez les widgets pour les organiser - placez les widgets liés les uns près des autres
    • Redimensionnez les widgets en faisant glisser leurs bords - rendez les visualisations importantes plus grandes
    • Cliquez sur "Done editing" une fois terminé - verrouille votre disposition
  5. Enregistrez votre tableau de bord :

    • Cliquez sur "Save dashboard" en haut à droite - conserve votre travail
    • Ajoutez une description : "Dashboard for monitoring security logs" - explique son objectif
    • Cliquez sur "Save"
  6. (Facultatif) Définissez-le comme tableau de bord par défaut pour plus de commodité :

    • Cliquez sur l'icône d'étoile à côté du nom de votre tableau de bord
    • Cela le fera devenir votre vue par défaut lors de la connexion, vous faisant gagner du temps lors de vos vérifications quotidiennes

Résumé

Dans ce laboratoire (lab), vous avez appris à déployer Graylog à l'aide de Docker Compose, en configurant des services essentiels tels que MongoDB et Elasticsearch avec un stockage persistant. Vous avez lancé avec succès la pile (stack), accédé à l'interface web et vérifié la fonctionnalité des conteneurs pour établir une plateforme de journalisation centralisée.

Le laboratoire vous a guidé dans la configuration des entrées de journal, le test avec des données d'exemple et l'utilisation des capacités de requêtage de Graylog pour l'analyse des journaux. Vous avez également créé un tableau de bord (dashboard) personnalisable pour visualiser les informations issues des journaux, démontrant les applications pratiques de Graylog pour la surveillance et la résolution de problèmes.