Files
runtipi-appstore/apps/wazuh-runtipi/metadata/description.md
Gui-Gos 65f171fe4f
Some checks failed
Test / test (push) Has been cancelled
docs: Fix sed regex to match password without quotes in wazuh.yml
The actual wazuh.yml file has passwords WITHOUT quotes:
  password: MyS3cr37P450r.*-

But the sed command was searching FOR quotes:
  password: "MyS3cr37P450r.*-"

This caused the sed command to not match and not replace anything.

Fixed by removing quotes from the sed pattern to match the actual
YAML format used by Wazuh.

đŸ€– Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-04 19:39:06 +01:00

42 KiB

Wazuh 4.14.1 pour Runtipi

Déploiement de Wazuh, la plateforme open-source de sécurité unifiée (XDR et SIEM), sur Runtipi.

Version: Wazuh 4.14.1 Plateforme: Runtipi 4.6.5 Status: ✅ Stable

⚠ IMPORTANT SÉCURITÉ: Les mots de passe par dĂ©faut DOIVENT ĂȘtre changĂ©s avant la mise en production. Voir la section "Configuration des Identifiants" ci-dessous.


📖 Qu'est-ce que Wazuh ?

Wazuh est une plateforme de sécurité open-source qui fournit:

  • SIEM (Security Information and Event Management) - Centralisation et analyse des logs de sĂ©curitĂ©
  • XDR (Extended Detection and Response) - DĂ©tection et rĂ©ponse aux menaces
  • ConformitĂ© - VĂ©rification de conformitĂ© (PCI DSS, HIPAA, GDPR, etc.)
  • DĂ©tection des vulnĂ©rabilitĂ©s - Scan et gestion des vulnĂ©rabilitĂ©s
  • DĂ©tection d'intrusion - Monitoring temps rĂ©el des fichiers systĂšme
  • RĂ©ponse aux incidents - Automatisation des rĂ©ponses de sĂ©curitĂ©

Ressources Officielles


đŸ—ïž Architecture

Ce projet déploie une stack Wazuh complÚte sur Runtipi avec 5 conteneurs Docker:

┌──────────────────────────────────────────────────────────────┐
│                    Votre Infrastructure                      │
│                                                              │
│   ┌──────────┐   ┌──────────┐   ┌──────────┐   ┌──────────┐  │
│   │ Serveur  │   │ Serveur  │   │ Desktop  │   │  Cloud   │  │
│   │  Linux   │   │ Windows  │   │  MacOS   │   │ Instance │  │
│   └────┬─────┘   └────┬─────┘   └────┬─────┘   └────┬─────┘  │
│        │              │              │              │        │
│        │         Wazuh Agents (1514 / 1515)         │        │
│        └──────────────┬──────────────┬──────────────┘        │
└───────────────────────┌──────────────┌───────────────────────┘
                        â–Œ              │
┌───────────────────────┌──────────────┌───────────────────────┐
│                   Stack Wazuh (Runtipi)                      │
│                                                              │
│  ┌────────────────────────────────────────────────────────┐  │
│  │     Wazuh Manager (Ports 1514 / 1515 / 55000)          │  │
│  │  - Collecte des Ă©vĂ©nements                             │  │
│  │  - Analyse & corrĂ©lation                               │  │
│  │  - RĂšgles de dĂ©tection                                 │  │
│  │  - API REST                                            │  │
│  └────────────────────┬───────────────────────────────────┘  │
│                       │ (Filebeat)                           │
│                       â–Œ                                      │
│  ┌────────────────────────────────────────────────────────┐  │
│  │     Wazuh Indexer (OpenSearch - Port 9200)             │  │
│  │  - Stockage & indexation                               │  │
│  │  - Recherches rapides                                  │  │
│  │  - Statistiques / agrĂ©gations                          │  │
│  └────────────────────┬───────────────────────────────────┘  │
│                       │                                      │
│                       â–Œ                                      │
│  ┌────────────────────────────────────────────────────────┐  │
│  │     Wazuh Dashboard (Port 5601) - Interface Web        │  │
│  │  - Visualisation des alertes                           │  │
│  │  - Tableaux de bord                                    │  │
│  │  - Gestion des agents                                  │  │
│  │  - Configuration / Admin                               │  │
│  └────────────────────────────────────────────────────────┘  │
│                                                              │
│  Services additionnels :                                     │
│   ‱ wazuh-certs : gĂ©nĂ©ration certificats SSL/TLS             │
│   ‱ wazuh-indexer-init : initialisation sĂ©curitĂ© OpenSearch  │
└──────────────────────────────────────────────────────────────┘
                        │
                        ▌
              AccĂšs via navigateur
              https://VOTRE_IP:5601

Composants

  1. Wazuh Manager - Analyse les événements de sécurité collectés par les agents
  2. Wazuh Indexer - Base de données OpenSearch pour stocker et indexer les événements
  3. Wazuh Dashboard - Interface web pour visualiser et gérer la sécurité
  4. Wazuh Certs Generator - GénÚre les certificats SSL/TLS pour les communications sécurisées
  5. Wazuh Indexer Init - Initialise la configuration de sécurité d'OpenSearch

🚀 Installation

Prérequis

  • Runtipi 4.6.5+ installĂ© et fonctionnel
  • Ressources minimales:
    • CPU: 2 cores minimum (4 cores recommandĂ©s)
    • RAM: 4GB minimum (8GB recommandĂ©s pour production)
    • Disque: 20GB minimum (60GB+ recommandĂ© pour production avec agents)
  • AccĂšs root au serveur Runtipi

⚠ IMPORTANT - Configuration systĂšme requise:

Avant l'installation, exécutez cette commande sur votre serveur:

sudo sysctl -w vm.max_map_count=262144
echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf

Cette configuration est obligatoire pour le bon fonctionnement d'OpenSearch (le moteur d'indexation de Wazuh). Sans elle, le conteneur wazuh-indexer ne démarrera pas correctement.

Étape 1: Installer via Runtipi

  1. Ouvrir l'interface Runtipi dans votre navigateur
  2. Aller dans "App Store"
  3. Rechercher "Wazuh"
  4. Cliquer sur "Install"
  5. ⚠ IMPORTANT : Attendre 5 minutes complĂštes.

Warning

Le dĂ©ploiement de Wazuh est lourd. Le service wazuh-dashboard peut redĂ©marrer plusieurs fois pendant les 5 premiĂšres minutes le temps que l'indexeur soit prĂȘt. Si vous voyez le statut "Rebooting" ou "Starting", ne touchez Ă  rien et patientez. C'est le comportement normal du script de surveillance (Watchdog).

C'est tout! L'installation est 100% automatique ✅

Étape 2: VĂ©rifier l'Installation

Connectez-vous en SSH au serveur Runtipi:

# Vérifier que tous les services sont démarrés et healthy
docker ps -a | grep wazuh

Résultat attendu:

Vous devriez voir 5 conteneurs:

  • ✅ wazuh-certs - Up X min (healthy)
  • ✅ wazuh-indexer - Up X min (healthy)
  • ✅ wazuh-indexer-init - Up X min (healthy)
  • ✅ wazuh-manager - Up X min (healthy)
  • ✅ wazuh-dashboard - Up X min (healthy)

Note: Le conteneur wazuh-indexer-init reste running avec un health check (adaptation Runtipi). Il initialise la sécurité OpenSearch au démarrage, crée un fichier marker .init-complete, puis reste en veille. Le statut "healthy" confirme que l'initialisation est terminée.

Étape 3: AccĂ©der au Dashboard

  1. Ouvrir votre navigateur
  2. Aller Ă : https://VOTRE_IP_SERVEUR:5601
  3. Se connecter avec les credentials par défaut

🔐 Configuration des Identifiants

Variables d'Environnement

Lors de l'installation via Runtipi, vous pouvez configurer les identifiants dans l'interface GUI:

Variable Description Valeur par défaut
INDEXER_USERNAME Nom d'utilisateur admin de l'indexer admin
INDEXER_PASSWORD Mot de passe admin de l'indexer admin
DASHBOARD_USERNAME Utilisateur interne dashboard→indexer kibanaserver
DASHBOARD_PASSWORD Mot de passe interne dashboard→indexer kibanaserver
API_PASSWORD Mot de passe de l'API REST (user: wazuh-wui) MyS3cr37P450r.*-

Credentials par Défaut

Si vous utilisez les valeurs par défaut:

Service Username Password Usage
Dashboard admin admin Interface web principale
API wazuh-wui MyS3cr37P450r.*- API REST du manager
Kibanaserver kibanaserver kibanaserver Connexion dashboard→indexer

⚠ AVERTISSEMENT: Ces mots de passe par dĂ©faut sont publics. Vous DEVEZ les changer immĂ©diatement aprĂšs l'installation en suivant la procĂ©dure officielle ci-dessous.

Étape 4: Changer les Mots de Passe (OBLIGATOIRE pour Production)

⚠ AVERTISSEMENT DE SÉCURITÉ: Les mots de passe par dĂ©faut sont publics et constituent une vulnĂ©rabilitĂ© critique. Vous DEVEZ les changer aprĂšs l'installation.

⚠ Source officielle: Wazuh Documentation - Changing Default Passwords

Note importante pour Runtipi: La configuration des mots de passe via les variables d'environnement Runtipi AVANT installation ne suffit PAS. Vous devez impérativement suivre la procédure officielle ci-dessous APRÈS l'installation pour sécuriser votre déploiement.

Procédure Officielle de Changement des Mots de Passe

A. Changer le mot de passe des utilisateurs Indexer (admin/kibanaserver):

  1. Se déconnecter du dashboard Wazuh pour éviter les conflits de session

  2. Générer le hash du nouveau mot de passe:

    docker run --rm -ti wazuh/wazuh-indexer:4.14.1 bash /usr/share/wazuh-indexer/plugins/opensearch-security/tools/hash.sh
    

    Exemple d'interaction:

    [Password:]
    $2y$12$aBcDeFgHiJkLmNoPqRsTuVwXyZ123456789abcdefghijklmnopqr
    

    ⚠ IMPORTANT: Copiez le hash complet (commence par $2y$12$...). Vous en aurez besoin Ă  l'Ă©tape suivante.

  3. Éditer le fichier internal_users.yml:

    Le wildcard * fonctionne directement avec nano:

    nano /opt/runtipi/app-data/*/wazuh-runtipi/data/indexer-security/internal_users.yml
    

    Pour changer le mot de passe admin:

    • Trouvez la section admin:
    • Remplacez le hash dans la ligne hash: par le nouveau hash gĂ©nĂ©rĂ©
    • Exemple:
    admin:
      hash: "$2y$12$VOTRE_NOUVEAU_HASH_ICI"
      reserved: true
      backend_roles:
      - "admin"
      description: "Demo admin user"
    

    Pour changer le mot de passe kibanaserver:

    • Trouvez la section kibanaserver:
    • Remplacez le hash de la mĂȘme maniĂšre

    Sauvegardez: Ctrl+X, puis y, puis Entrée

  4. Redémarrer l'application via l'interface Runtipi:

    • Allez dans Runtipi → Apps → Wazuh
    • Cliquez sur "Arreter"
    • Attendez quelques secondes
    • Cliquez sur "DĂ©marrer"
  5. Appliquer les changements avec securityadmin.sh:

    # Se connecter au conteneur wazuh-indexer
    docker exec -it wazuh-runtipi_*-wazuh-indexer-1 bash
    

    Une fois dans le conteneur:

    # Configurer les variables d'environnement
    export INSTALLATION_DIR=/usr/share/wazuh-indexer
    export JAVA_HOME=/usr/share/wazuh-indexer/jdk
    
    # Exécuter securityadmin.sh
    bash /usr/share/wazuh-indexer/plugins/opensearch-security/tools/securityadmin.sh \
      -cd /usr/share/wazuh-indexer/opensearch-security/ \
      -cacert /usr/share/wazuh-indexer/config/certs/root-ca.pem \
      -cert /usr/share/wazuh-indexer/config/certs/admin.pem \
      -key /usr/share/wazuh-indexer/config/certs/admin-key.pem \
      -p 9200 -nhnv -icl
    

    Résultat attendu:

    Will update '_all' config types
    SUCC: Configuration for 'config' created or updated
    SUCC: Configuration for 'roles' created or updated
    SUCC: Configuration for 'rolesmapping' created or updated
    SUCC: Configuration for 'internalusers' created or updated
    ...
    Done with success
    

    Quittez le conteneur: exit

  6. Mettre Ă  jour les variables d'environnement Runtipi:

    • Allez dans Runtipi → Apps → Wazuh → ParamĂštres
    • Modifiez INDEXER_USERNAME et INDEXER_PASSWORD avec vos nouveaux identifiants
    • Modifiez aussi DASHBOARD_USERNAME et DASHBOARD_PASSWORD si vous avez changĂ© kibanaserver
    • Cliquez sur "Mettre Ă  jour" puis "RedĂ©marrer" l'application
  7. Tester les nouveaux mots de passe:

    Test admin (Dashboard - interface web):

    # Ouvrir dans le navigateur
    https://VOTRE_IP:5601
    # Connectez-vous avec: admin / VOTRE_NOUVEAU_MOT_DE_PASSE
    

    ✅ Succùs si vous pouvez vous connecter au dashboard

    Test admin (API OpenSearch - depuis le conteneur):

    # Le port 9200 n'est PAS exposé à l'hÎte (sécurité)
    # Il faut tester depuis un conteneur Wazuh
    docker exec -it wazuh-runtipi_*-wazuh-indexer-1 bash -c \
      "curl -ks https://wazuh.indexer:9200/_cluster/health?pretty -u admin:VOTRE_NOUVEAU_MOT_DE_PASSE"
    

    ✅ Succùs si vous voyez: "cluster_name" : "wazuh-cluster"

    Test kibanaserver:

    docker exec -it wazuh-runtipi_*-wazuh-dashboard-1 bash -c \
      "curl -ks https://wazuh.indexer:9200 -u kibanaserver:VOTRE_NOUVEAU_MOT_DE_PASSE"
    

    ✅ Succùs si vous voyez: "name" : "wazuh.indexer"

    ⚠ Test de sĂ©curitĂ© (vĂ©rifier que les anciens mots de passe ne fonctionnent PLUS):

    docker exec -it wazuh-runtipi_*-wazuh-indexer-1 bash -c \
      "curl -ks https://wazuh.indexer:9200 -u admin:admin"
    

    ✅ Succùs si vous voyez: "type":"security_exception","reason":"Unauthorized"

B. Changer le mot de passe de l'API Wazuh (wazuh-wui):

⚠ Source officielle: Wazuh Documentation - Changing API Password

⚠ Exigences du mot de passe: 8-64 caractĂšres avec majuscules, minuscules, chiffres ET symboles

  1. Choisir un nouveau mot de passe fort:

    • Exemple: MyN3wP@ssw0rd!2024
    • Doit respecter les critĂšres ci-dessus
  2. Mettre Ă  jour le fichier wazuh.yml dans le conteneur dashboard:

    Méthode recommandée - Utiliser sed (une seule commande):

    # Remplacer l'ancien mot de passe par le nouveau dans wazuh.yml
    docker exec -it wazuh-runtipi_*-wazuh-dashboard-1 bash -c \
      "sed -i 's|password: MyS3cr37P450r\.\*-|password: VOTRE_NOUVEAU_MOT_DE_PASSE|g' \
      /usr/share/wazuh-dashboard/data/wazuh/config/wazuh.yml"
    

    ⚠ IMPORTANT: Remplacez VOTRE_NOUVEAU_MOT_DE_PASSE par votre mot de passe rĂ©el (sans guillemets)

    Vérifier que le changement a été effectué:

    docker exec -it wazuh-runtipi_*-wazuh-dashboard-1 bash -c \
      "grep 'password:' /usr/share/wazuh-dashboard/data/wazuh/config/wazuh.yml"
    

    Vous devriez voir votre nouveau mot de passe dans la sortie.

    Alternative - Méthode manuelle (si sed ne fonctionne pas):

    # Se connecter au conteneur dashboard
    docker exec -it wazuh-runtipi_*-wazuh-dashboard-1 bash
    
    # Afficher le fichier pour voir son contenu
    cat /usr/share/wazuh-dashboard/data/wazuh/config/wazuh.yml
    
    # Utiliser sed directement dans le conteneur (sans guillemets)
    sed -i 's|password: MyS3cr37P450r\.\*-|password: VOTRE_NOUVEAU_MOT_DE_PASSE|g' \
      /usr/share/wazuh-dashboard/data/wazuh/config/wazuh.yml
    
    # Vérifier le changement
    grep 'password:' /usr/share/wazuh-dashboard/data/wazuh/config/wazuh.yml
    
    # Quitter le conteneur
    exit
    
  3. Mettre Ă  jour la variable d'environnement dans Runtipi:

    • Allez dans Runtipi → Apps → Wazuh → ParamĂštres
    • Trouvez API_PASSWORD
    • Remplacez MyS3cr37P450r.*- par votre nouveau mot de passe
    • Cliquez sur "Mettre Ă  jour"
  4. Redémarrer l'application:

    • Cliquez sur "Arreter"
    • Attendez quelques secondes
    • Cliquez sur "DĂ©marrer"
  5. Vérifier que le changement est effectif:

    # Tester l'API avec le nouveau mot de passe
    curl -k -u wazuh-wui:VOTRE_NOUVEAU_MOT_DE_PASSE https://VOTRE_IP:55000/security/user/authenticate
    

    Résultat attendu:

    {
      "data": {
        "token": "eyJ0eXAiOiJKV1QiLCJhbGc..."
      }
    }
    

    ✅ Si vous obtenez un token, le changement est rĂ©ussi!

⚠ NOTE IMPORTANTE: Le fichier wazuh.yml est stockĂ© dans /usr/share/wazuh-dashboard/data/ qui n'est PAS un volume persistant. Cela signifie que si vous supprimez complĂštement l'application (pas juste un redĂ©marrage), vous devrez refaire cette modification. Pour un simple redĂ©marrage ou mise Ă  jour, le fichier est prĂ©servĂ©.


⚠ RÉCAPITULATIF IMPORTANT:

Pour les mots de passe Indexer (admin/kibanaserver):

  • Il n'existe aucun moyen de contourner la procĂ©dure hash.sh + securityadmin.sh
  • MĂȘme si vous dĂ©finissez des mots de passe dans le formulaire Runtipi avant l'installation, vous devrez obligatoirement exĂ©cuter cette procĂ©dure
  • C'est la seule mĂ©thode officielle supportĂ©e par Wazuh pour OpenSearch

Pour le mot de passe API Wazuh (wazuh-wui):

  • La modification via variables d'environnement Runtipi est suffisante
  • Pas besoin de securityadmin.sh pour l'API

🔍 Validation Post-Installation

Diagnostic Automatique

Un script de diagnostic complet est fourni pour vérifier la santé de votre installation:

# Se connecter en SSH au serveur
ssh user@VOTRE_SERVEUR

# Exécuter le diagnostic
bash /opt/runtipi/app-data/*/wazuh-runtipi/data/debug/wazuh-health-check.sh

Ce script vérifie automatiquement:

  • ✅ SantĂ© de tous les services (healthy/unhealthy)
  • ✅ Utilisation disque (7 GB attendu pour installation fraĂźche)
  • ✅ PrĂ©sence des 8 fichiers de sĂ©curitĂ© OpenSearch
  • ✅ ConnectivitĂ© rĂ©seau entre conteneurs
  • ✅ Configuration du dashboard et manager
  • ✅ Variables d'environnement SSL Filebeat (mĂ©thode officielle)
  • ✅ Initialisation de la sĂ©curitĂ© OpenSearch

Vérification via l'Interface Web

AprÚs l'installation, vous pouvez également vérifier la santé de votre déploiement directement dans l'interface Wazuh:

URL de vérification: https://VOTRE_IP:5601/app/logs#/health-check

Cette page affiche:

  • État des services Wazuh (indexer, manager, dashboard)
  • Statistiques de performance en temps rĂ©el
  • Alertes de santĂ© du cluster
  • MĂ©triques de connectivitĂ© des agents

Note: Remplacez VOTRE_IP par l'adresse IP de votre serveur Runtipi. Si vous utilisez un proxy inverse avec un nom de domaine, utilisez celui-ci Ă  la place.


đŸ“± DĂ©ployer des Agents Wazuh

Une fois Wazuh installé, vous devez déployer des agents sur vos serveurs/postes à surveiller.

Architecture Agent ↔ Manager

Serveur/Desktop Ă  surveiller          Serveur Wazuh (Runtipi)
┌─────────────────────┐               ┌────────────────────┐
│                     │               │                    │
│   Wazuh Agent  ─────┌──────────────â–ș│   Wazuh Manager    │
│   (Service)         │   Port 1514   │   (Collecte)       │
│                     │   1515        │                    │
│   - Logs systùme    │               │   - Analyse        │
│   - Fichiers        │               │   - CorrĂ©lation    │
│   - Processus       │               │   - Alertes        │
│   - RĂ©seau          │               │                    │
└─────────────────────┘               └────────────────────┘

Agent Linux (Debian/Ubuntu)

# 1. Télécharger l'agent
wget https://packages.wazuh.com/4.x/apt/pool/main/w/wazuh-agent/wazuh-agent_4.14.1-1_amd64.deb

# 2. Installer
sudo dpkg -i wazuh-agent_4.14.1-1_amd64.deb

# 3. Configurer l'adresse du manager (remplacer VOTRE_IP par l'IP de votre serveur Runtipi)
sudo sed -i "s/<address>MANAGER_IP<\/address>/<address>VOTRE_IP<\/address>/" /var/ossec/etc/ossec.conf

# 4. Démarrer l'agent
sudo systemctl daemon-reload
sudo systemctl enable wazuh-agent
sudo systemctl start wazuh-agent

# 5. Vérifier le statut
sudo systemctl status wazuh-agent

Agent Windows

  1. Télécharger l'installeur: https://packages.wazuh.com/4.x/windows/wazuh-agent-4.14.1-1.msi

  2. Ouvrir PowerShell en tant qu'Administrateur et exécuter:

# Installer (remplacer VOTRE_IP par l'IP de votre serveur Runtipi)
msiexec /i wazuh-agent-4.14.1-1.msi /q WAZUH_MANAGER="VOTRE_IP"

# Démarrer le service
NET START WazuhSvc

# Vérifier le statut
Get-Service WazuhSvc

Agent MacOS

# 1. Télécharger l'agent
curl -O https://packages.wazuh.com/4.x/macos/wazuh-agent-4.14.1-1.pkg

# 2. Installer
sudo installer -pkg wazuh-agent-4.14.1-1.pkg -target /

# 3. Configurer (remplacer VOTRE_IP)
sudo sed -i '' "s/<address>MANAGER_IP<\/address>/<address>VOTRE_IP<\/address>/" /Library/Ossec/etc/ossec.conf

# 4. Démarrer
sudo /Library/Ossec/bin/wazuh-control start

Vérifier les Agents dans le Dashboard

  1. Se connecter au dashboard Wazuh
  2. Cliquer sur ☰ → Agents
  3. Vérifier que vos agents apparaissent avec le statut "Active" (aprÚs 1-2 minutes)

Chaque agent doit montrer:

  • ✅ Status: Active (point vert)
  • ✅ IP Address: L'IP de la machine
  • ✅ Version: 4.14.1
  • ✅ Last keep alive: < 1 minute

🎯 Utilisation du Dashboard

Sections Principales

  1. Overview / Vue d'ensemble

    • RĂ©sumĂ© des alertes de sĂ©curitĂ©
    • ÉvĂ©nements rĂ©cents
    • Top agents
    • Statistiques globales
  2. Agents

    • Liste de tous les agents
    • Statut (actif/dĂ©connectĂ©)
    • DĂ©tails par agent
    • DĂ©ploiement de nouveaux agents
  3. Security Events / ÉvĂ©nements

    • Alertes de sĂ©curitĂ© en temps rĂ©el
    • Filtrage par sĂ©vĂ©ritĂ©, agent, rĂšgle
    • Timeline des Ă©vĂ©nements
    • DĂ©tails complets des alertes
  4. Compliance / Conformité

    • PCI DSS
    • GDPR
    • HIPAA
    • NIST 800-53
    • CIS benchmarks
  5. Vulnerability Detection

    • CVE dĂ©tectĂ©es sur vos systĂšmes
    • Score CVSS
    • Packages vulnĂ©rables
    • Recommandations de mise Ă  jour
  6. File Integrity Monitoring (FIM)

    • Changements de fichiers systĂšme
    • Modifications non autorisĂ©es
    • Ajouts/suppressions de fichiers

Exemple: Voir les Alertes de Sécurité

  1. Menu ☰ → Security Events
  2. Filtrer par sévérité: Sélectionner "High" ou "Critical"
  3. Cliquer sur une alerte pour voir les détails complets:
    • Description de la menace
    • Agent source
    • Fichiers/processus impliquĂ©s
    • Actions recommandĂ©es
    • Contexte MITRE ATT&CK

🔧 Configuration AvancĂ©e

Ports Utilisés

Port Protocole Service Usage
5601 HTTPS Dashboard Interface web (publique)
9200 HTTPS Indexer API OpenSearch (interne)
1514 TCP Manager Communication avec les agents (publique)
1515 TCP Manager Enrollment des agents (publique)
514 UDP Manager Collection Syslog
55000 HTTPS Manager API REST (interne)

Note: Seul les ports 5601, 1514, 1515 (Dashboard et les agents) sont à exposer publiquement. Les autres ports sont utilisés pour la communication interne entre les composants Wazuh et les agents.

Variables d'Environnement Techniques

En plus des variables de configuration utilisateur, le déploiement utilise ces variables techniques (configurées automatiquement):

Indexer:

  • OPENSEARCH_JAVA_OPTS: -Xms1g -Xmx1g -Dlog4j2.formatMsgNoLookups=true
    • Configure le heap Java (1GB) et active la protection contre la vulnĂ©rabilitĂ© Log4j
  • DISABLE_INSTALL_DEMO_CONFIG: true
    • DĂ©sactive la configuration de dĂ©monstration (sĂ©curitĂ©)
  • bootstrap.memory_lock: true
    • Verrouille la mĂ©moire pour Ă©viter le swapping (performance)

Manager:

  • WAZUH_NODE_TYPE: master
    • DĂ©finit explicitement le type de nƓud (single-node deployment)
  • FILEBEAT_SSL_VERIFICATION_MODE: full
    • Active la vĂ©rification SSL complĂšte pour Filebeat
  • SSL_CERTIFICATE_AUTHORITIES, SSL_CERTIFICATE, SSL_KEY
    • Chemins vers les certificats SSL gĂ©nĂ©rĂ©s automatiquement

Dashboard:

  • SERVER_SSL_ENABLED: true
    • Active explicitement le SSL pour le serveur web
  • SERVER_SSL_CERTIFICATE, SERVER_SSL_KEY
    • Certificats SSL pour HTTPS

Note de sécurité: Le flag -Dlog4j2.formatMsgNoLookups=true protÚge contre CVE-2021-44228 (Log4Shell). Cette configuration suit les recommandations de sécurité officielles de Wazuh.

Limites de Ressources

Configuration par défaut des conteneurs basée sur les recommandations Kubernetes de Wazuh:

Indexer:

  • CPU: RĂ©servĂ©: 0.5 / Limite: 1.0 core
  • RAM: RĂ©servĂ©: 1GB / Limite: 2GB
  • Java heap: 1GB min/max (variable OPENSEARCH_JAVA_OPTS: -Xms1g -Xmx1g -Dlog4j2.formatMsgNoLookups=true)
  • Memory lock: illimitĂ© (ulimits memlock: -1)
  • File descriptors: 65536
  • SĂ©curitĂ©: Log4j vulnerability mitigation activĂ©

Manager:

  • CPU: RĂ©servĂ©: 1.0 / Limite: 2.0 cores
  • RAM: RĂ©servĂ©: 1GB / Limite: 2GB
  • Memory lock: illimitĂ© (ulimits memlock: -1)
  • File descriptors: 655360
  • Type de nƓud: Master (single-node deployment)

Dashboard:

  • CPU: RĂ©servĂ©: 0.2 / Limite: 0.4 core
  • RAM: RĂ©servĂ©: 512MB / Limite: 2GB
  • SSL: ActivĂ© explicitement via SERVER_SSL_ENABLED: true

Note: Ces limites sont configurées dans la section deploy.resources du fichier docker-compose.json. Les limites CPU et RAM sont basées sur les configurations de production Kubernetes de Wazuh pour assurer une stabilité optimale.

Espace Disque

Utilisation disque:

  • Installation fraĂźche: 7 GB
  • Production recommandĂ©e (basĂ©e sur les configurations Kubernetes):
    • Indexer: 10Gi minimum pour stockage des indices OpenSearch
    • Manager: 50Gi minimum pour logs, queue et donnĂ©es d'agents
    • Dashboard: Aucun stockage persistant requis (service sans Ă©tat)

L'espace augmente avec:

  • Nombre d'agents connectĂ©s
  • Volume d'Ă©vĂ©nements gĂ©nĂ©rĂ©s
  • PĂ©riode de rĂ©tention des logs (7 jours par dĂ©faut)

Volumes critiques Ă  sauvegarder:

  • indexer-data - État du cluster et indices OpenSearch
  • manager-logs - Logs d'Ă©vĂ©nements de sĂ©curitĂ©
  • manager-queue - Queue de donnĂ©es des agents

Pour surveiller:

# Vérifier la taille totale (incluant data/)
du -sh /opt/runtipi/app-data/*/wazuh-runtipi

# Vérifier uniquement les données persistantes
du -sh /opt/runtipi/app-data/*/wazuh-runtipi/data

# Vérifier par composant
du -sh /opt/runtipi/app-data/*/wazuh-runtipi/data/indexer-data
du -sh /opt/runtipi/app-data/*/wazuh-runtipi/data/manager-logs
du -sh /opt/runtipi/app-data/*/wazuh-runtipi/data/manager-queue

Personnalisation du Manager

Fichier de configuration principal: /var/ossec/etc/ossec.conf

Exemples de personnalisation:

  • RĂšgles de dĂ©tection personnalisĂ©es
  • Alertes par email
  • IntĂ©grations (Slack, PagerDuty, etc.)
  • Configuration FIM (File Integrity Monitoring)
  • Politique de rĂ©tention des logs

Voir la documentation officielle: https://documentation.wazuh.com/current/user-manual/reference/ossec-conf/


🔄 Mises à Jour

Runtipi gĂšre automatiquement les mises Ă  jour de l'application Wazuh.

Processus de Mise Ă  Jour

  1. Runtipi détecte une nouvelle version dans son repository
  2. Télécharge le nouveau docker-compose.json
  3. Redémarre les conteneurs avec la nouvelle configuration
  4. Préserve vos données et configurations

Aucune action manuelle requise! ✅

Vérification Post-Mise à Jour

# Attendre 2-3 minutes aprĂšs la mise Ă  jour

# Vérifier que tous les services sont healthy
docker ps -a | grep wazuh

# Diagnostic complet
bash /opt/runtipi/app-data/*/wazuh-runtipi/data/debug/wazuh-health-check.sh

🆘 DĂ©pannage

Le Dashboard n'est pas Accessible

SymptÎme: Impossible d'accéder à https://VOTRE_IP:5601

Solutions:

# 1. Vérifier que le conteneur dashboard est running
docker ps | grep dashboard

# 2. Vérifier les logs du dashboard
docker logs wazuh-runtipi_*-wazuh-dashboard-1

# 3. Vérifier que le port 5601 est bien exposé
docker port wazuh-runtipi_*-wazuh-dashboard-1

# 4. Tester depuis le serveur
curl -I http://localhost:5601 || curl -I https://localhost:5601

Un Service est "Unhealthy"

SymptĂŽme: docker ps montre un conteneur avec (unhealthy)

Solutions:

# 1. Voir les logs du service problématique
docker logs wazuh-runtipi_*-wazuh-SERVICE-1

# Exemples:
docker logs wazuh-runtipi_*-wazuh-indexer-1
docker logs wazuh-runtipi_*-wazuh-manager-1
docker logs wazuh-runtipi_*-wazuh-dashboard-1

# 2. Redémarrer le service
docker restart wazuh-runtipi_*-wazuh-SERVICE-1

# 3. Si le problÚme persiste, redémarrer toute la stack
docker restart $(docker ps -q --filter "name=wazuh-runtipi")

Les Agents n'Apparaissent Pas

SymptÎme: Agents installés mais invisibles dans le dashboard

Vérifications:

  1. Sur la machine agent:
# Linux/MacOS
sudo /var/ossec/bin/agent-auth -m VOTRE_IP
sudo systemctl restart wazuh-agent
sudo tail -f /var/ossec/logs/ossec.log

# Windows (PowerShell Admin)
Restart-Service WazuhSvc
Get-Content "C:\Program Files (x86)\ossec-agent\ossec.log" -Tail 20 -Wait
  1. Sur le serveur Wazuh:
# Vérifier les logs du manager
docker logs wazuh-runtipi_*-wazuh-manager-1 | grep -i "agent"

# Vérifier que les ports 1514/1515 sont bien ouverts
docker port wazuh-runtipi_*-wazuh-manager-1

Utilisation Disque Anormalement ÉlevĂ©e

SymptÎme: Plus de 20GB utilisés

Solutions:

# 1. Vérifier la taille actuelle
du -sh /opt/runtipi/app-data/*/wazuh-runtipi/data

# 2. Vérifier la taille des indices OpenSearch
docker exec wazuh-runtipi_*-wazuh-indexer-1 curl -k -u admin:admin https://localhost:9200/_cat/indices?v

# 3. Réduire la période de rétention (connexion dashboard)
# Settings → Indices → wazuh-alerts-* → Modifier la rĂ©tention

"Index Pattern Warning" dans le health-check

SymptĂŽme: Message No template found for [wazuh-alerts-*]

Explication: C'est normal pour une installation fraĂźche sans agents!

Les indices wazuh-alerts-* sont créés automatiquement quand:

  1. Des agents Wazuh sont connectés
  2. Ces agents génÚrent des événements/alertes
  3. Le manager envoie les données à l'indexer

Solution: Déployez votre premier agent Wazuh. L'alerte disparaßtra automatiquement.


📚 Documentation et Ressources

Documentation Wazuh Officielle

Projets Source

Communauté et Support

Formations et Certifications


📁 Structure du Projet

wazuh-runtipi/
├── docker-compose.json                ← Configuration Docker Compose
├── config.json                        ← Configuration Runtipi
│
├── data/
│   ├── config/
│   │   └── certs.yml                  ← Configuration certificats SSL
│   │
│   ├── scripts/                       ← Scripts d'initialisation
│   │   ├── init-certs.sh              │  GĂ©nĂ©ration certificats SSL
│   │   ├── init-indexer-init.sh       │  Initialisation sĂ©curitĂ© OpenSearch
│   │   ├── init-manager.sh            │  Configuration manager + Filebeat
│   │   └── init-dashboard.sh          │  Configuration dashboard + Watchdog
│   │
│   ├── debug/
│   │   └── wazuh-health-check.sh      ← Script de diagnostic complet
│   │
│   ├── indexer-security/              ← Configuration sĂ©curitĂ© OpenSearch
│   │   └── .gitkeep                   │  (Dossier vide - tous les fichiers
│   │                                  │   sont copiĂ©s depuis le Docker au
│   │                                  │   premier dĂ©marrage)
│   │
│   │   # Les 8 fichiers suivants sont automatiquement copiĂ©s
│   │   # depuis l'image wazuh-indexer lors du premier dĂ©marrage:
│   │   # - config.yml
│   │   # - roles.yml
│   │   # - roles_mapping.yml
│   │   # - internal_users.yml
│   │   # - action_groups.yml
│   │   # - tenants.yml
│   │   # - nodes_dn.yml
│   │   # - whitelist.yml
│
└── metadata/
    ├── description.md                 ← Documentation complùte (ce fichier)
    └── logo.jpg                       ← Logo de l'application

Notes importantes:

  • Scripts d'initialisation dans data/scripts/ sont montĂ©s dans les conteneurs et exĂ©cutĂ©s au dĂ©marrage
  • Architecture simple : Un script init par conteneur (init-certs.sh, init-indexer-init.sh, init-manager.sh, init-dashboard.sh)
  • Configuration persistante via symlinks vers les dossiers personnalisĂ©s
  • Filebeat : Configuration automatique via variables d'environnement officielles (FILEBEAT_SSL_VERIFICATION_MODE, SSL_CERTIFICATE_AUTHORITIES, SSL_CERTIFICATE, SSL_KEY)
  • Manager Watchdog : Surveille le dĂ©marrage de wazuh-db et rend ossec.conf persistant via symlink
  • SĂ©curitĂ© OpenSearch : Les 8 fichiers dans indexer-security/ sont automatiquement copiĂ©s au premier dĂ©marrage et prĂ©servĂ©s lors des mises Ă  jour

📊 ConsidĂ©rations de Production et Scaling

Limitations du Déploiement Single-Node

Ce déploiement est optimisé pour les environnements de petite à moyenne taille:

✅ AdaptĂ© pour:

  • PME avec 10-50 agents
  • Environnements de test/dĂ©veloppement
  • Labs de sĂ©curitĂ© personnels
  • Monitoring de petites infrastructures

⚠ Non recommandĂ© pour:

  • Grandes entreprises (>100 agents)
  • Environnements critiques nĂ©cessitant haute disponibilitĂ©
  • Charges de travail trĂšs Ă©levĂ©es (>10000 Ă©vĂ©nements/seconde)

Haute Disponibilité (HA)

Pour des déploiements haute disponibilité, Wazuh recommande Kubernetes avec:

Configuration HA recommandée (basée sur wazuh-kubernetes):

  • Indexer: 3 nƓuds en cluster (quorum)
  • Manager: 1 Master + 2+ Workers avec pod anti-affinity
  • Dashboard: 2+ rĂ©plicas avec load balancing
  • Network Policies: Segmentation rĂ©seau zero-trust
  • Persistent Volumes: Stockage distribuĂ© (EBS, Ceph, etc.)

Référence: Le dossier data/ressources/wazuh-kubernetes-main/ contient les configurations officielles Kubernetes de Wazuh pour déploiements HA.

Recommandations de Scaling

Si vous atteignez les limites du déploiement single-node:

  1. Migration vers Kubernetes

    • Utilisez les manifests dans wazuh-kubernetes-main/
    • Configurations prĂ©-configurĂ©es pour AWS EKS, GKE, AKS
    • Support pour multi-nodes et auto-scaling
  2. Optimisation du Déploiement Actuel

    • Augmentez les ressources CPU/RAM si nĂ©cessaire
    • Ajustez la pĂ©riode de rĂ©tention des logs
    • Configurez l'archivage des anciens Ă©vĂ©nements
    • Optimisez les rĂšgles de dĂ©tection (dĂ©sactiver celles non utilisĂ©es)
  3. Monitoring des Performances

    # Surveiller l'utilisation du CPU/RAM
    docker stats
    
    # Vérifier la santé du cluster OpenSearch
    curl -k -u admin:admin https://localhost:9200/_cluster/health?pretty
    
    # Analyser les logs du manager
    docker logs wazuh-runtipi-wazuh-manager-1
    

Sécurité en Production

✅ Checklist de sĂ©curitĂ©:

  • Changer TOUS les mots de passe par dĂ©faut
  • Activer le pare-feu (exposer uniquement ports 5601, 1514, 1515)
  • Configurer HTTPS avec certificats valides (non auto-signĂ©s)
  • Limiter les accĂšs SSH au serveur
  • Activer les backups automatiques des volumes critiques
  • Configurer la rotation des logs
  • Activer l'authentification multi-facteurs si possible
  • Surveiller les alertes de sĂ©curitĂ© Wazuh pour le serveur lui-mĂȘme

Backup recommandé:

# Script de backup des volumes critiques
BACKUP_DIR="/backup/wazuh-$(date +%Y%m%d)"
mkdir -p "$BACKUP_DIR"

# Indexer data
tar czf "$BACKUP_DIR/indexer-data.tar.gz" \
  /opt/runtipi/app-data/*/wazuh-runtipi/data/indexer-data

# Manager logs et queue
tar czf "$BACKUP_DIR/manager-data.tar.gz" \
  /opt/runtipi/app-data/*/wazuh-runtipi/data/manager-logs \
  /opt/runtipi/app-data/*/wazuh-runtipi/data/manager-queue

# Security configs
tar czf "$BACKUP_DIR/security-config.tar.gz" \
  /opt/runtipi/app-data/*/wazuh-runtipi/data/indexer-security \
  /opt/runtipi/app-data/*/wazuh-runtipi/data/config

🔧 DĂ©tails Techniques et Bonnes Pratiques

Configuration Filebeat SSL (Méthode Officielle)

Cette implémentation utilise la méthode officielle Wazuh pour configurer Filebeat avec SSL, documentée sur Docker Hub - Wazuh Manager.

Variables d'environnement utilisées:

FILEBEAT_SSL_VERIFICATION_MODE=full
SSL_CERTIFICATE_AUTHORITIES=/var/ossec/etc/certs/root-ca.pem
SSL_CERTIFICATE=/var/ossec/etc/certs/server.pem
SSL_KEY=/var/ossec/etc/certs/server-key.pem

Le script officiel cont-init.d/1-config-filebeat de l'image Wazuh détecte automatiquement ces variables et génÚre la configuration Filebeat correcte. Cette approche est préférable à la création manuelle de filebeat.yml car :

  • ✅ Respecte le workflow d'initialisation Wazuh natif
  • ✅ Évite les conflits avec les scripts internes
  • ✅ Simplifie la maintenance (moins de code personnalisĂ©)
  • ✅ Garantit la compatibilitĂ© avec les futures versions

Initialisation et Boucles Logiques

Tous les scripts d'initialisation utilisent des boucles logiques basées sur des conditions réelles plutÎt que des délais fixes, permettant une adaptation automatique à la vitesse de chaque machine :

init-indexer-init.sh :

# Attend la disponibilité réelle de l'API indexer
until curl -ks https://wazuh.indexer:9200; do
    sleep 5
done

init-manager.sh :

# Attend que le processus wazuh-db soit démarré
while [ $ELAPSED -lt $TIMEOUT ]; do
    if pgrep -x "wazuh-db" > /dev/null 2>&1; then
        # wazuh-db running, attendre 5s pour stabilité
        sleep 5
        break
    fi
    sleep 2
done

init-dashboard.sh :

# Pas de watchdog - exécute simplement l'entrypoint officiel
# La configuration est créée via symlink vers opensearch_dashboards.yml
exec /entrypoint.sh

Cette approche garantit :

  • 🚀 DĂ©marrage rapide sur machines performantes
  • ⏱ Patience suffisante sur machines plus lentes
  • 📊 Logs prĂ©cis avec temps rĂ©els Ă©coulĂ©s

Gestion de la Persistance Manager

Le watchdog du manager (init-manager.sh) rend la configuration ossec.conf persistante :

  1. Attente : Surveille le démarrage du processus wazuh-db (un des derniers services à démarrer)
  2. Stabilité : Attend 5 secondes supplémentaires aprÚs détection du processus
  3. Persistance : Copie ossec.conf vers /var/ossec/etc/custom/ si nécessaire
  4. Symlink : Crée un lien symbolique pour garantir la persistance entre redémarrages

Cette logique garantit que les modifications de configuration survivent aux redémarrages de conteneurs.


📄 Licence et CrĂ©dits

Wazuh

Ce Projet

  • Configuration Runtipi: synode-it
  • Date: 2025-12-27
  • Version: 4.14.1

Ce projet est une configuration Docker Compose de Wazuh optimisée pour Runtipi. Il utilise les images Docker officielles de Wazuh et suit leurs bonnes pratiques de déploiement.


🎉 Votre plateforme de sĂ©curitĂ© Wazuh est maintenant prĂȘte Ă  protĂ©ger votre infrastructure!

Pour toute question, consultez la documentation officielle Wazuh ou rejoignez la communauté.