Changed the API password test command to use localhost:55000 instead of VOTRE_IP:55000 for better clarity since the command is executed from the server itself via SSH. This is more consistent with other local testing commands. đ€ Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
41 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
- Site Web: https://wazuh.com/
- Documentation: https://documentation.wazuh.com/current/
- GitHub Wazuh: https://github.com/wazuh/wazuh
- Wazuh Docker: https://github.com/wazuh/wazuh-docker
- Community: https://groups.google.com/g/wazuh
đïž 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
- Wazuh Manager - Analyse les événements de sécurité collectés par les agents
- Wazuh Indexer - Base de données OpenSearch pour stocker et indexer les événements
- Wazuh Dashboard - Interface web pour visualiser et gérer la sécurité
- Wazuh Certs Generator - GénÚre les certificats SSL/TLS pour les communications sécurisées
- 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
- Ouvrir l'interface Runtipi dans votre navigateur
- Aller dans "App Store"
- Rechercher "Wazuh"
- Cliquer sur "Install"
- â ïž IMPORTANT : Attendre 5 minutes complĂštes.
Warning
Le déploiement de Wazuh est lourd. Le service
wazuh-dashboardpeut 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
- Ouvrir votre navigateur
- Aller Ă :
https://VOTRE_IP_SERVEUR:5601 - 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):
-
Se déconnecter du dashboard Wazuh pour éviter les conflits de session
-
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.shExemple d'interaction:
[Password:] $2y$12$aBcDeFgHiJkLmNoPqRsTuVwXyZ123456789abcdefghijklmnopqrâ ïž IMPORTANT: Copiez le hash complet (commence par
$2y$12$...). Vous en aurez besoin à l'étape suivante. -
Ăditer le fichier internal_users.yml:
Le wildcard
*fonctionne directement avec nano:nano /opt/runtipi/app-data/*/wazuh-runtipi/data/indexer-security/internal_users.ymlPour 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, puisy, puisEntrée - Trouvez la section
-
Redémarrer l'application via l'interface Runtipi:
- Allez dans Runtipi â Apps â Wazuh
- Cliquez sur "Arreter"
- Attendez quelques secondes
- Cliquez sur "Démarrer"
-
Appliquer les changements avec securityadmin.sh:
# Se connecter au conteneur wazuh-indexer docker exec -it $(docker ps --filter "name=wazuh-indexer" --format "{{.Names}}" | grep -v init) bashUne 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 -iclRé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 successQuittez le conteneur:
exit -
Mettre Ă jour les variables d'environnement Runtipi:
- Allez dans Runtipi â Apps â Wazuh â ParamĂštres
- Modifiez
INDEXER_USERNAMEetINDEXER_PASSWORDavec vos nouveaux identifiants - Modifiez aussi
DASHBOARD_USERNAMEetDASHBOARD_PASSWORDsi vous avez changé kibanaserver - Cliquez sur "Mettre à jour" puis "Redémarrer" l'application
-
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 $(docker ps --filter "name=wazuh-indexer" --format "{{.Names}}" | grep -v init) 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 $(docker ps --filter "name=wazuh-dashboard" --format "{{.Names}}") 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 $(docker ps --filter "name=wazuh-indexer" --format "{{.Names}}" | grep -v init) 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
-
Choisir un nouveau mot de passe fort:
- Exemple:
MyN3wP@ssw0rd!2024 - Doit respecter les critĂšres ci-dessus
- Exemple:
-
Mettre Ă jour le fichier wazuh.yml dans le conteneur dashboard:
# Se connecter au conteneur dashboard docker exec -it $(docker ps --filter "name=wazuh-dashboard" --format "{{.Names}}") bashUne fois dans le conteneur:
# Afficher le fichier pour voir son contenu actuel cat /usr/share/wazuh-dashboard/data/wazuh/config/wazuh.yml # Remplacer l'ancien mot de passe par le nouveau sed -i 's|password: MyS3cr37P450r\.\*-|password: VOTRE_NOUVEAU_MOT_DE_PASSE|g' \ /usr/share/wazuh-dashboard/data/wazuh/config/wazuh.yml # VĂ©rifier que le changement a Ă©tĂ© effectuĂ© grep 'password:' /usr/share/wazuh-dashboard/data/wazuh/config/wazuh.yml # Quitter le conteneur exitâ ïž IMPORTANT: Remplacez
VOTRE_NOUVEAU_MOT_DE_PASSEpar votre mot de passe réel (sans guillemets) -
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" puis "Redémarrer" l'application
-
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://localhost:55000/security/user/authenticateRé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.shpour 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
-
Télécharger l'installeur: https://packages.wazuh.com/4.x/windows/wazuh-agent-4.14.1-1.msi
-
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
- Se connecter au dashboard Wazuh
- Cliquer sur â° â Agents
- 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
-
Overview / Vue d'ensemble
- Résumé des alertes de sécurité
- ĂvĂ©nements rĂ©cents
- Top agents
- Statistiques globales
-
Agents
- Liste de tous les agents
- Statut (actif/déconnecté)
- Détails par agent
- Déploiement de nouveaux agents
-
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
-
Compliance / Conformité
- PCI DSS
- GDPR
- HIPAA
- NIST 800-53
- CIS benchmarks
-
Vulnerability Detection
- CVE détectées sur vos systÚmes
- Score CVSS
- Packages vulnérables
- Recommandations de mise Ă jour
-
File Integrity Monitoring (FIM)
- Changements de fichiers systĂšme
- Modifications non autorisées
- Ajouts/suppressions de fichiers
Exemple: Voir les Alertes de Sécurité
- Menu â° â Security Events
- Filtrer par sévérité: Sélectionner "High" ou "Critical"
- 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 OpenSearchmanager-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
- Runtipi détecte une nouvelle version dans son repository
- Télécharge le nouveau
docker-compose.json - Redémarre les conteneurs avec la nouvelle configuration
- 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:
- 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
- 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:
- Des agents Wazuh sont connectés
- Ces agents génÚrent des événements/alertes
- 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
- Getting Started: https://documentation.wazuh.com/current/getting-started/
- User Manual: https://documentation.wazuh.com/current/user-manual/
- Installation Guide: https://documentation.wazuh.com/current/installation-guide/
- API Reference: https://documentation.wazuh.com/current/user-manual/api/
- Ruleset: https://documentation.wazuh.com/current/user-manual/ruleset/
Projets Source
- Wazuh (Core): https://github.com/wazuh/wazuh
- Wazuh Docker: https://github.com/wazuh/wazuh-docker
- Wazuh Kubernetes: https://github.com/wazuh/wazuh-kubernetes
- Wazuh Documentation: https://github.com/wazuh/wazuh-documentation
Communauté et Support
- Google Group: https://groups.google.com/g/wazuh
- Slack Community: https://wazuh.com/community/join-us-on-slack/
- GitHub Issues: https://github.com/wazuh/wazuh/issues
Formations et Certifications
- Wazuh Free Training: https://wazuh.com/platform/siem/
- YouTube Channel: https://www.youtube.com/@wazuh
đ 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:
-
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
- Utilisez les manifests dans
-
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)
-
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 :
- Attente : Surveille le démarrage du processus wazuh-db (un des derniers services à démarrer)
- Stabilité : Attend 5 secondes supplémentaires aprÚs détection du processus
- Persistance : Copie ossec.conf vers /var/ossec/etc/custom/ si nécessaire
- 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
- Licence: GPL v2
- Copyright: Wazuh, Inc.
- Site Web: https://wazuh.com/
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é.