Introduccion
En la parte 1 configuramos rsyslog para recibir logs en el puerto 514. Ahora vamos a organizar esos logs en ficheros separados segun su origen, en lugar de mezclarlos todos en /var/log/syslog.
Esto es util cuando tienes varios dispositivos enviando logs (NAS, routers, switches) y quieres tenerlos organizados para analizarlos mejor.
Video: Equipos sin Agente (2/2)
10 minutos - Templates, filtros IF y ossec.conf
Ver en el Curso WazuhAccede al video completo con el curso de Wazuh
Configuracion completa del rsyslog.conf
Edita el archivo de configuracion:
nano /etc/rsyslog.conf Anade la siguiente configuracion al final del archivo:
# DEBUG temporal (para ver que variables tiene cada log)
$template DebugFormat,"%TIMESTAMP:::date-rfc3339% DEBUG: fromhost=[%fromhost%] fromhost-ip=[%fromhost-ip%] hostname=[%hostname%] msg=[%msg%]\n"
$template DebugLogs,"/var/log/remote/debug.log"
# Template para logs remotos con timestamp y hostname
$template RemoteStoreAll,"/var/log/remote/all.log"
$template NASLogs,"/var/log/remote/nas.log"
$template LogFormat,"%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag% %msg%\n"
# Procesar solo logs remotos (no locales)
if $fromhost-ip != '127.0.0.1' then {
# DEBUG TEMPORAL (descomenta para ver las variables)
# ?DebugLogs;DebugFormat
# Primero: Filtrar logs que contengan "NAS:" en el mensaje
if $msg contains "NAS:" then {
?NASLogs;LogFormat
stop
}
# Segundo: Todo lo demas va a all.log
?RemoteStoreAll;LogFormat
stop
} Explicacion de los Templates
Los templates en rsyslog definen donde y como se guardan los logs:
Template de ruta (donde guardar)
$template NASLogs,"/var/log/remote/nas.log"
Define que los logs que usen este template se guardaran en /var/log/remote/nas.log.
Template de formato (como guardar)
$template LogFormat,"%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag% %msg%\n" Define el formato de cada linea del log. Las variables disponibles son:
%fromhost%- Hostname del equipo que envia el log%fromhost-ip%- IP del equipo que envia el log%hostname%- Hostname incluido en el mensaje syslog%msg%- Contenido del mensaje%syslogtag%- Tag/programa que genera el log%TIMESTAMP:::date-rfc3339%- Timestamp en formato ISO 8601
Explicacion del IF (filtros condicionales)
La estructura del IF en rsyslog permite filtrar logs segun condiciones:
# Solo procesar logs que NO vengan de localhost (logs remotos)
if $fromhost-ip != '127.0.0.1' then {
# Si el mensaje contiene "NAS:"
if $msg contains "NAS:" then {
?NASLogs;LogFormat # Guarda en /var/log/remote/nas.log usando LogFormat
stop # Para de procesar este log (no sigue a mas reglas)
}
# Si no coincide con ningun filtro anterior, va aqui
?RemoteStoreAll;LogFormat # Guarda en /var/log/remote/all.log
stop
} Importante: El stop es crucial. Evita que el log se procese por mas reglas y no se duplique en varios ficheros.
Sintaxis de la escritura
?NASLogs;LogFormat
Esto significa: "Escribe en el fichero definido por NASLogs usando el formato definido por LogFormat".
Crear el directorio para los logs
Antes de reiniciar rsyslog, crea el directorio donde se guardaran los logs:
# Crear directorio
mkdir -p /var/log/remote
# Asignar permisos al usuario syslog
chown syslog:adm /var/log/remote Anadir los ficheros al ossec.conf
Para que Wazuh monitorice estos nuevos ficheros de log, edita el archivo de configuracion del agente:
nano /var/ossec/etc/ossec.conf
Anade las siguientes secciones localfile dentro del bloque <ossec_config>:
<!-- Logs del NAS -->
<localfile>
<log_format>syslog</log_format>
<location>/var/log/remote/nas.log</location>
</localfile>
<!-- Todos los logs remotos -->
<localfile>
<log_format>syslog</log_format>
<location>/var/log/remote/all.log</location>
</localfile> Flujo completo:
- El dispositivo (NAS, router, etc.) envia logs al puerto 514
- rsyslog los recibe y los filtra segun las reglas IF
- Los logs se escriben en ficheros separados (
/var/log/remote/nas.log, etc.) - El agente Wazuh monitoriza esos ficheros (configurados en
localfile) - Los logs se envian al servidor Wazuh para su analisis
Reiniciar los servicios
Despues de modificar la configuracion, reinicia ambos servicios:
# Reiniciar rsyslog para aplicar la nueva configuracion
systemctl restart rsyslog
# Reiniciar el agente Wazuh para que lea los nuevos ficheros
systemctl restart wazuh-agent
# Verificar que ambos servicios estan funcionando
systemctl status rsyslog
systemctl status wazuh-agent Verificar que funciona
# Ver logs del NAS en tiempo real
tail -f /var/log/remote/nas.log
# Ver todos los logs remotos
tail -f /var/log/remote/all.log
# Ver el debug (si lo tienes habilitado)
tail -f /var/log/remote/debug.log
# Verificar que rsyslog escucha en el puerto 514
ss -ulnp | grep 514 Ejemplo: Anadir mas filtros
Puedes anadir mas filtros para organizar logs de otros dispositivos:
# Templates adicionales
$template RouterLogs,"/var/log/remote/router.log"
$template SwitchLogs,"/var/log/remote/switch.log"
$template FirewallLogs,"/var/log/remote/firewall.log"
if $fromhost-ip != '127.0.0.1' then {
# Filtrar por IP del dispositivo
if $fromhost-ip == '192.168.1.1' then {
?RouterLogs;LogFormat
stop
}
# Filtrar por contenido del mensaje
if $msg contains "SWITCH:" then {
?SwitchLogs;LogFormat
stop
}
# Filtrar por hostname
if $hostname == 'pfsense' then {
?FirewallLogs;LogFormat
stop
}
# El resto va a all.log
?RemoteStoreAll;LogFormat
stop
} Recursos adicionales
- Parte 1: Configurar Syslog Collector
- Documentacion oficial: rsyslog Templates
- Wazuh: Log Data Collection
Articulos relacionados:
- Equipos sin Agente: Configurar Syslog Collector (1/2)
- Configuracion de Grupos en Wazuh
- Como Instalar el Agente Wazuh en Linux
- Que es Wazuh y para que sirve?
Aprende Wazuh de forma practica
Este articulo es parte del contenido del curso. Aprende a configurar syslog, crear reglas personalizadas, integrar con otras herramientas y mucho mas.