Wazuh sur Rocky Linux 9
Installation de Wazuh - plateforme SIEM et XDR open source.
| Composant | Version |
|---|---|
| Rocky Linux | 9.x |
| Wazuh | 4.7+ |
| Elasticsearch | 7.17+ |
Durée estimée : 45 minutes
Fonctionnalités Wazuh
| Fonction | Description |
|---|---|
| SIEM | Collecte et analyse des logs |
| IDS/IPS | Détection d'intrusion |
| FIM | Surveillance intégrité fichiers |
| Vulnerability | Scan vulnérabilités |
| Compliance | PCI-DSS, GDPR, HIPAA |
| XDR | Détection et réponse étendues |
Architecture
1. Prérequis
# Ressources minimales
# - 4 CPU
# - 8 GB RAM
# - 50 GB disque
# Désactiver SELinux temporairement (ou configurer)
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
2. Installation tout-en-un
Script d'installation officiel
curl -sO https://packages.wazuh.com/4.7/wazuh-install.sh
curl -sO https://packages.wazuh.com/4.7/config.yml
# Éditer config.yml
cat > config.yml << 'EOF'
nodes:
indexer:
- name: wazuh-indexer
ip: 127.0.0.1
server:
- name: wazuh-server
ip: 127.0.0.1
dashboard:
- name: wazuh-dashboard
ip: 127.0.0.1
EOF
# Installer
bash wazuh-install.sh -a
L'installation affiche les credentials admin à la fin.
3. Installation manuelle - Wazuh Indexer
Repository
rpm --import https://packages.wazuh.com/key/GPG-KEY-WAZUH
cat > /etc/yum.repos.d/wazuh.repo << 'EOF'
[wazuh]
gpgcheck=1
gpgkey=https://packages.wazuh.com/key/GPG-KEY-WAZUH
enabled=1
name=EL-$releasever - Wazuh
baseurl=https://packages.wazuh.com/4.x/yum/
protect=1
EOF
Installer l'indexer
dnf install -y wazuh-indexer
# Configurer
cat > /etc/wazuh-indexer/opensearch.yml << 'EOF'
network.host: 0.0.0.0
node.name: wazuh-indexer
cluster.initial_master_nodes:
- wazuh-indexer
cluster.name: wazuh-cluster
path.data: /var/lib/wazuh-indexer
path.logs: /var/log/wazuh-indexer
plugins.security.ssl.http.enabled: true
plugins.security.ssl.http.pemcert_filepath: /etc/wazuh-indexer/certs/wazuh-indexer.pem
plugins.security.ssl.http.pemkey_filepath: /etc/wazuh-indexer/certs/wazuh-indexer-key.pem
plugins.security.ssl.http.pemtrustedcas_filepath: /etc/wazuh-indexer/certs/root-ca.pem
plugins.security.ssl.transport.pemcert_filepath: /etc/wazuh-indexer/certs/wazuh-indexer.pem
plugins.security.ssl.transport.pemkey_filepath: /etc/wazuh-indexer/certs/wazuh-indexer-key.pem
plugins.security.ssl.transport.pemtrustedcas_filepath: /etc/wazuh-indexer/certs/root-ca.pem
plugins.security.ssl.transport.enforce_hostname_verification: false
plugins.security.authcz.admin_dn:
- "CN=admin,OU=Wazuh,O=Wazuh,L=California,C=US"
plugins.security.nodes_dn:
- "CN=wazuh-indexer,OU=Wazuh,O=Wazuh,L=California,C=US"
plugins.security.allow_default_init_securityindex: true
plugins.security.restapi.roles_enabled:
- "all_access"
- "security_rest_api_access"
compatibility.override_main_response_version: true
EOF
4. Installation Wazuh Manager
Configuration manager
5. Installation Wazuh Dashboard
dnf install -y wazuh-dashboard
# Configurer
cat > /etc/wazuh-dashboard/opensearch_dashboards.yml << 'EOF'
server.host: 0.0.0.0
server.port: 443
opensearch.hosts: ["https://127.0.0.1:9200"]
opensearch.ssl.verificationMode: certificate
opensearch.username: kibanaserver
opensearch.password: kibanaserver
opensearch.requestHeadersWhitelist: ["securitytenant","Authorization"]
opensearch_security.multitenancy.enabled: false
opensearch_security.readonly_mode.roles: ["kibana_read_only"]
server.ssl.enabled: true
server.ssl.key: "/etc/wazuh-dashboard/certs/wazuh-dashboard-key.pem"
server.ssl.certificate: "/etc/wazuh-dashboard/certs/wazuh-dashboard.pem"
uiSettings.overrides.defaultRoute: /app/wazuh
EOF
systemctl daemon-reload
systemctl enable --now wazuh-dashboard
6. Firewall
firewall-cmd --permanent --add-port=443/tcp # Dashboard
firewall-cmd --permanent --add-port=1514/tcp # Agent registration
firewall-cmd --permanent --add-port=1515/tcp # Agent communication
firewall-cmd --permanent --add-port=55000/tcp # API
firewall-cmd --permanent --add-port=9200/tcp # Indexer
firewall-cmd --reload
7. Accès Dashboard
- URL:
https://IP:443 - User:
admin - Password: (affiché à l'installation ou dans
/etc/wazuh-install-files/wazuh-passwords.txt)
8. Installer un agent
Sur le serveur à monitorer (Rocky/RHEL)
rpm --import https://packages.wazuh.com/key/GPG-KEY-WAZUH
cat > /etc/yum.repos.d/wazuh.repo << 'EOF'
[wazuh]
gpgcheck=1
gpgkey=https://packages.wazuh.com/key/GPG-KEY-WAZUH
enabled=1
name=EL-$releasever - Wazuh
baseurl=https://packages.wazuh.com/4.x/yum/
protect=1
EOF
WAZUH_MANAGER="wazuh.example.com" dnf install -y wazuh-agent
systemctl daemon-reload
systemctl enable --now wazuh-agent
Sur Debian/Ubuntu
curl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH | gpg --dearmor > /etc/apt/keyrings/wazuh.gpg
echo "deb [signed-by=/etc/apt/keyrings/wazuh.gpg] https://packages.wazuh.com/4.x/apt/ stable main" > /etc/apt/sources.list.d/wazuh.list
apt update
WAZUH_MANAGER="wazuh.example.com" apt install -y wazuh-agent
systemctl daemon-reload
systemctl enable --now wazuh-agent
9. File Integrity Monitoring (FIM)
Configurer sur l'agent
<!-- /var/ossec/etc/ossec.conf -->
<syscheck>
<disabled>no</disabled>
<frequency>43200</frequency>
<!-- Répertoires à surveiller -->
<directories check_all="yes" realtime="yes">/etc</directories>
<directories check_all="yes" realtime="yes">/usr/bin</directories>
<directories check_all="yes" realtime="yes">/usr/sbin</directories>
<directories check_all="yes" realtime="yes">/bin</directories>
<directories check_all="yes" realtime="yes">/sbin</directories>
<!-- Fichiers à ignorer -->
<ignore>/etc/mtab</ignore>
<ignore>/etc/hosts.deny</ignore>
<ignore>/etc/mail/statistics</ignore>
<!-- Registre Windows -->
<windows_registry>HKEY_LOCAL_MACHINE\Software</windows_registry>
</syscheck>
10. Vulnerability Detection
Activer sur le manager
<!-- /var/ossec/etc/ossec.conf -->
<vulnerability-detector>
<enabled>yes</enabled>
<interval>5m</interval>
<min_full_scan_interval>6h</min_full_scan_interval>
<run_on_start>yes</run_on_start>
<!-- Sources de vulnérabilités -->
<provider name="nvd">
<enabled>yes</enabled>
<update_interval>1h</update_interval>
</provider>
<provider name="redhat">
<enabled>yes</enabled>
<update_interval>1h</update_interval>
</provider>
<provider name="debian">
<enabled>yes</enabled>
<update_interval>1h</update_interval>
</provider>
</vulnerability-detector>
11. Active Response
Bloquer IP après attaque brute-force
<!-- /var/ossec/etc/ossec.conf sur le manager -->
<active-response>
<command>firewall-drop</command>
<location>local</location>
<rules_id>5710,5712</rules_id>
<timeout>3600</timeout>
</active-response>
Commande personnalisée
<command>
<name>custom-block</name>
<executable>custom-block.sh</executable>
<timeout_allowed>yes</timeout_allowed>
</command>
<active-response>
<command>custom-block</command>
<location>local</location>
<rules_id>100001</rules_id>
<timeout>600</timeout>
</active-response>
12. Règles personnalisées
Créer une règle
cat >> /var/ossec/etc/rules/local_rules.xml << 'EOF'
<group name="local,syslog,">
<rule id="100001" level="10">
<if_sid>5716</if_sid>
<srcip>!192.168.1.0/24</srcip>
<description>SSH brute force from external IP</description>
<group>authentication_failures,</group>
</rule>
<rule id="100002" level="12">
<if_sid>550</if_sid>
<match>passwd</match>
<description>Password file modified</description>
<group>syscheck,</group>
</rule>
</group>
EOF
# Vérifier la syntaxe
/var/ossec/bin/wazuh-logtest
systemctl restart wazuh-manager
13. Intégration SIEM
Envoyer les alertes vers Syslog
<!-- /var/ossec/etc/ossec.conf -->
<syslog_output>
<server>192.168.1.50</server>
<port>514</port>
<format>json</format>
</syslog_output>
Intégration Slack
<integration>
<name>slack</name>
<hook_url>https://hooks.slack.com/services/XXX/YYY/ZZZ</hook_url>
<level>10</level>
<alert_format>json</alert_format>
</integration>
14. API Wazuh
# Obtenir un token
TOKEN=$(curl -u wazuh:wazuh -k -X GET "https://localhost:55000/security/user/authenticate?raw=true")
# Lister les agents
curl -k -X GET "https://localhost:55000/agents" \
-H "Authorization: Bearer $TOKEN"
# Status du manager
curl -k -X GET "https://localhost:55000/manager/status" \
-H "Authorization: Bearer $TOKEN"
# Dernières alertes
curl -k -X GET "https://localhost:55000/alerts?limit=10" \
-H "Authorization: Bearer $TOKEN"
Commandes utiles
# Status services
systemctl status wazuh-manager
systemctl status wazuh-indexer
systemctl status wazuh-dashboard
# Logs
tail -f /var/ossec/logs/ossec.log
tail -f /var/ossec/logs/alerts/alerts.json
# Agents connectés
/var/ossec/bin/agent_control -l
# Redémarrer un agent
/var/ossec/bin/agent_control -R 001
# Vérifier règles
/var/ossec/bin/wazuh-logtest
Dépannage
# Vérifier la configuration
/var/ossec/bin/wazuh-control -t
# Statut cluster
curl -k -X GET "https://localhost:55000/cluster/status" \
-H "Authorization: Bearer $TOKEN"
# Agent non connecté
# Sur l'agent :
cat /var/ossec/etc/ossec.conf | grep address
systemctl restart wazuh-agent
Changelog
| Date | Modification |
|---|---|
| 2024-12 | Création initiale |