Files
runtipi-appstore/apps/wazuh-runtipi/metadata/description.md
Gui-Gos c3c4cc2285
Some checks failed
Test / test (push) Has been cancelled
fix: Remove reference to non-existent password configuration method
Remove contradictory sentence referencing removed "Méthode 1" for
pre-installation password configuration. Replace with accurate guidance
emphasizing setting strong passwords during initial Runtipi installation.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-04 13:45:37 +01:00

36 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 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
    

    Entrez votre nouveau mot de passe et copiez le hash généré.

  3. Mettre à jour internal_users.yml:

    # Éditer le fichier de sécurité
    nano /opt/runtipi/app-data/*/wazuh-runtipi/data/indexer-security/internal_users.yml
    

    Remplacez le hash de l'utilisateur cible (admin ou kibanaserver).

  4. Appliquer les changements:

    # Redémarrer l'application via Runtipi
    # Puis se connecter au conteneur indexer
    docker exec -it wazuh-runtipi-wazuh-indexer-1 bash
    
    # Dans le conteneur, exécuter:
    export INSTALLATION_DIR=/usr/share/wazuh-indexer
    export JAVA_HOME=/usr/share/wazuh-indexer/jdk
    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
    
  5. Mettre à jour les variables d'environnement Runtipi avec les nouveaux mots de passe et redémarrer.

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

Exigences: 8-64 caractères avec majuscules, minuscules, chiffres ET symboles

  1. Mettre à jour la variable d'environnement:

    • Dans Runtipi → Wazuh → Settings
    • Modifier API_PASSWORD avec le nouveau mot de passe
  2. Redémarrer l'application pour appliquer les changements

Note importante: La modification des mots de passe après installation nécessite la procédure officielle décrite ci-dessus (regénération des hash et exécution de securityadmin.sh). Il est donc fortement recommandé de définir des mots de passe forts dès l'installation initiale dans le formulaire Runtipi.


🔍 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

📱 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é.