Installation Wazuh sur Debian
Mettre à jour la machine et installer les paquets : curl, gnupg, apt-transport-https et net-tools
apt update && apt upgrade -y && apt install curl gnupg apt-transport-https net-tools -y
Récupérer la clé GPG pour accéder aux dépôts Wazuh
curl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH | gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/wazuh.gpg --import && chmod 644 /usr/share/keyrings/wazuh.gpg
Ajout du dépôt Wazuh
echo "deb [signed-by=/usr/share/keyrings/wazuh.gpg] https://packages.wazuh.com/4.x/apt/ stable main" | tee -a /etc/apt/sources.list.d/wazuh.list
Téléchargement du script wazuh-certs-tool.sh et du fichier de configuration config.yml
curl -sO https://packages.wazuh.com/4.10/wazuh-certs-tool.sh && curl -sO https://packages.wazuh.com/4.10/config.yml
Modification du fichier ./config.yml
PS: Nous pouvons laisser par défaut les « name » mais il faut obligatoirement changer les « ip »
nodes :
# Wazuh indexer nodes
indexer:
- name: node-1
ip: "<indexer-node-ip>"
#- name: node-2
# ip: "<indexer-node-ip>"
#- name: node-3
# ip: "<indexer-node-ip>"
# Wazuh server nodes
# If there is more than one Wazuh server
# node, each one must have a node_type
server:
- name: wazuh-1
ip: "<wazuh-manager-ip>"
# node_type: master
#- name: wazuh-1
# ip: "<wazuh-manager-ip>"
# node_type: worker
#- name: wazuh-1
# ip: "<wazuh-manager-ip>"
# node_type: worker
# Wazuh dashboard nodes
dashboard:
- name: dashboard
ip: "<dashboard-node-ip>"
Exécuter le script wazuh-certs-tool.sh pour créer un dossier wazuh-certificates dans le répertoire courant et les certificats par défaut (admin.pem, admin-key.pem, root-ca.pem, etc…) (clé de chiffrement)
bash ./wazuh-certs-tool.sh -A
tar -cvf ./wazuh-certificates.tar -C ./wazuh-certificates/ .
rm -rf ./wazuh-certificates
Installation des paquets, Wazuh-indexer, Wazuh-manager et Wazuh-dashboard
apt install wazuh-indexer wazuh-manager wazuh-dashboard
Wazuh-Indexer
Modifier le fichier de configuration /etc/wazuh-indexer/opensearch.yml pour paramétrer l’indexer
network.host: "{Indexer IP}"
node.name: "node-1"
cluster.initial_master_nodes:
- "node-1"
#- "node-2"
#- "node-3"
cluster.name: "wazuh-cluster"
#discovery.seed_hosts:
# - "node-1-ip"
# - "node-2-ip"
# - "node-3-ip"
node.max_local_storage_nodes: "3"
path.data: /var/lib/wazuh-indexer
path.logs: /var/log/wazuh-indexer
plugins.security.ssl.http.pemcert_filepath: /etc/wazuh-indexer/certs/indexer.pem
plugins.security.ssl.http.pemkey_filepath: /etc/wazuh-indexer/certs/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/indexer.pem
plugins.security.ssl.transport.pemkey_filepath: /etc/wazuh-indexer/certs/indexer-key.pem
plugins.security.ssl.transport.pemtrustedcas_filepath: /etc/wazuh-indexer/certs/root-ca.pem
plugins.security.ssl.http.enabled: true
plugins.security.ssl.transport.enforce_hostname_verification: false
plugins.security.ssl.transport.resolve_hostname: false
plugins.security.authcz.admin_dn:
- "CN=admin,OU=Wazuh,O=Wazuh,L=California,C=US"
plugins.security.check_snapshot_restore_write_privileges: true
plugins.security.enable_snapshot_restore_privilege: true
plugins.security.nodes_dn:
- "CN=node-1,OU=Wazuh,O=Wazuh,L=California,C=US"
#- "CN=node-2,OU=Wazuh,O=Wazuh,L=California,C=US"
#- "CN=node-3,OU=Wazuh,O=Wazuh,L=California,C=US"
plugins.security.restapi.roles_enabled:
- "all_access"
- "security_rest_api_access"
plugins.security.system_indices.enabled: true
plugins.security.system_indices.indices: [".plugins-ml-model", ".plugins-ml-task", ".opendistro-alerting-config", ".opendistro-alerting-alert*",
### Option to allow Filebeat-oss 7.10.2 to work ###
compatibility.override_main_response_version: true
PS : Changer l’IP de l’indexer et si le name de l’indexer est différent dans ./config.yml, alors changer à tous les endroits où est mentionné « node-1 » par le nom donné
À changer :
Tous les endroits où est mentionné node-1 (si vous avez changé le name de l’Indexer dans ./config.yml):
- node.name
- cluster.initial_master_nodes
- plugins.security.nodes_dn
L’adresse IP
- Network.host
Déployez les certificats de l’Indexer
NODE_NAME=node-1
mkdir /etc/wazuh-indexer/certs
tar -xf ./wazuh-certificates.tar -C /etc/wazuh-indexer/certs/ ./$NODE_NAME.pem ./$NODE_NAME-key.pem ./admin.pem ./admin-key.pem ./root-ca.pem
mv -n /etc/wazuh-indexer/certs/$NODE_NAME.pem /etc/wazuh-indexer/certs/indexer.pem
mv -n /etc/wazuh-indexer/certs/$NODE_NAME-key.pem /etc/wazuh-indexer/certs/indexer-key.pem
chmod 500 /etc/wazuh-indexer/certs
chmod 400 /etc/wazuh-indexer/certs/*
chown -R wazuh-indexer:wazuh-indexer /etc/wazuh-indexer/certs
PS: Remplacer node-1 par le nom de votre Indexer si vous l’avez changé dans ./config.yml
Activation et démarrage du service wazuh-indexer
systemctl daemon-reload
systemctl enable wazuh-indexer
systemctl start wazuh-indexer
Initiation du cluster et des certificats SSL/TLS
/usr/share/wazuh-indexer/bin/indexer-security-init.sh
Ce script configure les paramètres de sécurité de l’indexer Wazuh, notamment en activant l’authentification et le contrôle d’accès :
- Génération de certificats
- Configuration de l’authentification
- Mise en place du contrôle d’accès
- Démarrage des services
Pour tester le cluster, on peut utiliser cette commande :
curl -k -u admin:admin https://192.168.1.1:9200
ou celle-ci
curl -k -u admin:admin https://192.168.1.1:9200/_cat/nodes?v
Wazuh-Manager
Modification de /var/ossec/etc/ossec.conf
<!--
Wazuh - Manager - Default configuration for debian 12
More info at: https://documentation.wazuh.com
Mailing list: https://groups.google.com/forum/#!forum/wazuh
-->
<ossec_config>
<global>
<jsonout_output>yes</jsonout_output>
<alerts_log>yes</alerts_log>
<logall>yes</logall>
<logall_json>yes</logall_json>
<email_notification>no</email_notification>
<smtp_server>smtp.example.wazuh.com</smtp_server>
<email_from>wazuh@example.wazuh.com</email_from>
<email_to>recipient@example.wazuh.com</email_to>
<email_maxperhour>12</email_maxperhour>
<email_log_source>alerts.log</email_log_source>
<agents_disconnection_time>10m</agents_disconnection_time>
<agents_disconnection_alert_time>0</agents_disconnection_alert_time>
<update_check>yes</update_check>
</global>
Comme moi, activer ses paramètres en y mettant « yes« , cela permettra de recevoir plusieurs autres types de logs, compatibles syslog:
- jsonout_output (yes)
- alerts_log (yes)
- logall (yes)
- logalljson (yes)
<remote>
<connection>secure</connection>
<port>1514</port>
<protocol>tcp</protocol>
<queue_size>131072</queue_size>
</remote>
<!-- Configuration des inputs TCP et UDP -->
<remote>
<connection>syslog</connection>
<port>514</port>
<protocol>tcp</protocol>
<allowed-ips>0.0.0.0/0</allowed-ips>
<local_ip>"{Indexer IP}"</local_ip>
</remote>
<remote>
<connection>syslog</connection>
<port>514</port>
<protocol>udp</protocol>
<allowed-ips>0.0.0.0/0</allowed-ips>
<local_ip>"{Indexer IP}"</local_ip>
</remote>
<!-- Configuration des logs -->
<logging>
<log_format>syslog</log_format>
<prefix>$(hostname) </prefix>
</logging>
Mettre ceci à la suite de la balise <remote> (premier block de code), permet d’activer la réception des données syslog depuis des appareils réseaux
<indexer>
<enabled>yes</enabled>
<hosts>
<host>https://{Indexer IP}:9200</host>
</hosts>
<ssl>
<certificate_authorities>
<ca>/etc/filebeat/certs/root-ca.pem</ca>
</certificate_authorities>
<certificate>/etc/filebeat/certs/filebeat.pem</certificate>
<key>/etc/filebeat/certs/filebeat-key.pem</key>
</ssl>
</indexer>
Activation et démarrage du service wazuh-manager
systemctl daemon-reload
systemctl enable wazuh-manager
systemctl start wazuh-manager
systemctl status wazuh-manager
Filebeat
Installation du paquet Filebeat
apt install filebeat -y
Téléchargement du fichier de configuration par défaut de Filebeat pour fonctionner avec Wazuh
curl -so /etc/filebeat/filebeat.yml https://packages.wazuh.com/4.10/tpl/wazuh/filebeat/filebeat.yml
# Wazuh - Filebeat configuration file
output.elasticsearch:
hosts: ["{Mettre l'IP de l'Indexer}:9200"]
protocol: https
username: ${username}
password: ${password}
ssl.certificate_authorities:
- /etc/filebeat/certs/root-ca.pem
ssl.certificate: "/etc/filebeat/certs/filebeat.pem"
ssl.key: "/etc/filebeat/certs/filebeat-key.pem"
setup.template.json.enabled: true
setup.template.json.path: '/etc/filebeat/wazuh-template.json'
setup.template.json.name: 'wazuh'
setup.ilm.overwrite: true
setup.ilm.enabled: false
filebeat.modules:
- module: wazuh
alerts:
enabled: true
archives:
enabled: true
logging.level: info
logging.to_files: true
logging.files:
path: /var/log/filebeat
name: filebeat
keepfiles: 7
permissions: 0644
logging.metrics.enabled: false
seccomp:
default_action: allow
syscalls:
- action: allow
names:
- rseq
PS: Ici j’active les archives, ainsi j’active la possibilité d’afficher les archives et d’afficher les logs venant d’appareils compatibles au syslog, sur mon dashboard Wazuh (Optionnel). Et enfin, je change l’IP de l’hosts dans output.elasticsearch. Enlever les crochets ({})
Créer un filebeat keystore (pour stocker les identifiants de connexion)
filebeat keystore create
Renseigner un nom d’utilisateur et un mot de passe (qui te servira à te connecter au dashboard plus tard)
Ajout d’un utilisateur et d’un mot de passe (pour l’exemple l’utilisateur sera admin et le mot de passe sera admin)
echo admin | filebeat keystore add username --stdin --force
echo admin | filebeat keystore add password --stdin --force
Téléchargement d’un template d’alerte pour Wazuh et lui attribuer les droits de lecture
curl -so /etc/filebeat/wazuh-template.json https://raw.githubusercontent.com/wazuh/wazuh/v4.10.0/extensions/elasticsearch/7.x/wazuh-template.json
chmod go+r /etc/filebeat/wazuh-template.json
Installation des modules supplémentaires Filebeat + Extraction de l’archive avec tar
curl -s https://packages.wazuh.com/4.x/filebeat/wazuh-filebeat-0.4.tar.gz | tar -xvz -C /usr/share/filebeat/module
Déploiement des certificats pour Filebeat
NODE_NAME=node-1
mkdir /etc/filebeat/certs
tar -xf ./wazuh-certificates.tar -C /etc/filebeat/certs/ ./$NODE_NAME.pem ./$NODE_NAME-key.pem ./root-ca.pem
mv -n /etc/filebeat/certs/$NODE_NAME.pem /etc/filebeat/certs/filebeat.pem
mv -n /etc/filebeat/certs/$NODE_NAME-key.pem /etc/filebeat/certs/filebeat-key.pem
chmod 500 /etc/filebeat/certs
chmod 400 /etc/filebeat/certs/*
chown -R root:root /etc/filebeat/certs
PS: Renseigner le nom de l’indexer à la place de « node-1«
Activation et démarrage du service Filebeat
systemctl daemon-reload
systemctl enable filebeat
systemctl start filebeat
Test de la configuration Filebeat
filebeat test output
Wazuh-dashboard
Modification du fichier de configuration du wazuh-dashboard
server.host: 0.0.0.0
server.port: 443
opensearch.hosts: https://{Indexer IP}:9200
opensearch.ssl.verificationMode: certificate
#opensearch.username:
#opensearch.password:
opensearch.requestHeadersWhitelist: ["securitytenant","Authorization"]
opensearch_security.multitenancy.enabled: false
opensearch_security.readonly_mode.roles: ["kibana_read_only"]
opensearch.ssl.enabled: true
server.ssl.key: "/etc/wazuh-dashboard/certs/dashboard-key.pem"
server.ssl.certificate: "/etc/wazuh-dashboard/certs/dashboard.pem"
server.ssl.certificateAuthorities: ["/etc/wazuh-dashboard/certs/root-ca.pem"]
uiSettings.overrides.defaultRoute: /app/wz-home
Déploiement des certificats du dashboard Wazuh
NODE_NAME=node-1
mkdir /etc/wazuh-dashboard/certs
tar -xf ./wazuh-certificates.tar -C /etc/wazuh-dashboard/certs/ ./$NODE_NAME.pem ./$NODE_NAME-key.pem ./root-ca.pem
mv -n /etc/wazuh-dashboard/certs/$NODE_NAME.pem /etc/wazuh-dashboard/certs/dashboard.pem
mv -n /etc/wazuh-dashboard/certs/$NODE_NAME-key.pem /etc/wazuh-dashboard/certs/dashboard-key.pem
chmod 500 /etc/wazuh-dashboard/certs
chmod 400 /etc/wazuh-dashboard/certs/*
chown -R wazuh-dashboard:wazuh-dashboard /etc/wazuh-dashboard/certs
PS: Renseigner le nom de l’indexer à la place de « node-1«
Activation et démarrage du service wazuh-dashboard
systemctl daemon-reload
systemctl enable wazuh-dashboard
systemctl start wazuh-dashboard
Modification du fichier /usr/share/wazuh-dashboard/data/wazuh/config/wazuh.yml
hosts:
- default:
url: https://{Dashboard IP}
port: 55000
username: wazuh-wui
password: wazuh-wui
run_as: false