Enviar registros de Windows a Graylog con NXLog
Table of Contents
I. Introducción
En este tutorial, aprenderemos a instalar y configurar NXLog en Windows Server, para enviar los logs de Windows a un servidor Graylog. De esta forma, los logs almacenados en el Visor de Eventos de varias máquinas Windows pueden ser almacenados e indexados en Graylog.
Para seguir este tutorial, necesitas un servidor Graylog y una máquina con Windows Server (o Windows). Como recordatorio, en un artículo anterior, aprendimos a instalar Graylog en Debian :
Por defecto, Windows es incapaz de enviar sus logs a un servidor Graylog (o equivalente), ya que las funciones de transferencia de logs son muy limitadas. Para resolver este problema, vamos a utilizar la versión comunitaria del agente NXLog. Este capturará los logs en la máquina Windows y los enviará al servidor Graylog.
II. Creación de una entrada NXLog en Graylog
El primer paso es crear una nueva "Entrada" en la configuración de Graylog, ya que así es como se reciben los datos. Desde la interfaz web de Graylog, haz clic en el menú "Sistema" y luego en "Entradas". Selecciona"GELF UDP" de la lista y haz clic en "Lanzar nueva entrada".

Nota : GELF (Graylog Extended Log Format) corresponde al formato de registro Graylog y se transmitirá a través del protocolo UDP.
Aparece una ventana en la pantalla... Debe configurar esta nueva Entrada. Puede utilizar una Entrada para cada tipo de máquina: una Entrada puede ser utilizada por varias máquinas Windows. Nombra esta Entrada, por ejemplo "Graylog_UDP_NXLogs_Windows", y especifica "0.0.0.0" como "Bind address" para que pueda ser accedida en todas las interfaces del host Graylog (ajusta si tienes varias interfaces). Podemos ver que la conexión se realizará en el puerto 12201.

Confirme. Verá un resultado similar al siguiente.

Ahora que la configuración de Graylog está completa, pasaremos al host Windows.
III. Instalación y configuración de NXLog en Windows
A. Instalación de NXLog en Windows Server
Conéctate a la máquina Windows, ejecutando Windows Server 2025 y llamada "SRV-ADDS-01" en mi caso, y empieza descargando el agente NXLog. Tomaremos la versión Community, ya que es gratuita. No tiene todas las características de la versión Enterprise, pero ya es muy completa.
Haga clic en el siguiente enlace:
A continuación, seleccione "Windows", marque la casilla "Windowz x86-64" e inicie la descarga.

En su equipo Windows, ejecute la instalación a través del paquete "nxlog-ce-3.2.2329.msi". Siga el asistente y complete la instalación... A continuación se procederá a la configuración. Al tratarse de un paquete MSI, podemos desplegarlo fácilmente en un conjunto de máquinas para automatizar la instalación.

B. Configuración de NXLog para Graylog
Ahora que NXLog está instalado en la máquina, podemos editar su archivo de configuración que se encuentra en la siguiente ubicación:
C:\Program Files\nxlog\conf\nxlog.conf
Además de la configuración ya presente en el archivo "nxlog.conf", debe añadir estas líneas al final:
# Retrieve event viewer logs
<Input in>
Module im_msvistalog
</Input>
# Declare Graylog server (according to input)
<Extension gelf>
Module xm_gelf
</Extension>
<Output graylog_udp>
Module om_udp
Host 192.168.10.220
Port 12201
OutputType GELF_UDP
</Output>
# Routing flows in to out
<Route 1>
Path in => graylog_udp
</Route>
Para ayudarle a entenderlo, conviene dar algunas explicaciones:
- im_msvistalog: es el módulo declarado como Input para recuperar logs del Visor de Sucesos de Windows, compatible con Windows Server 2008 y Windows Vista. Sigue siendo compatible con las últimas versiones, es decir, Windows 11 y Windows Server 2025. Para versiones anteriores a Windows Server 2008, utilice el módulo "im_mseventlog".
- om_udp: es el módulo declarado como salida(Output graylog_udp). En este bloque hay que modificar la dirección IP, como corresponde al servidor Graylog(192.168.10.220), y opcionalmente el puerto. Utilizamos el tipo de salida "GELF_UDP" para mantener la coherencia con la entrada declarada en Graylog.
- Ruta 1: esta es una regla de "enrutamiento" en NXLog para tomar lo que corresponde a Input"in"(logs de Windows) y enviarlos a Output "graylog_udp", es decir, nuestro Graylog.
Guarde los cambios y reinicie el servicio NXLog desde una consola PowerShell abierta como administrador (o a través de la consola Servicios).
Restart-Service nxlog
Me gustaría aprovechar esta oportunidad para mencionar el archivo de registro NXLog, que puede ayudarte si tu configuración no está funcionando. Por ejemplo, si no recibes ningún log en Graylog...
C:\Program Files\nxlog\data\nxlog.log
C. Perfeccionar las reglas de recogida de NXLog
Por defecto, NXLog enviará todos los eventos de todos los registros de Windows a nuestro sumidero de registro Graylog. Puedes ajustar la configuración de NXLog para enviar eventos de ciertos registros solamente, o aquellos que coincidan con ciertos criterios.
Para ello, siga este enlace:
He aquí un ejemplo, donde modificamos la Entrada en la configuración de NXLog para transmitir sólo eventos de registro de "Seguridad" a Graylog.
<Input in>
Module im_msvistalog
<QueryXML>
<QueryList>
<Query Id='1'>
<Select Path='Security'>*</Select>
</Query>
</QueryList>
</QueryXML>
</Input>
IV. Recepción de registros de Windows en Graylog
Después de configurar Graylog y el agente NXLog en la máquina Windows, ¡los logs deberían enviarse ahora a Graylog! Para comprobarlo, simplemente haz clic en "Search" en el menú de Graylog.
Debería ver llegar los primeros registros, lo que provocará un pico de registros. Le recomiendo que haga clic en el botón resaltado en la imagen de abajo para actualizar la lista automáticamente cada 5 segundos (por defecto).

Si hace clic en un registro de la lista, podrá ver su contenido. Esto equivale a ver el registro desde el Visor de sucesos de Windows.

Como los registros se almacenan e indexan en Graylog, la potencia de la herramienta reside en su función de búsqueda. Puedes introducir un filtro en el cuadro de entrada situado a la derecha de la lupa.
Por ejemplo, aquí se muestra cómo filtrar eventos para mostrar sólo aquellos con ID 4776 o 4771. Esto identifica intentos de conexión fallidos en uno o más servidores. Para que se generen estos eventos, es necesario ajustar la estrategia de auditoría de Windows.
He aquí un ejemplo de los resultados obtenidos con esta consulta:

Haciendo clic en el botón "Save" de la derecha, puede guardar su consulta para recuperarla más fácilmente.
En caso de que varias máquinas envíen registros a Graylog, puede especificar el nombre de la máquina si desea analizar los registros de una máquina concreta. Por ejemplo, para apuntar al servidor "srv-adds-01.it-connect.local":
(EventID:4776 OR EventID:4771) AND source:srv-adds-01.it-connect.local
Nota : los caracteres siguientes deben ir precedidos de una barra invertida: ¡& | : / + - ! ( ) { } [ ] ^ " ~ * ?
Para saber más sobre la sintaxis de las consultas, aquí tienes un enlace a la documentación:
V. Despliegue de NXLog en Windows con un GPO
Hay varias maneras de desplegar el agente NXLog y su configuración en múltiples máquinas. Además del método de organización de directivas de grupo (GPO ) que veremos a continuación, también puedes utilizar Intune u otras soluciones como Ansible y Puppet.
La instalación de NXLog se basa en dos elementos: el paquete de instalación MSI, que representa la aplicación en sí, y el archivo de configuración ".conf", que configura el envío de logs a Graylog. Por tanto, debemos instalar la aplicación y copiar la configuración.
Para instalar NXLog mediante GPO, es posible utilizar un GPO de tipo "Instalación de software". En este caso, se debe configurar una GPO para instalar el agente, y cuando esté instalado, se debe activar otra GPO para empujar la configuración. He observado que si el fichero de configuración se empuja antes de la instalación, no funciona correctamente....

El método elegido y descrito en este artículo se basa en el uso de un script de PowerShell. Instalará NXLog, copiará el archivo o archivos de configuración (ya que puede haber varios) y reiniciará el servicio para aplicar los cambios.
A. El directorio nxlog.d
El agente NXLog se basa en un archivo de configuración principal llamado simplemente "nxlog.conf", ubicado en el directorio "conf" del agente. Dentro de este directorio "conf ", hay otro directorio vacío llamado "nxlog.d". Está pensado para cargar otros ficheros de configuración.
El archivo de configuración por defecto está configurado para cargar los archivos ".conf" almacenados en este directorio utilizando estas dos líneas:
define CONFDIR %ROOT%\conf\nxlog.d
include %CONFDIR%\\*.conf
Esto significa que puede crear varias configuraciones diferentes (en función de sus necesidades, roles de servidor, etc.) y copiar sus archivos de configuración en el directorio "nxlog.d". Este mecanismo hace que la configuración sea mucho más flexible.
En este ejemplo, el archivo "windows.conf" será copiado y pegado por GPO en el directorio "nxlog.d". Contiene sólo este contenido (que ya no es útil en el archivo de configuración principal):
# Retrieve event viewer logs
<Input in>
Module im_msvistalog
<QueryXML>
<QueryList>
<Query Id='1'>
<Select Path='Security'>*</Select>
</Query>
</QueryList>
</QueryXML>
</Input>
# Declare Graylog server (according to input)
<Extension gelf>
Module xm_gelf
</Extension>
<Output graylog_udp>
Module om_udp
Host 192.168.10.220
Port 12201
OutputType GELF_UDP
</Output>
# Routing flows in to out
<Route 1>
Path in => graylog_udp
</Route>
B. Fuentes de instalación
Es necesario centralizar los orígenes de la instalación en un recurso compartido accesible por las máquinas de su dominio Active Directory. En este ejemplo, se utilizará el recurso compartido "NETLOGON" (de SYSVOL). En este ejemplo, encontrarás el paquete MSI, el archivo de configuración "windows.conf" y el script PowerShell llamado "Install-NXLog.ps1".
Aquí están los contenidos:

C. Script PowerShell para instalar NXLog
A continuación se muestra el código del script PowerShell que se utilizará para instalar el agente NXLog en máquinas Windows. Aunque el código se indica en el cuerpo del artículo, te invito a recuperarlo directamente de nuestro GitHub.

function Install-NXLog {
param (
[Parameter(Mandatory=$true)][string] $MsiPath,
[Parameter(Mandatory=$true)][string] $ConfigPath
)
$NXLogConfigPath = "C:Program Filesnxlogconfnxlog.d"
$NXLogExePath = "C:Program Filesnxlognxlog.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"
Este script realizará las siguientes acciones:
- Instale la aplicación NXLog, una sola vez, ya que comprobamos la presencia del archivo "nxlog.exe " en la máquina antes de instalarlo.
- Copia los archivos de configuración del directorio de origen (-ConfigPath) al directorio "nxlog.d" del agente NXLog, cada vez que se ejecute el script. Esto puede permitir añadir archivos con el tiempo.
- Reinicie el servicio nxlog para cargar los archivos de configuración.
Alternativamente, podría utilizar este script sólo para realizar la instalación y utilizar un GPO de Preferencias para copiar los archivos de configuración. Esto tendría la ventaja de utilizar la orientación para copiar un archivo de configuración de acuerdo con uno o más criterios. Por ejemplo, sólo en máquinas pertenecientes a un grupo de seguridad específico.
D. Crear GPO para NXLog
Desde la consola de "Administración de Políticas de Grupo", crea una nueva Política de Grupo y enlaza esta GPO a tus OUs según sea necesario. En este caso, la GPO se llama "Instalar y configurar NXLog" y se vinculará a las unidades organizativas denominadas "Controladores de dominio" y "Servidores".

A continuación, modifique el GPO y añada un nuevo script de inicio PowerShell :
1 - Vaya a la siguiente ubicación: Configuración del ordenador > Configuración de Windows > Scripts (inicio/parada) > Inicio
2 - Haga clic en la pestaña "Scripts PowerShell".
3 - Haga clic en el botón "Añadir
4 - Añada su script, asegurándose de especificar una ruta de red (ruta UNC)
5 - Confirmar.

Por mi parte, la ruta de red para acceder al script es :
\\it-connect.local\SysVol\it-connect.local\scripts\NXLog\Install-NXLog.ps1
E. Configuración de la prueba
Sólo queda probarlo en una máquina. Un "gpupdate" y un reinicio están en orden...
¡El agente NXLog ha sido instalado y el archivo de configuración ha sido copiado! Esto es una gran noticia.

También hay noticias de Graylog, ya que las nuevas máquinas Windows Server están transmitiendo sus registros.

VI. Conclusión
Gracias a este tutorial, deberías ser capaz de instalary configurar NXLog en Windows para enviar tus logs al sumidero de logs de Graylog . En un entorno Active Directory, también puedes utilizar este tutorial para desplegar NXLog en varios servidores y/o estaciones de trabajo.
Para ir un paso más allá, puede combinar el uso de Graylog y NXLog con Sysmon para enriquecer los registros de Windows y proporcionar información aún más relevante a Graylog. En este caso, la configuración de Graylog y NXLog es idéntica, pero Sysmon generará eventos adicionales. También añadirá información adicional, incluidos los identificadores TTP de MITRE, para vincular un evento a una acción -potencialmente- maliciosa.
En el siguiente tutorial de Graylog, veremos cómo enviar logs desde Linux a Graylog.