Mode opératoire — Envoyer les journaux d’une machine Windows vers un serveur syslog, avec Fluent Bit
Document autonome. Partie théorique, puis mise en œuvre telle qu’elle a été réalisée et vérifiée le 21/10/2026 sur
AD-Core-01(Windows Server 2025 Core) etposte-win11(Windows 11 Pro) — phase 14 du suivi, tâche 14.5. La méthode vaut pour toute machine Windows dont on veut centraliser les journaux. Le serveur de réception est décrit dans MO-15-Rsyslog-Galera.md. Contexte : Documentation-pfSense.md (étape 48.7).Valeurs masquées. Aucun mot de passe ici.
Dernière mise à jour : 01/11/2026 (§6.2 : deux filtres contre le bruit des comptes machine et des services)
Sommaire
| § | Contenu |
|---|---|
| 1 | Le besoin, et le choix de l’outil |
| 2 | Théorie : les journaux Windows et ce qu’on en garde |
| 3 | L’architecture retenue |
| 4 | Télécharger et vérifier |
| 5 | Vérifier le nom des champs avant d’écrire la configuration |
| 6 | La configuration |
| 7 | Le service Windows |
| 8 | Vérifier l’arrivée |
| 9 | Pièges et checklist |
1 · Le besoin, et le choix de l’outil
Les machines Linux et pfSense envoient leurs journaux en syslog. Windows ne sait pas le faire : ses journaux (l’« Observateur d’événements ») restent sur la machine. Il faut un agent, un petit service qui lit ces journaux et les envoie.
| Outil | Verdict |
|---|---|
| NXLog Community Edition | prévu au départ ; téléchargement réservé aux comptes connectés, authentification refusée (incident H-37) |
| Winlogbeat (Elastic) | n’envoie pas en syslog, seulement vers Elasticsearch/Logstash : hors sujet |
| Fluent Bit | libre (Apache 2.0), projet de la fondation CNCF, téléchargeable sans compte, empreintes publiées ; lit les journaux Windows et envoie en syslog TCP |
2 · Théorie : les journaux Windows et ce qu’on en garde
Windows range ses événements en canaux (Channels) — Security, System, Application… Chaque événement a un numéro (EventID) et un niveau
(1 critique, 2 erreur, 3 avertissement, 4 information ; 0 pour les audits de sécurité).
Un contrôleur de domaine écrit des milliers d’événements de sécurité par heure. On n’envoie donc qu’une sélection :
| Canal | Ce qu’on garde | Table d’arrivée |
|---|---|---|
| Security | 4624 / 4625 connexion réussie / échouée · 4634 fermeture · 4648 connexion avec d’autres identifiants · 4672 droits d’administrateur utilisés · 4720 à 4726 comptes créés, activés, modifiés, réinitialisés, désactivés, supprimés · 4728 / 4732 / 4756 ajout à un groupe · 4740 compte verrouillé · 4771 échec Kerberos · 1102 journal effacé | journaux_auth (6 mois) |
| System et Application | erreurs et avertissements (niveaux 1 à 3) | journaux (6 mois) |
Principe à retenir — on centralise ce qui sert à enquêter (qui s’est connecté, qui a changé quoi, qui a effacé) et ce qui casse (erreurs). Tout envoyer noierait l’information utile et remplirait la base.
3 · L’architecture retenue
AD-Core-01 (ADM, 10.0.30.10) ─────────────┐
├── syslog RFC 5424, TCP 514 ──► srv-supervision (10.0.30.15) ──► Galera
poste-win11 (USERS, 10.0.40.10) ─ pfSense ┘
règle USERS → SRV_SUPERVISION : PORTS_SYSLOG
| Élément | Valeur |
|---|---|
| Version | Fluent Bit 5.1.3, installeur .exe 64 bits |
| Dossier du programme | C:\Program Files\fluent-bit\ |
| Configuration | C:\ProgramData\fluent-bit\fluent-bit.conf + windows-vers-syslog.lua (copies de référence : scripts/supervision/windows/) |
| Service | fluent-bit, démarrage automatique, compte système |
| Pare-feu | AD : rien (même VLAN) · poste : règle USERS USERS subnets → SRV_SUPERVISION : PORTS_SYSLOG, en tête de l’onglet |
4 · Télécharger et vérifier
Contexte : PowerShell administrateur sur la machine Windows, qui a accès à Internet. Vérifier les droits :
([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)→True(pasIsInRole('Administrators'), faux sur un Windows en français — H-27).
1. Télécharger l’installeur .exe et comparer son empreinte à celle publiée dans la documentation officielle (page Installation → Windows) :
[Net.ServicePointManager]::SecurityProtocol='Tls12'; $f="$env:TEMP\fluent-bit-5.1.3-win64.exe"; Invoke-WebRequest "https://packages.fluentbit.io/windows/fluent-bit-5.1.3-win64.exe" -OutFile $f -UseBasicParsing; if ((Get-FileHash $f -Algorithm SHA256).Hash -eq '5B293C3AA4068DF8967F28CB57E14BF08461C465ABB84EAA035B719F34367D3E') { 'EMPREINTE CONFORME' } else { 'EMPREINTE DIFFERENTE : NE PAS INSTALLER' }
EMPREINTE CONFORME. Pour une autre version, reprendre l’empreinte sur la page officielle.
Pas le
.msi: aucune empreinte n’est publiée pour lui (son.sha256répond 404, incident H-36). On n’installe pas un fichier qu’on ne peut pas vérifier.
2. Installer sans question et préparer le dossier
Start-Process $f -ArgumentList '/S' -Wait; New-Item -ItemType Directory -Force C:\ProgramData\fluent-bit | Out-Null; Test-Path 'C:\Program Files\fluent-bit\bin\fluent-bit.exe'
True.
5 · Vérifier le nom des champs avant d’écrire la configuration
La documentation de l’entrée winevtlog ne liste pas les champs des événements. Plutôt que de les supposer, on les affiche :
& 'C:\Program Files\fluent-bit\bin\fluent-bit.exe' -i winevtlog -p channels=System -p read_existing_events=true -p "event_query=*[System[(Level=2 or Level=3)]]" -o stdout
Ctrl+C après 2 ou 3 secondes. Champs constatés le 21/10 :
{"ProviderName"=>"Service Control Manager", "EventID"=>7034, "Level"=>2, "Channel"=>"System",
"Computer"=>"AD-Core-01.sio.internal", "Message"=>"Le service OpenSSH SSH Server s'est terminé…", …}
Les accents s’affichent mal dans la console (
termin├®) : c’est l’affichage de la console, les données sont justes (vérifié en base, §8).
6 · La configuration
6.1 fluent-bit.conf
| Section | Rôle |
|---|---|
[INPUT] winevtlog Tag windows.securite | canal Security, filtré par Event_Query sur la liste d’EventID du §2 ; position de lecture gardée dans securite.sqlite |
[INPUT] winevtlog Tag windows.systeme | canaux System,Application, Level=1 or 2 or 3 ; position dans systeme.sqlite |
[FILTER] lua | le script de préparation (§6.2) |
[OUTPUT] syslog | Mode tcp, Syslog_Format rfc5424, Host 10.0.30.15, Port 514, Syslog_Maxsize 8000, Retry_Limit no_limits ; champs : hote → machine, ProviderName → programme, gravite, facilite, Message |
Sans Read_Existing_Events, Fluent Bit ne relit pas l’historique : seuls les nouveaux événements partent.
6.2 windows-vers-syslog.lua
| Transformation | Pourquoi |
|---|---|
| niveau Windows → gravité syslog (1→2, 2→3, 3→4, sinon 6) | « Erreur » vaut 3, comme sous Linux |
canal Security → catégorie 10 (authpriv) | il ira dans journaux_auth côté serveur, sans rien changer à rsyslog |
Computer → nom court (AD-Core-01) | même nom que dans Prometheus |
EventID nnnn : en tête du message | rechercher « tous les 4625 » facilement |
| retours à la ligne → espaces | les messages Windows font plusieurs lignes ; en syslog TCP, un retour à la ligne couperait le message en morceaux |
Les deux filtres contre le bruit (30/10 et 01/11)
La mesure sur 48 h (≈ 24 800 événements de sécurité par jour sur l’AD, 32 Mo) a montré que l’essentiel ne dit rien
d’utile : des ouvertures (4624), fermetures (4634) et privilèges (4672) faits par Windows pour lui-même. Le script
les écarte avant l’envoi (return -1 : l’enregistrement est jeté) :
| Filtre | Événements écartés | Comment le script le reconnaît | Effet mesuré |
|---|---|---|---|
| 1 | ceux des comptes machine | le compte de la « Nouvelle ouverture de session » finit par $ (AD-CORE-01$) | − 50 % |
| 2 | ceux du compte Système au démarrage d’un service | compte Système (ou SYSTEM) et type d’ouverture 5, ou événement 4672 | ≈ 10 % de plus ; plus aucun après le redémarrage de l’agent |
local bruit = { [4624] = true, [4634] = true, [4672] = true }
local systeme = { ["Syst\195\168me"] = true, ["SYSTEM"] = true } -- « Système » en UTF-8
Restent tous les échecs (4625), les 4648, les comptes humains, les créations de comptes, 4740 et 1102.
Deux pièges d’écriture : dans un message Windows français, l’espace avant les deux-points est souvent une espace insécable (octets
\194\160, H-54) ; et un 4624 cite deux comptes (le demandeur, puis la nouvelle session) : on lit celui qui suit « Nouvelle ouverture de session ».Filtrer à la source plutôt que dans la base : ce qui n’est pas envoyé ne coûte ni réseau, ni réplication, ni sauvegarde. On n’écarte que ce qu’on sait inutile, jamais un échec.
Après une modification du .lua, le recopier (§6.3), le valider (--dry-run) puis Restart-Service fluent-bit sur chaque machine Windows.
144-fluent-bit-filtre-deploye-windows.png : le second filtre déployé le 01/11 sur poste-win11 (en haut) et AD-Core-01 (en bas) : configuration test is successful, service Running.
6.3 Copier et valider
Depuis le PC (OpenSSH serveur actif sur les machines Windows du lab), dans annexes\scripts\supervision\windows :
scp fluent-bit.conf windows-vers-syslog.lua "<compte>@<adresse>:C:/ProgramData/fluent-bit/"
<compte> : Administrateur pour l’AD ; pour le poste, son compte local admin (ou l’administrateur du domaine sio\Administrateur).
Sur la machine :
& 'C:\Program Files\fluent-bit\bin\fluent-bit.exe' -c C:\ProgramData\fluent-bit\fluent-bit.conf --dry-run
configuration test is successful.
7 · Le service Windows
New-Service -Name fluent-bit -DisplayName 'Fluent Bit (journaux vers srv-supervision)' -BinaryPathName '"C:\Program Files\fluent-bit\bin\fluent-bit.exe" -c "C:\ProgramData\fluent-bit\fluent-bit.conf"' -StartupType Automatic | Out-Null; Start-Service fluent-bit; Start-Sleep 5; Get-Service fluent-bit | Format-Table Name, Status, StartType -AutoSize
fluent-bit Running Automatic. Le service tourne sous le compte système, seul autorisé à lire le journal Security.
8 · Vérifier l’arrivée
Sur srv-supervision, compte en lecture seule :
mariadb -h 127.0.0.1 -u grafana_lecture -p -e "SELECT hote, programme, COUNT(*) FROM syslog.journaux_auth WHERE hote IN ('AD-Core-01','poste-win11') GROUP BY hote, programme;"
sur un contrôleur de domaine, des événements Microsoft-Windows-Security-Auditing arrivent en une minute, messages EventID 4624 : L'ouverture de session…, accents lisibles.
Un poste au repos peut ne rien produire de la sélection pendant longtemps. Provoquer un événement à coup sûr :
eventcreate /T ERROR /ID 999 /L APPLICATION /SO TestSupervision /D "Test : journal Windows vers srv-supervision"
mariadb -h 127.0.0.1 -u grafana_lecture -p -e "SELECT recu_le, hote, programme, gravite, LEFT(message,100) FROM syslog.journaux WHERE message LIKE '%journal Windows vers%' ORDER BY id DESC LIMIT 3;"
poste-win11 | TestSupervision | 3 | EventID 999 : Test : … (validé le 21/10).
Volume : l’AD a envoyé ~800 événements de sécurité en quelques minutes, surtout son compte machine (
AD-CORE-01$). Mesuré sur 48 h, puis réduit par les filtres du §6.2.
9 · Pièges et checklist
| Piège | Symptôme | Où c’est documenté |
|---|---|---|
.msi sans empreinte | 404 sur le .sha256 | H-36 |
| NXLog CE sous compte | téléchargement impossible | H-37 |
| Test d’administrateur par nom de groupe | False sur un Windows français | H-27 |
scp lancé depuis C:\WINDOWS\system32 | stat local … No such file | §6.3 : se placer dans le dossier des fichiers |
admin-win11 pris pour un compte | connexion refusée | c’est le nom de l’identifiant Termix ; le compte local s’appelle admin |
| Poste silencieux | rien en base | §8 : eventcreate |
| Compte illisible dans le message | filtre sans effet | espace insécable : H-54 |
PowerShell administrateur (test par WindowsBuiltInRole)
.exe téléchargé, EMPREINTE CONFORME, installé en /S
Champs vérifiés par l'essai stdout
fluent-bit.conf + .lua dans C:\ProgramData\fluent-bit ; --dry-run successful
Service fluent-bit Running / Automatic
Poste en zone USERS : règle pfSense PORTS_SYSLOG en tête
Arrivée vérifiée en base (eventcreate pour un poste calme)
La règle à retenir en une phrase : un agent vérifié, une sélection d’événements utiles, un message par ligne — et Windows rejoint les autres dans la même base.



