Technique

Pratique concrète avec la pile ELK

Geoff Burke avatarGB
Geoff Burke · 9 min de lecture
Partager:

Série de blogs SIEM & Monitoring : ELK Stack

Dans ce deuxième volet de notre mini-série sur l'ELK Stack au sein de la série de blogs plus large sur le SIEM & Monitoring, nous passons des concepts fondamentaux à la mise en œuvre pratique. Cet article vous guide à travers la configuration d'un environnement de test ELK fonctionnel en utilisant Docker sur une machine virtuelle Ubuntu, vous offrant un bac à sable pour explorer comment Elasticsearch, Logstash et Kibana travaillent ensemble pour traiter et visualiser des données.

Que vous soyez un administrateur de sauvegarde ou un professionnel de l'informatique, ce guide propose un laboratoire personnalisable où vous pouvez expérimenter le parsing des messages Syslog de Veeam Backup & Replication et les transférer dans votre stack ELK. L'objectif est de fournir un environnement sûr et flexible pour l'apprentissage et les tests, et non pour le déploiement en production.

Configuration de Docker

Exigences : Vous aurez besoin d'une VM serveur Ubuntu.

1. Tout d'abord, nous allons installer docker :

curl -fsSL https://get.docker.com | sh

sudo usermod -aG docker $USER

2. Déconnectez-vous et reconnectez-vous pour vérifier que Docker a été installé avec succès.

docker --version

docker compose version

Configuration d'ELK  

1. Exécutez les commandes suivantes dans votre VM Ubuntu : 

mkdir elk-stack 

cd elk-stack 

mkdir -p logstash/pipeline   

mkdir -p elasticsearch 

2. Créez le fichier de configuration Elasticsearch : 

cat > elasticsearch/elasticsearch.yml << 'EOF' 

cluster.name: "docker-cluster" 

network.host: 0.0.0.0 

discovery.type: single-node 

xpack.security.enabled: false 

xpack.monitoring.collection.enabled: true 

EOF 

3. Créez des fichiers de configuration pour Logstash. 

4. Dans la ligne de commande, collez cette commande pour créer le fichier de configuration Logstash : 

cat > logstash/pipeline/logstash.conf << 'EOF' 

input { 

  tcp {      port => 5000      codec => json_lines      tags => ["tcp"]   }    syslog {      port => 5514      tags => ["syslog"]    }  } 

filter {    if "syslog" in [tags] {      if [program] =~ /Veeam/ {        mutate {          add_field => { "source_type" => "veeam" }          add_field => { "category" => "backup" } 

        add_field => { "vendor" => "veeam" }        }                if [message] =~ /Job \[/ {         grok {            match => { "message" => "Job \[%{DATA:job_name}\]" }          }        }                if [message] =~ /Success/ {          mutate { add_field => { "backup_status" => "success" } }        } else if [message] =~ /Warning/ {          mutate { add_field => { "backup_status" => "warning" } }        } else if [message] =~ /Error|Failed/ {          mutate { add_field => { "backup_status" => "error" } }        }      }    }     

  mutate {      add_field => { "processed_by" => "logstash" }    } } 

output {    if [source_type] == "veeam" {      elasticsearch {       hosts => ["http://elasticsearch:9200"]        index => "veeam-logs-%{+YYYY.MM.dd}"      }    } else {      elasticsearch {        hosts => ["http://elasticsearch:9200"]        index => "logs-%{+YYYY.MM.dd}"      }    }  }  EOF 

 

5. Ici, nous allons créer notre fichier docker-compose.yml qui contiendra tous les composants nécessaires pour la configuration de notre laboratoire de test. 

cat > docker-compose.yml << 'EOF' 

 

services: 

  elasticsearch: 

    image: docker.elastic.co/elasticsearch/elasticsearch:7.17.0 

    container_name: elasticsearch 

    environment: 

      - discovery.type=single-node 

      - xpack.security.enabled=false 

      - cluster.name=docker-cluster 

      - network.host=0.0.0.0 

      - "ES_JAVA_OPTS=-Xms512m -Xmx512m" 

    ports: 

      - "9200:9200" 

    volumes: 

      - elasticsearch_data:/usr/share/elasticsearch/data 

    réseaux : 

      - elk 

 

  logstash : 

    image : docker.elastic.co/logstash/logstash:7.17.0 

    nom_du_conteneur : logstash 

    ports : 

      - "5044:5044" 

      - "5000:5000/tcp" 

      - "5514:5514/udp" 

      - "9600:9600" 

    volumes : 

      - ./logstash/pipeline:/usr/share/logstash/pipeline:ro 

    environnement : 

      - "LS_JAVA_OPTS=-Xmx256m -Xms256m" 

      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200 

    dépend_de : 

      - elasticsearch 

    réseaux : 

      - elk 

 

  kibana : 

    image : docker.elastic.co/kibana/kibana:7.17.0 

    nom_du_conteneur : kibana 

    ports : 

      - "5601:5601" 

    environnement : 

      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200 

      - SERVER_HOST=0.0.0.0 

    dépend de: 

      - elasticsearch 

    réseaux: 

      - elk 

 

volumes: 

  elasticsearch_data: 

 

réseaux: 

  elk: 

    pilote: pont 

EOF 

 

6. Maintenant, démarrez les conteneurs : 

  1. docker compose up -d  
  2. Accéder à Kibana dans votre navigateur 

Maintenant que tout est configuré, vous pouvez ouvrir Kibana dans votre navigateur. Par défaut, Kibana fonctionne sur le port 5601, donc vous devrez naviguer vers l'URL appropriée en fonction de l'endroit où votre environnement Docker est hébergé. 

Par exemple, si votre configuration Docker fonctionne sur une VM nommée docker01, vous iriez à : 

http://docker01:5601 

Si votre VM a un nom DNS personnalisé comme geoffsvm, alors l'URL serait : http://geoffsvm:5601 

Alternativement, si vous n'avez pas de nom DNS configuré, vous pouvez utiliser l'adresse IP de la VM à la place : 

http://[votre-ip-vm]:5601

En fin de compte, assurez-vous simplement que vous pointez vers l'hôte correct et que vous utilisez le port 5601, qui est le port par défaut pour Kibana. 

Remarque : Si à tout moment vous souhaitez repartir de zéro, effectuez les étapes suivantes pour effacer la configuration : 

Pour supprimer tous les conteneurs, réseaux et volumes, exécutez les commandes suivantes : 

docker compose down --volumes --remove-orphans 

docker system prune -a --volumes -f  

Configurer Veeam VBR pour envoyer des données Syslog à ELK 

Pour ingérer des journaux dans notre configuration afin de voir comment cela fonctionne, nous allons configurer Veeam VBR pour transférer ses messages syslog à ELK : 

1. Allez dans le menu déroulant en haut à gauche et cliquez sur « Options. » 

2. Ensuite, cliquez sur l'onglet « Transfert d'événements. » 

3. Ici, nous allons ajouter le serveur syslog que nous avons créé dans Docker. 

Cliquez sur « Ajouter » et saisissez les détails.  

Ensuite, cliquez soit sur : 

  • « Appliquer » pour enregistrer et fermer la fenêtre.
  • « OK » pour enregistrer et garder la fenêtre ouverte.

 

Une fois que vous appuyez sur appliquer ou ok, Veeam enverra son premier message syslog de test à Elasticsearch. 

VÉRIFIER la découverte des journaux dans Kibana 

4. Revenez à l'interface Kibana. 

5. Dans le menu déroulant en haut à gauche, cliquez sur “Découvrir.” Vous serez invité à créer une nouvelle vue de données, y compris une vue des données syslog par champ : 

6. Cliquez sur “Créer une vue de données.” 

Vous pouvez voir que notre serveur Elasticsearch a déjà reçu quelques messages syslog de Veeam. Lorsque vous configurez les paramètres du serveur syslog dans Veeam, il envoie automatiquement un message de test. Cela vous permet de vérifier que votre système de surveillance ou SIEM reçoit correctement les journaux.

Nous allons nommer notre vue de données Veeam_Logs et utiliser un modèle d'index qui correspond aux journaux déjà ingérés.

7. Cliquez sur “Enregistrer la vue de données dans Kibana.”

8. Appuyez sur "Découvrir" dans le menu sur le côté gauche de la page pour voir les messages journaux de VBR.

Conclusion

Avec votre laboratoire ELK opérationnel, vous avez franchi une étape majeure vers la création d'un environnement SIEM fonctionnel. Dans cet article, nous avons parcouru la configuration de conteneurs Docker pour Elasticsearch, Logstash et Kibana, configuré un pipeline Logstash pour les messages syslog de Veeam, et exploré ces journaux dans Kibana. Vous avez maintenant une base solide pour ingérer et visualiser les données de journaux dans un environnement de test contrôlé.

Dans le dernier article de cette mini-série le mois prochain, nous allons nous appuyer sur cette base en plongeant dans ElasticSecurity et en explorant comment il améliore la détection des menaces et l'alerte au sein de l'écosystème ELK. Nous introduirons également Fluentd comme alternative à Logstash, en comparant les deux outils et en montrant comment configurer Fluentd pour transférer des journaux vers Elasticsearch. Si vous êtes intéressé par des cas d'utilisation de surveillance de la sécurité, la création de tableaux de bord et l'optimisation de votre pipeline de journaux, vous ne voudrez pas manquer ce qui suit.

Restez informé

En soumettant ce formulaire, je confirme avoir lu et accepté la Politique de confidentialité.

Vous pouvez vous désinscrire à tout moment.