Les règles Wazuh personnalisées s'écrivent en XML dans /var/ossec/etc/rules/local_rules.xml. Chaque règle définit un ID unique (au-dessus de 100000), le niveau de gravité, le champ du journal qui doit correspondre et la description de l'alerte que vous verrez dans le dashboard.
Comment créer des règles Wazuh personnalisées étape par étape ?
Les règles personnalisées dans Wazuh permettent de détecter des schémas précis dans vos journaux et de déclencher des alertes lorsque certaines conditions sont remplies. Dans cet article, nous voyons des exemples pratiques avec des journaux NAS : détecter l'accès à des dossiers, des utilisateurs précis et des actions comme Delete ou Write.
À quoi ressemble la structure de base d'une règle ?
Les règles Wazuh sont définies dans des fichiers XML sous /var/ossec/etc/rules/. Par défaut, Wazuh fournit environ 3 000 règles intégrées utilisant des ID inférieurs à 100000 : chaque règle personnalisée que vous écrivez doit donc utiliser un ID de 100000 ou plus pour survivre aux futures mises à jour. La structure de base est :
<rule id="100071" level="10">
<if_sid>100070</if_sid>
<field name="campo">valor</field>
<description>Descripción de la alerta</description>
</rule> Composants :
id: identifiant unique de la règle (100000+ pour les règles personnalisées)level: gravité de l'alerte (0-15)if_sid: règle parente dont elle hérite (le décodeur)field: champ extrait par le décodeur à évaluerdescription: texte de l'alerte qui apparaît dans le dashboard
Comment détecter l'accès à un dossier précis ?
Journal d'entrée :
NAS: Users: marialopez, Source IP: 192.168.1.100, Computer name: MariaPC, Connection type: SMB, Accessed resources: Dpto_direccion/Certificados/CertificadoDigital.pfc, Action: Write Règle :
<rule id="100071" level="10">
<if_sid>100070</if_sid>
<field name="resource">Dpto_direccion</field>
<description>Acceso a carpeta Direccion en NAS</description>
</rule> Comment ça fonctionne :
- Hérite de la règle 100070 (le décodeur NAS générique)
- Filtre sur le champ
resourcequi contient « Dpto_direccion » - Déclenche une alerte de niveau 10 chaque fois qu'un utilisateur accède à ce dossier
Comment faire correspondre un utilisateur et une action précis ensemble ?
Journal d'entrée :
NAS: Users: Juan, Source IP: 192.168.1.100, Computer name: MariaPC, Connection type: SMB, Accessed resources: sdsds/Certificados/CertificadoDigital.pfc, Action: Delete Règle :
<rule id="100072" level="10">
<if_sid>100070</if_sid>
<field name="srcusernas">Juan</field>
<field name="actionNas">Delete</field>
<description>El usuario Juan ha eliminado un fichero</description>
</rule> Comment ça fonctionne :
- Utilise deux champs pour plus de précision
- Ne se déclenche que si l'utilisateur est « Juan » ET l'action est « Delete »
- Utile pour auditer les actions d'utilisateurs précis
Comment utiliser des variables dynamiques pour l'IP et l'action ?
Journal d'entrée :
NAS: Users: marialopez, Source IP: 192.168.1.155, Computer name: MariaPC, Connection type: SMB, Accessed resources: sdsds/Certificados/CertificadoDigital.pfc, Action: Write Règle :
<rule id="100073" level="10">
<if_sid>100070</if_sid>
<field name="srcipNas">192.168.1.155</field>
<field name="actionNas">Write</field>
<description>El equipo con la IP $(srcipNas) ha modificado el fichero $(resource)</description>
</rule> Comment ça fonctionne :
- Filtre sur une IP source précise + l'action Write
- Utilise des variables dynamiques
$(field)dans la description - L'alerte inclura les valeurs réelles du journal : IP et ressource concernée
Résumé de la syntaxe
| Élément | Utilisation |
if_sid | Hérite d'une règle parente (décodeur) |
field name="x" | Filtre sur un champ extrait par le décodeur |
$(field) | Variable dynamique dans la description |
level | Gravité : 0-3 info, 4-7 moyen, 8-15 critique |
Où ajouter les règles et comment les appliquer ?
Les règles personnalisées s'ajoutent dans /var/ossec/etc/rules/local_rules.xml. Après avoir modifié le fichier, redémarrez le manager :
systemctl restart wazuh-manager Étapes suivantes
Créer des décodeurs personnalisés pour extraire les champs dont vous avez besoin fait partie d'un déploiement Wazuh complet. Un décodeur transforme une ligne de journal brute en champs nommés comme resource, srcusernas ou actionNas, et ce n'est qu'ensuite qu'une règle comme celles ci-dessus peut filtrer dessus. Dans un projet d'audit NAS typique, nous associons un décodeur à cinq à dix règles ciblées afin que les dossiers à forte valeur, les utilisateurs privilégiés et les actions destructrices aient chacun leur propre niveau de gravité, ce qui maintient un bon rapport signal/bruit dans le dashboard. Découvrez nos services Wazuh.
Questions fréquentes
Où sont stockées les règles Wazuh personnalisées ?
Les règles personnalisées se trouvent dans /var/ossec/etc/rules/local_rules.xml sur le manager Wazuh. Après avoir modifié le fichier, vous devez redémarrer le service avec systemctl restart wazuh-manager pour que les changements prennent effet.
Quelle plage d'ID de règle utiliser pour les règles personnalisées ?
Wazuh réserve les ID inférieurs à 100000 pour son jeu de règles intégré (environ 3 000 règles fournies par défaut). Attribuez toujours à vos propres règles un ID de 100000 ou plus pour éviter les collisions avec les futures mises à jour des règles officielles.
Que signifie l'attribut level dans une règle Wazuh ?
Le level définit la gravité de l'alerte de 0 à 15 : 0-3 est informatif, 4-7 est moyen, et 8-15 est critique. Par défaut, Wazuh n'envoie des alertes par e-mail qu'à partir du niveau 7, donc le level contrôle aussi quels événements déclenchent des notifications.
Comment faire correspondre plus d'un champ dans une seule règle ?
Ajoutez plusieurs balises <field name="..."> dans le même bloc <rule>. Toutes doivent correspondre pour que la règle se déclenche, ce qui fonctionne comme un ET logique, par exemple pour un utilisateur précis et l'action Delete en même temps.
Que sont les variables dynamiques dans la description d'une règle Wazuh ?
Les variables dynamiques utilisent la syntaxe $(field) à l'intérieur de la balise <description>. Wazuh les remplace par la valeur réelle extraite par le décodeur, de sorte que l'alerte affiche l'IP source ou la ressource concernée au lieu d'un texte statique.