Qu’est-ce que NXLog ?
NXLog est un collecteur de logs multi-plateforme. Il permet de lire les journaux d’événements Windows (et bien d’autres sources) pour les envoyer vers un SIEM comme Graylog, Splunk ou Elasticsearch.
On utilise ici la version Community Edition (gratuite), qui couvre largement les besoins d’un SI de PME.
Pourquoi NXLog plutôt que Winlogbeat ?
Les deux font le travail, mais NXLog a quelques avantages dans un contexte Windows :
- Filtrage des événements côté agent (on n’envoie que ce qui est utile)
- Support natif du format GELF (Graylog Extended Log Format)
- Faible consommation de ressources
- Configuration lisible et centralisable
Installation
Télécharger l’installeur MSI depuis le site officiel : https://nxlog.co/downloads/nxlog-ce
L’installation par défaut place NXLog dans :
C:\Program Files (x86)\nxlog
Le fichier de configuration principal est :
C:\Program Files (x86)\nxlog\conf\nxlog.conf
Après installation, le service nxlog est créé mais pas encore démarré.
Structure du fichier de configuration
Le fichier nxlog.conf suit toujours la même logique :
define ROOT C:\Program Files (x86)\nxlog
define LOGDIR %ROOT%\data
define LOGFILE %LOGDIR%\nxlog.log
LogFile %LOGFILE%
Moduledir %ROOT%\modules
CacheDir %ROOT%\data
Pidfile %ROOT%\data\nxlog.pid
SpoolDir %ROOT%\data
Ensuite on déclare des blocs :
- Extension : modules de transformation (GELF, JSON, etc.)
- Input : sources de logs à lire
- Output : destinations où envoyer les logs
- Route : liaison entre les Input et les Output
Exemple minimal
<Extension _gelf>
Module xm_gelf
</Extension>
<Input in_system>
Module im_msvistalog
Query <QueryList>\
<Query Id="0">\
<Select Path="System">*</Select>\
</Query>\
</QueryList>
</Input>
<Output out_gelf>
Module om_tcp
Host log02.hmsfr.local
Port 12201
OutputType GELF_TCP
</Output>
<Route r>
Path in_system => out_gelf
</Route>
Ce bloc lit le journal System et l’envoie en GELF sur TCP vers Graylog.
Les modules essentiels
im_msvistalog
C’est le module de lecture des journaux Windows (Vista et ultérieur). Il utilise les requêtes XPath pour sélectionner un channel :
<Input in_security>
Module im_msvistalog
Query <QueryList>\
<Query Id="0">\
<Select Path="Security">*</Select>\
</Query>\
</QueryList>
ReadFromLast TRUE
SavePos TRUE
</Input>
- ReadFromLast TRUE : à la reprise du service, on ne relit pas tout le journal depuis le début
- SavePos TRUE : la position de lecture est sauvegardée sur disque
xm_gelf
Le module d’extension pour le format GELF. Il transforme les champs NXLog en message GELF compatible Graylog.
om_tcp / om_ssl
Le module de sortie TCP. Pour un envoi chiffré, on utilisera om_ssl avec les certificats appropriés.
Filtrage avec Exec
La directive Exec permet d’exécuter du code dans un bloc Input ou Output. C’est ce qu’on utilise pour filtrer les EventID :
Exec if not defined($EventID) drop();
Exec $keep = ( \
$EventID == 4624 or $EventID == 4625 \
);
Exec if $keep != TRUE drop();
On peut aussi ajouter des champs personnalisés dans le bloc Output :
Exec $gl_role = "dc01";
Exec $gl_env = "prod";
Ces champs seront disponibles comme champs GELF dans Graylog pour le filtrage et les dashboards.
Démarrage et vérification
Après avoir modifié le fichier de configuration :
PS> Restart-Service nxlog
PS> Get-Service nxlog
En cas d’erreur, consulter le log NXLog :
PS> Get-Content "C:\Program Files (x86)\nxlog\data\nxlog.log" -Tail 50
Les erreurs de syntaxe dans nxlog.conf empêchent le démarrage du service. NXLog est strict sur le parsing : un or manquant ou un backslash oublié en fin de ligne suffit à provoquer une erreur.
La suite
NXLog est installé et on comprend la structure de la configuration. Dans les articles suivants, on va voir les configurations complètes pour un contrôleur de domaine Active Directory et pour un serveur membre.