Skip to content

Sinatekk/sonde

Repository files navigation

🛰️ Sonde — Plateforme de supervision & détection réseau

Stack tout-en-un de Network Security Monitoring (NSM) orchestrée avec Docker Compose : capture réseau (Suricata / Zeek), SIEM Elastic, Threat Intelligence (OpenCTI), analytics web et reverse proxy TLS automatique.

Docker Compose Elastic Stack 8.14.1 Traefik v3.1 OpenCTI 6.2.0 Licence trial


📑 Sommaire


🎯 Présentation

Sonde déploie une sonde de détection réseau complète et un SOC miniature sur un seul hôte. Le trafic réseau est capturé par des sondes (Suricata, Zeek), normalisé puis ingéré par la stack Elastic (Beats → Logstash → Elasticsearch → Kibana). Les indicateurs de compromission sont gérés dans OpenCTI, les logs HTTP visualisés en temps réel via GoAccess, et l'ensemble des interfaces est exposé derrière Traefik avec des certificats Let's Encrypt obtenus automatiquement (DNS-challenge Cloudflare).

Une application volontairement vulnérable (DVWA) est incluse pour générer du trafic d'attaque et tester la chaîne de détection de bout en bout.

Domaine Outils
🛰️ Capture / Sondes Suricata, Zeek
📦 Collecte & ingestion Filebeat, Metricbeat, Logstash, Fleet Server + APM
🔎 SIEM Elasticsearch, Kibana
🧠 Threat Intelligence OpenCTI (+ Redis, MinIO, RabbitMQ)
📊 Analytics web GoAccess + nginx
🌐 Reverse proxy / TLS Traefik + Cloudflare
🎯 Lab DVWA

🏗️ Schéma d'architecture

flowchart TB
    NET([" Trafic reseau / port miroir "]):::net
    USER([" Analyste SOC "]):::user
    CF([" Cloudflare DNS + TLS "]):::ext

    subgraph PROBES["Sondes reseau (network_mode: host)"]
        SURICATA["Suricata<br/>IDS / IPS"]
        ZEEK["Zeek<br/>Analyse de flux"]
    end

    subgraph SHIP["Collecte & ingestion"]
        FILEBEAT["Filebeat"]
        METRICBEAT["Metricbeat"]
        LOGSTASH["Logstash"]
        FLEET["Fleet Server + APM<br/>(Elastic Agent)"]
    end

    subgraph ELK["Coeur Elastic (SIEM)"]
        ES[("Elasticsearch")]
        KIBANA["Kibana"]
    end

    subgraph CTI["Threat Intelligence"]
        OPENCTI["OpenCTI"]
        WORKER["Workers x3"]
        REDIS[("Redis")]
        MINIO[("MinIO / S3")]
        RABBIT[("RabbitMQ")]
    end

    subgraph WEB["Analytics web"]
        GOACCESS["GoAccess"]
        GANGINX["nginx"]
    end

    subgraph LAB["Cible vulnerable"]
        DVWA["DVWA"]
    end

    TRAEFIK{{"Traefik v3<br/>Reverse proxy + TLS"}}:::proxy

    NET --> SURICATA
    NET --> ZEEK
    SURICATA -->|"eve.json"| FILEBEAT
    ZEEK -->|"logs"| FILEBEAT
    TRAEFIK -->|"access.log"| FILEBEAT
    TRAEFIK -->|"access.log"| GOACCESS

    FILEBEAT --> ES
    METRICBEAT --> ES
    LOGSTASH --> ES
    FLEET --> ES
    ES --> KIBANA

    OPENCTI --> ES
    OPENCTI --- REDIS
    OPENCTI --- MINIO
    OPENCTI --- RABBIT
    WORKER --- OPENCTI
    GOACCESS --> GANGINX

    USER --> CF --> TRAEFIK
    TRAEFIK --> KIBANA
    TRAEFIK --> ES
    TRAEFIK --> OPENCTI
    TRAEFIK --> GANGINX
    TRAEFIK --> DVWA

    classDef net fill:#1f2937,stroke:#60a5fa,color:#fff
    classDef user fill:#0f766e,stroke:#5eead4,color:#fff
    classDef ext fill:#7c2d12,stroke:#fb923c,color:#fff
    classDef proxy fill:#4338ca,stroke:#a5b4fc,color:#fff
Loading

💡 Le diagramme est rendu nativement sur GitHub. Version éditable : ouvrir sur Mermaid Live.

Flux de données :

  1. Les sondes Suricata & Zeek écoutent l'interface réseau (network_mode: host) et écrivent leurs journaux sur disque.
  2. Filebeat collecte ces journaux (+ logs Traefik & conteneurs Docker), Metricbeat les métriques, Logstash les ingestions custom.
  3. Tout converge vers Elasticsearch (chiffré TLS) et se visualise dans Kibana.
  4. OpenCTI corrèle la threat intelligence et indexe dans Elasticsearch.
  5. Traefik publie chaque interface en HTTPS sur *.sonde.dylanlasjunies.fr.

🧰 Stack technique & logos

Elasticsearch
Elasticsearch
Kibana
Kibana
Logstash
Logstash
Beats / Elastic Agent
Beats / Fleet
Suricata
Suricata
Zeek
Zeek
Traefik
Traefik
Cloudflare
Cloudflare
OpenCTI
OpenCTI
Redis
Redis
RabbitMQ
RabbitMQ
MinIO
MinIO
nginx
nginx
GoAccess
GoAccess
Docker
Docker
DVWA
DVWA

🧩 Composants & services

Le compose.yml agrège plusieurs fichiers via include:. Chaque domaine fonctionnel est isolé dans son propre fichier Compose.

Fichier Service(s) Image Rôle
elasticsearch.compose.yml setup elasticsearch:8.14.1 Génère la CA & les certificats TLS, initialise les mots de passe
elasticsearch elasticsearch:8.14.1 Moteur de stockage & recherche (single-node, TLS)
kibana kibana:8.14.1 Visualisation, dashboards, SIEM
fleet-server elastic-agent:8.14.1 Gestion des agents + serveur APM
beats.compose.yml filebeat filebeat:8.14.1 Collecte des logs (Suricata, Zeek, Traefik, Docker)
metricbeat metricbeat:8.14.1 Collecte des métriques (ES, Kibana, Logstash, Docker)
logstash.compose.yml logstash logstash:8.14.1 Pipeline d'ingestion personnalisé
probe.compose.yml suricata jasonish/suricata:master IDS/IPS — détection d'intrusion réseau
zeek blacktop/zeek:elastic Analyse passive de flux réseau
opencti.compose.yml opencti opencti/platform:6.2.0 Plateforme de Threat Intelligence
opencti-worker ×3 opencti/worker:6.2.0 Workers d'enrichissement
opencti-redis redis:7.2.5 Cache / file de messages
opencti-minio minio:RELEASE.2024-05-28 Stockage objet S3
opencti-rabbitmq rabbitmq:3.13-management Bus de messages AMQP
goaccess.compose.yml goaccess allinurl/goaccess:latest Analytics temps réel des logs HTTP
goaccess-nginx nginx:latest Sert le rapport GoAccess
traefik.compose.yml traefik traefik:v3.1 Reverse proxy + TLS automatique (Cloudflare)
compose.yml dvwa kaakaww/dvwa-docker Application web vulnérable (lab)

Réseaux & volumes

  • Réseaux : elastic (interne), traefik (externe, à créer), vulnerable (isolation DVWA).
  • Volumes persistants : certs, elastic-data, kibana-data, filebeat-data, metricbeat-data, logstash-data, fleetserver-data, goaccess-data, redisdata, s3data, amqpdata.

✅ Prérequis

  • Docker & Docker Compose v2 (include: requiert Compose ≥ 2.20).
  • Un hôte Linux avec :
    • vm.max_map_count=262144 (requis par Elasticsearch) ;
    • une interface réseau en écoute (par défaut enp0s6, voir INTERFACE) ;
    • ≥ 24 Go de RAM recommandés (ES 12G + Kibana 8G + OpenCTI 8G).
  • Un domaine géré par Cloudflare + un token DNS API (pour le challenge ACME).
  • Le réseau externe Traefik créé au préalable :
    docker network create traefik

🚀 Installation

  1. Cloner le dépôt

    git clone <repo-url> sonde && cd sonde
  2. Configurer l'environnement — copier le gabarit puis renseigner les secrets :

    cp .env.dist .env

    Variables clés à définir dans .env :

    Variable Description
    ELASTIC_PASSWORD / KIBANA_PASSWORD Mots de passe Elastic (≥ 6 caractères)
    ENCRYPTION_KEY Clé de chiffrement Kibana (saved objects, reporting)
    STACK_VERSION Version de la stack Elastic (défaut 8.14.1)
    INTERFACE Interface réseau écoutée par Suricata/Zeek (défaut enp0s6)
    ES_MEM_LIMIT / KB_MEM_LIMIT / LS_MEM_LIMIT Limites mémoire
    CLOUDFLARE_EMAIL / CF_DNS_API_TOKEN Identifiants Cloudflare pour le TLS
    OPENCTI_*, MINIO_*, RABBITMQ_* Identifiants OpenCTI & dépendances
  3. Régler le paramètre kernel (Elasticsearch) :

    sudo sysctl -w vm.max_map_count=262144
  4. Démarrer la stack

    docker compose up -d

    Le service setup génère d'abord la CA et les certificats, puis les autres services démarrent en cascade via leurs healthcheck.

  5. Suivre le démarrage

    docker compose ps
    docker compose logs -f setup

🌐 Accès aux interfaces

Une fois la stack démarrée, les interfaces sont exposées en HTTPS via Traefik (remplacez le domaine par le vôtre dans les fichiers Compose et .env) :

Service URL Port direct
🔎 Kibana https://kibana.sonde.dylanlasjunies.fr 5601
🗄️ Elasticsearch https://elastic.sonde.dylanlasjunies.fr 9200
🧠 OpenCTI https://opencti.sonde.dylanlasjunies.fr 5050
📊 GoAccess https://goaccess.sonde.dylanlasjunies.fr 7890
🎯 DVWA (lab) https://vulnerable.sonde.dylanlasjunies.fr 8080
🚦 Traefik Dashboard https://traefik.sonde.dylanlasjunies.fr
🛡️ Fleet Server / APM 8220 / 8200

⚠️ Identifiants par défaut Elastic : utilisateur elastic, mot de passe = ELASTIC_PASSWORD.


📁 Structure du projet

sonde/
├── compose.yml                  # Point d'entrée — include des sous-fichiers + DVWA
├── elasticsearch.compose.yml    # setup, elasticsearch, kibana, fleet-server
├── beats.compose.yml            # filebeat, metricbeat
├── logstash.compose.yml         # logstash
├── probe.compose.yml            # suricata, zeek
├── opencti.compose.yml          # opencti + redis/minio/rabbitmq + workers
├── goaccess.compose.yml         # goaccess, goaccess-nginx
├── traefik.compose.yml          # traefik (reverse proxy + TLS)
├── networks_volumes.compose.yml # définition des réseaux & volumes
├── .env.dist                    # gabarit de configuration
└── data/
    ├── filebeat.yml             # config Filebeat
    ├── metricbeat.yml           # config Metricbeat
    ├── logstash.conf            # pipeline Logstash
    ├── kibana.yml               # config Kibana
    ├── nginx.conf               # config nginx (GoAccess)
    ├── modules.d/               # modules Filebeat (suricata, zeek, traefik activés)
    ├── suricata/                # suricata.yaml + règles + logs
    ├── zeek/                    # local.zeek + pcap
    └── traefik/                 # letsencrypt, rules, logs

Stack de supervision réseau — Suricata · Zeek · Elastic · OpenCTI · Traefik

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages