Skip to main content

NXLog : installation et présentation

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.