11/12/2024

CybersécuritéSystème

Envoyer les logs Windows vers Graylog avec NXLog

I. Présentation

Dans ce tutoriel, nous allons apprendre à installer et à configurer NXLog sur Windows Server, de façon à envoyer les journaux de Windows vers un serveur Graylog. Ainsi, les journaux stockés dans l'Observateur d'événements de plusieurs machines Windows pourront être stocké et indexé dans Graylog.

Pour suivre ce tutoriel, vous avez besoin d'un serveur Graylog et d'une machine sous Windows Server (ou Windows). Pour rappel, dans un précédent article, nous avions appris à installer Graylog sur Debian :

Par défaut, Windows n'est pas capable d'envoyer ses journaux vers un serveur Graylog (ou équivalent) puisque les fonctions de transferts de journaux sont très limitées. Pour répondre à cette problématique, nous allons utiliser l'agent NXLog dans sa version communautaire. Il va permettre de capturer les journaux sur la machine Windows afin de les router vers le serveur Graylog.

II. Créer un input NXLog dans Graylog

La première étape consiste à créer un nouvel "Input" dans la configuration de Graylog, car les données sont reçues de cette façon. À partir de l'interface web de Graylog, cliquez sur le menu "Système" puis sur "Inputs". Ensuite, sélectionnez "GELF UDP" dans la liste, puis cliquez sur "Launch new input".

Note : GELF (Graylog Extended Log Format) correspond au format de log de Graylog et ils seront transmis via le protocole UDP.

Une fenêtre apparaît à l'écran... Vous devez configurer ce nouvel Input. Vous pouvez utiliser un Input par typologie de machines : un Input peut être utilisé par plusieurs machines Windows. Nommez cet Input, par exemple "Graylog_UDP_NXLogs_Windows", et indiquez "0.0.0.0" comme "Bind address" pour qu'il soit accessible sur toutes les interfaces de l'hôte Graylog (à ajuster si vous avez plusieurs interfaces). Nous pouvons constater que la connexion sera effectuée sur le port 12201.

Validez. Vous aurez alors une sortie similaire à celle ci-dessous.

La configuration de Graylog est terminée, la suite va se passer du côté de l'hôte Windows.

III. Installer et configurer NXLog sur Windows

A. Installer NXLog sur Windows Server

Connectez-vous à la machine Windows, sous Windows Server 2025 et nommée "SRV-ADDS-01" pour ma part, et commencez par télécharger l'agent NXLog. Nous prendrons la version communautaire, car elle gratuite. Elle ne dispose pas de toutes les fonctionnalités de la version Enterprise, mais elle est déjà très complète.

Cliquez sur le lien suivant :

Puis, sélectionnez "Windows", cochez la case "Windowz x86-64" et lancez le téléchargement.

Sur votre machine Windows, lancez l'installation via le package "nxlog-ce-3.2.2329.msi". Suivez l'assistant et effectuez l'installation... La configuration s'effectuera par la suite. Puisqu'il s'agit d'un package MSI, nous pourrions le déployer facilement sur un ensemble de machines pour automatiser l'installation.

B. Configurer NXLog pour Graylog

NXLog étant installé sur la machine, nous pouvons éditer son fichier de configuration situé à l'emplacement suivant :

C:\Program Files\nxlog\conf\nxlog.conf

En complément de la configuration déjà présente dans le fichier "nxlog.conf", vous devez ajouter ces lignes à la fin :

# Récupérer les journaux de l'observateur d'événements
<Input in>
    Module      im_msvistalog
</Input>

# Déclarer le serveur Graylog (selon input)
<Extension gelf>
    Module        xm_gelf
</Extension>

<Output graylog_udp>
    Module        om_udp
    Host          192.168.10.220
    Port	  12201
    OutputType    GELF_UDP
</Output>

# Routage des flux in vers out
 <Route 1>
     Path        in => graylog_udp
 </Route>

Quelques explications s'imposent pour vous aider à comprendre :

  • im_msvistalog : il s'agit du module déclaré comme entrée (Input) pour récupérer les journaux dans l'Observateur d'événements de Windows, compatible à partir de Windows Server 2008 et Windows Vista. Il est toujours compatible avec les dernières versions, à savoir Windows 11 et Windows Server 2025. Pour les versions antérieures à Windows Server 2008, utilisez le module "im_mseventlog".
  • om_udp : il s'agit du module déclaré comme sortie (Output graylog_udp). Dans ce bloc, vous devez modifier l'adresse IP, car elle correspond au serveur Graylog (192.168.10.220) et éventuellement le port. Nous utilisons le type de sortie "GELF_UDP" pour rester cohérent vis-à-vis de l'Input déclaré dans Graylog.
  • Route 1 : il s'agit d'une règle « de routage » dans NXLog pour prendre ce qui correspond à l'Input "in" (les logs Windows) et les envoyer vers la sortie "graylog_udp", à savoir notre Graylog.

Sauvegardez les changements et redémarrez le service NXLog à partir d'une console PowerShell ouverte en tant qu'administrateur (ou via la console Services).

Restart-Service nxlog

J'en profite pour évoquer le fichier de log de NXLog puisqu'il pourra vous aider si votre configuration ne fonctionne pas. Par exemple, si vous ne recevez pas de logs sur Graylog...

C:\Program Files\nxlog\data\nxlog.log

C. Affiner les règles de collecte de NXLog

Par défaut, NXLog va envoyer tous les événements de tous les journaux de Windows vers notre puits de logs Graylog. Il est possible d'affiner la configuration de NXLog, de façon très précise, pour envoyer les events de certains journaux uniquement ou ceux correspondants à certains critères.

Pour cela, vous pouvez regarder ce lien :

Voici un exemple, où nous venons modifier l'Input dans la configuration de NXLog pour transmettre à Graylog uniquement les événements du journal "Sécurité".

<Input in>
    Module      im_msvistalog
    <QueryXML>
        <QueryList>
            <Query Id='1'>
                <Select Path='Security'>*</Select>
            </Query>
        </QueryList>
    </QueryXML>
</Input>

IV. Recevoir les journaux Windows dans Graylog

Suite à la configuration de Graylog et de l'agent NXLog sur la machine Windows, les journaux doivent désormais être envoyés vers Graylog ! Pour le vérifier, cliquez simplement sur "Search" dans le menu de Graylog.

Vous devriez voir de premiers journaux arriver, ce qui aura pour effet de faire un pic de logs. Je vous recommande de cliquer sur le bouton mis en évidence sur l'image ci-dessous pour rafraichir la liste automatiquement toutes les 5 secondes (par défaut).

Si vous cliquez sur un log dans la liste, vous pouvez visualiser son contenu. Cela revient à consulter le journal à partir de l'Observateur d'événements de Windows.

Les journaux étant stockés et indexés dans Graylog, la puissance de l'outil réside dans sa fonction de recherche. Vous pouvez rédiger un filtre dans la zone de saisie située à droite de la loupe.

Par exemple, voici comment filtrer les événements pour afficher uniquement ceux dont l'ID est 4776 ou 4771. Ceci permet d'identifier les tentatives de connexion infructueuses sur un ou plusieurs serveurs. Pour que ces événements soient générés, vous devez ajuster la stratégie d'audit de Windows, comme nous l'avions évoqués dans cet article :

Voici un exemple de résultat obtenu avec cette requête :

En cliquant sur le bouton "Save" situé sur la droite, vous pouvez enregistrer votre requête pour la retrouver plus facilement.

Dans le cas où plusieurs machines enverraient des logs à Graylog, vous pouvez préciser le nom de la machine si vous souhaitez analyser les journaux d'une machine en particulier. Par exemple, pour cibler le serveur "srv-adds-01.it-connect.local" :

(EventID:4776 OR EventID:4771) AND source:srv\-adds\-01.it\-connect.local

Remarque : vous devez précéder d'un caractère anti-slash les caractères suivants : & | : \ / + - ! ( ) { } [ ] ^ " ~ * ?

Pour en savoir plus sur la syntaxe des requêtes, voici le lien vers la documentation :

V. Déployer NXLog sur Windows avec une GPO

Il existe plusieurs façons de déployer l'agent NXLog et sa configuration sur plusieurs machines. Au-delà de la méthode par stratégie de groupe (GPO) que nous allons évoquer, il est possible d'utiliser Intune ou d'autres solutions comme Ansible et Puppet.

L'installation de NXLog repose sur deux éléments : le paquet d'installation MSI qui représente l'application en elle-même et le fichier de configuration en ".conf" permettant de configurer l'envoi de logs vers Graylog. Nous devons donc installer l'application et copier la configuration.

Pour installer NXLog par GPO, il est possible d'utiliser une GPO de type "Installation de logiciel". Dans ce cas, il convient de faire une GPO pour installer l'agent, et quand il sera installé, il faut activer une autre GPO pour pousser la configuration. J'ai remarqué que si le fichier de configuration était poussé avant l'installation, celle-ci ne se passait pas correctement...

La méthode retenue et évoquée dans cet article repose sur l'utilisation d'un script PowerShell. Il va effectuer l'installation de NXLog, copier le(s) fichier(s) de configuration (car il peut y en avoir plusieurs) et redémarrer le service pour appliquer les changements.

A. Le répertoire nxlog.d

L'agent NXLog s'appuie sur un fichier de configuration principal nommé tout simplement "nxlog.conf" et situé dans le répertoire "conf" de l'agent. Dans ce répertoire nommé "conf", il y a un autre répertoire, vide, intitulé "nxlog.d". Il est destiné à charger d'autres fichiers de configuration !

Le fichier de configuration par défaut est configuré pour charger les fichiers ".conf" stocké dans ce répertoire grâce à ces deux lignes :

define CONFDIR  %ROOT%\conf\nxlog.d
include %CONFDIR%\\*.conf

Cela signifie que vous pouvez créer plusieurs configurations différentes (selon vos besoins, selon les rôles des serveurs, etc...) et copier vos fichiers de configuration dans le répertoire "nxlog.d". Grâce à ce mécanisme, la configuration est beaucoup plus flexible.

Dans cet exemple, le fichier "windows.conf" sera copié collé par GPO vers le répertoire "nxlog.d". Il contient uniquement ce contenu (qui n'est plus utile dans le fichier de config principal) :

# Récupérer les journaux de l'observateur d'événements
<Input in>
    Module      im_msvistalog
    <QueryXML>
        <QueryList>
            <Query Id='1'>
                <Select Path='Security'>*</Select>
            </Query>
        </QueryList>
    </QueryXML>
</Input>

# Déclarer le serveur Graylog (selon input)
<Extension gelf>
    Module        xm_gelf
</Extension>

<Output graylog_udp>
    Module        om_udp
    Host          192.168.10.220
    Port	  12201
    OutputType    GELF_UDP
</Output>

# Routage des flux in vers out
 <Route 1>
     Path        in => graylog_udp
 </Route>

B. Les sources d'installation

Vous devez centraliser les sources d'installation sur un partage accessible par les machines de votre domaine Active Directory. Dans cet exemple, le partage "NETLOGON" (du SYSVOL) sera utilisé. À cet exemple, se situe le package MSI, le fichier de configuration "windows.conf" et le script PowerShell nommé "Install-NXLog.ps1".

Voici le contenu :

C. Le script PowerShell pour installer NXLog

Ci-dessous, le code du script PowerShell qui sera utilisé pour effectuer l'installation de l'agent NXLog sur les machines Windows. Bien que le code soit indiqué dans le corps de l'article, je vous invite à le récupérer directement depuis notre GitHub.

function Install-NXLog {
  param (
    [Parameter(Mandatory=$true)][string] $MsiPath,
    [Parameter(Mandatory=$true)][string] $ConfigPath
  )

  $NXLogConfigPath = "C:\Program Files\nxlog\conf\nxlog.d"
  $NXLogExePath = "C:\Program Files\nxlog\nxlog.exe"

  if ((Test-Path $MsiPath) -and (-not (Test-Path $NXLogExePath))) {
    & msiexec.exe /quiet /i $MsiPath
    Start-Sleep -Seconds 30
  }

  if ((Test-Path $ConfigPath) -and (Test-Path $NXLogConfigPath)){

    Get-ChildItem -Path $ConfigPath -Filter "*.conf" | Foreach{
        Copy-Item $_.FullName -Destination $NXLogConfigPath -Force
    }
  }

  $NXLogService = (Get-Service -Name nxlog -ErrorAction SilentlyContinue)
  if ($NXLogService) {
        Restart-Service -InputObject $NXLogService
  }
}

Install-NXLog   -MsiPath "\\it-connect.local\NETLOGON\NXLog\nxlog-ce-3.2.2329.msi" `
                -ConfigPath "\\it-connect.local\NETLOGON\NXLog"

Ce script va effectuer les actions suivantes :

  • Installer l'application NXLog, une seule fois, car on vérifie la présence du fichier "nxlog.exe" sur la machine avant de l'installer.
  • Copier les fichiers de configuration du répertoire source (-ConfigPath) vers le répertoire "nxlog.d" de l'agent NXLog, à chaque exécution du script. Ce qui peut vous permettre de rajouter des fichiers dans le temps.
  • Redémarrer le service nxlog pour charger les fichiers de configuration.

Vous pourriez aussi utiliser ce script uniquement pour faire l'installation et utiliser une GPO de Préférences pour copier les fichiers de configuration. Ceci présenterait l'avantage d'utiliser le ciblage pour copier un fichier de configuration selon un ou plusieurs critères. Par exemple, uniquement sur les machines qui appartiennent à un groupe de sécurité spécifique.

D. Créer la GPO pour NXLog

À partir de la console de "Gestion de stratégie de groupe", créez une nouvelle stratégie de groupe et liez cette GPO à vos OU, en fonction de vos besoins. Ici, la GPO s'appelle "Installer et configurer NXLog" et elle sera liée aux unités d'organisation nommées "Domain Controllers" et "Serveurs".

Ensuite, modifiez la GPO, et ajoutez un nouveau script PowerShell de démarrage :

1 - Accédez à l'emplacement suivant : Configuration ordinateur > Paramètres Windows > Scripts (démarrage/arrêt) > Démarrage

2 - Cliquez sur l'onglet "Scripts PowerShell"

3 - Cliquez sur le bouton "Ajouter"

4 - Ajoutez votre script en veillant à préciser un chemin réseau (chemin UNC)

5 - Validez.

Pour ma part, le chemin réseau pour accéder au script est :

\\it-connect.local\SysVol\it-connect.local\scripts\NXLog\Install-NXLog.ps1

E. Tester la configuration

Il ne reste plus qu'à tester sur une machine ! Un "gpupdate" et un redémarrage s'imposent...

L'agent NXLog a bien été installé et le fichier de configuration a été copié ! C'est une bonne nouvelle.

Du côté de Graylog, il y a aussi du nouveau, puisque de nouvelles machines Windows Server transmettent leurs journaux.

VI. Conclusion

Grâce à ce tutoriel, vous devriez être en mesure d'installer et configurer NXLog sur Windows pour envoyer vos logs vers le puits de logs Graylog ! En environnement Active Directory, vous pouvez aussi vous inspirer de ce tutoriel pour déployer NXLog sur plusieurs serveurs et/ou postes de travail.

Pour aller plus loin, sachez que vous pouvez coupler l'utilisation de Graylog et NXLog avec Sysmon pour enrichir les journaux de Windows et ainsi avoir des remontées encore plus pertinentes dans Graylog. Dans ce cas, la configuration de Graylog et NXLog est identique, mais Sysmon va générer des événements supplémentaires. Il va aussi ajouter des informations complémentaires, dont les identifiants TTP du MITRE pour faire le lien entre un événement et une action - potentiellement - malveillante.

Pour en savoir plus sur Sysmon, lisez ces deux articles :

Dans le prochain tutoriel Graylog, nous verrons comment envoyer les journaux de Linux vers Graylog.

author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

2 commentaires sur “Envoyer les logs Windows vers Graylog avec NXLog

  • Bonjour,

    Merci pour ce tutoriel très utile !
    Je travaille actuellement sur ce sujet et me demande si vous avez une solution permettant à Windows de générer des logs pour les modifications de fichiers (édition, suppression, déplacement, etc.). J’ai testé quelques solutions payantes très bien comme Netwrix Auditor ou File Audit, mais je souhaiterais savoir s’il existe une alternative gratuite.

    Je vous remercie !

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.