Centralizar logs de auditoría de Pandora FMS con Rsyslog
Introducción
Este tema describe cómo reenviar un log o registro de Pandora FMS a través de Rsyslog, en realidad funcionaría para cualquier log del servidor, más acá se centra en los logs de Pandora FMS.
Concretamente, para este ejemplo, el log de auditoría de la Consola web de Pandora FMS ubicado en:
/var/www/html/pandora_console/log/audit.log
Desde un servidor en producción a un receptor Rsyslog dedicado, usando imfile (cola de fichero) en el lado del emisor e imtcp con una plantilla omfile en el lado del receptor. Exactamente es el resultado de una ejecución real extremo a extremo sobre Rocky Linux 9 (Rsyslog 8.2506.0 en el emisor y 8.2510.0 en el receptor).
Para este log lo primero a realizar es activar la escritura de log de auditoría de Pandora FMS en la Consola web. Por defecto está desactivada y para activarla se debe seguir los siguientes pasos:
- Ir a Management → Settings → System Settings → General Setup → Security y luego activar la opción Enable audit log.
- Guardar los cambios con el botón Update.
Topología
En algunas herramientas de recolección de logs ya existe un colector dedicado “escuchando” por Syslog, por lo que es innecesario configurar un receptor adicional en el lado opuesto.
Para este ejemplo se realiza la configuración desde cero sin asumir que se tenga alguna herramienta de recolección de logs ya configurada.
Servidores y configuración
Ambos servidores están configurados con Rocky Linux versión 9.7 y con una instalación mínima.
El servidor de la Consola web tiene instalado el entorno de Pandora FMS usando el script de instalación.
| Host | Dirección IP | Rol |
|---|---|---|
rsyslog-receiver | 10.0.0.1 | Receptor Rsyslog |
pandora-console | 10.0.0.2 | Emisor Rsyslog + Consola web Pandora FMS |
Transporte: TCP 10514. El 514 es el puerto canónico de Syslog; en este ejemplo se utiliza el 10514 para mostrar cómo cambiar el destino cuando el puerto por defecto no es viable. Esta elección mantiene el procedimiento reproducible en una instalación limpia, el cambio a 514 para producción es de solamente una línea de configuración.
Descripción del proceso
El log de auditoría es un fichero de texto plano al que la Consola PHP añade líneas en cada acción administrativa. El objetivo es enviar cada nueva línea a un host separado sin modificar el código de la Consola. El pipeline tiene tres etapas:
Pandora FMS Console --append--> /var/www/html/pandora_console/log/audit.log
|
| imfile (polling, 10s)
v
rsyslog, pandora-console
(ruleset RemoteAuditFwd)
|
| omfwd / TCP 10514
v
rsyslog, rsyslog-receiver
(ruleset RemoteAudit)
|
v
/var/log/received/pandora-audit.log
Decisiones de diseño clave:
imfilees la herramienta adecuada para hacer tail de un fichero de aplicación sin depender de que la aplicación escriba a Syslog. Guarda la posición de lectura en un state file, así que los reinicios de Rsyslog no reenvían histórico.- Un
rulesetdedicadoRemoteAuditFwden el emisor es obligatorio. Si la acciónomfwdse declara a nivel raíz de la configuración de Rsyslog, se aplica a todos los mensajes del ruleset principal — es decir, a todo el journal (CROND, mensajes internos dersyslogd, etcétera) y “contamina” el receptor. Enlazar la entradaimfilea su propio ruleset es la forma más limpia de enviar únicamente las líneas de auditoría. - Un
ruleset,RemoteAuditen el receptor con un template de tipo string usado como nombre de fichero de salida (dynaFile) produce un único fichero predecible, para este ejemplo, en/var/log/received/y deja intacto el Syslog local del receptor. - TCP sobre UDP: Las líneas de auditoría son pequeñas pero no deben descartarse en silencio; un breve reinicio del receptor hará que Rsyslog las almacene en buffer y reenvíe con las instrucciones
action.resumeRetryCount=-1yqueue.saveonshutdown=on.
Receptor: `rsyslog-receiver`
Instalar Rsyslog
En la mayoría de las instalaciones de Rocky Linux, Rsyslog ya viene instalado por defecto. En caso de ser una instalación mínima que no lo tenga, el comando para instalar es:
# --- On rsyslog-receiver (10.0.0.1) --- dnf install -y rsyslog
Configuración de Rsyslog
Crear /etc/rsyslog.d/10-remote-audit.conf con el siguiente contenido:
- 10-remote-audit.conf
# Receiver: accept audit logs forwarded on TCP port 10514 and # store them in a single file under /var/log/received/. module(load="imtcp") template(name="PandoraAudit" type="string" string="/var/log/received/pandora-audit.log" ) ruleset(name="RemoteAudit") { action(type="omfile" dynaFile="PandoraAudit") } input(type="imtcp" port="10514" ruleset="RemoteAudit")
Qué hace cada bloque:
module(load=“imtcp”)habilita el receptor Syslog por TCP. Usarimudpsi se prefiere UDP; TCP es lo recomendado para datos de auditoría.- El
templatede tipo stringPandoraAuditdefine la ruta del fichero de salida. ruleset(“RemoteAudit”)une el único escritor a ese fichero víadynaFile=(ver “Problemas conocidos” más abajo para entender por quétemplate=no funciona aquí en Rsyslog 8.2510).input(type=“imtcp” port=“10514” ruleset=“RemoteAudit”)abre el listener y enruta los mensajes entrantes al ruleset personalizado en lugar del ruleset por defecto.
Habilitar y validar
# --- On rsyslog-receiver (10.0.0.1) --- mkdir -p /var/log/received systemctl enable --now rsyslog ss -ltn | grep 10514
Esperado: una línea LISTEN en 0.0.0.0:10514 y [::]:10514. En producción, el host receptor debe permitir el tráfico TCP 10514 entrante desde el emisor en su firewall (o en el firewall de la red que lleve el tráfico de auditoría).
Emisor: `pandora-console`
El Pandora FMS Server ya trae Rsyslog (viene instalado por defecto y está activo en la imagen estándar de la Consola). Solamente hay que añadir la configuración de reenvío de auditoría.
Crear la configuración de reenvío
Crear /etc/rsyslog.d/10-pandora-audit-fwd.conf:
- 10-pandora-audit-fwd.conf
# Sender: tail the Pandora FMS Console audit log and # forward it to the receiver via TCP port 10514. The dedicated ruleset is # required to ensure that ONLY the audit log is sent, not the entire # system journal. module(load="imfile") ruleset(name="RemoteAuditFwd") { action(type="omfwd" target="10.0.0.1" port="10514" protocol="tcp" action.resumeRetryCount="-1" queue.type="linkedList" queue.filename="pandora_audit_fwd" queue.saveonshutdown="on" ) } input(type="imfile" File="/var/www/html/pandora_console/log/audit.log" Tag="pandora-audit" Severity="info" Facility="local0" ruleset="RemoteAuditFwd" )
Notas sobre los parámetros:
action.resumeRetryCount=“-1”hace que el emisor reintente indefinidamente cuando el receptor está caído; es lo que da al emisor el comportamiento de “buffer si la red se cae”.queue.type=“linkedList”mantiene la cola en memoria de forma simple. Si el volumen de auditoría justifica una cola en disco, cambiar aqueue.type=“disk”(Atención:queue.maxdisksizesolamente es válido para colas en disco).Tag=“pandora-audit”permite al receptor y a filtros downstream reconocer el stream.Facility=“local0”lo mantiene fuera de las standard facilities (auth,syslog).ruleset=“RemoteAuditFwd”en la entradaimfilees lo crítico: Hace que la salida del file-tail evite el ruleset principal y llegue únicamente a la acciónomfwd.
Validar la configuración y arrancar el servicio
# --- On pandora-console (10.0.0.2) --- rsyslogd -N1 systemctl enable --now rsyslog
rsyslogd -N1 hace una pasada de validación en una sola lectura.
La última línea esperada es End of config validation run. Bye. Cualquier otra cosa
indica que la configuración no carga y el servicio correrá sin las reglas
de reenvío.
Pruebas y debugging
Smoke test
# --- On pandora-console (10.0.0.2) --- # 1. Generate an audit-style line in the source file. # 192.0.2.10 is the IP address of the administrator # performing the action (fictitious value). TS=$(date '+%F %T') echo "$TS - admin - Test - 192.0.2.10 - rsyslog forwarding smoke test" \ | sudo tee -a /var/www/html/pandora_console/log/audit.log # 2. Wait for the imfile polling interval (10 seconds by default) sleep 15 # 3. Check the output file on the receiver cat /var/log/received/pandora-audit.log
Salida esperada (el timestamp y el nombre de programa los añade Rsyslog en el emisor; la parte final es la línea original):
Jul 2 12:44:52 pandora-console pandora-audit 2026-07-02 12:44:52 - admin - Test - 192.0.2.10 - rsyslog forwarding smoke test
En producción, las líneas de auditoría las escribe la propia Consola, esta no necesita “saber” nada de Rsyslog.
Comprobación de conectividad
Si no llega nada al receptor, validar primero la ruta de red:
# --- On pandora-console (10.0.0.2) --- bash -c 'echo > /dev/tcp/10.0.0.1/10514' && echo "TCP 10514 alcanzable"
Esto funciona sin nc ni ncat y es la forma más rápida de descartar problemas de firewall/red.
Revisar los journals de Rsyslog
Cada uno de los extremos tienen informes detallados de error en su unidad Systemd:
# --- On pandora-console (10.0.0.2) --- journalctl -u rsyslog --no-pager -n 50
# --- On rsyslog-receiver (10.0.0.1) --- journalctl -u rsyslog --no-pager -n 50
Patrones que conviene reconocer:
action 'action-0-builtin:omfwd' suspended (…)seguido deresumed— el receptor se ha caído (o se ha reiniciado) y el emisor ha reconectado. Los mensajes no se pierden gracias aaction.resumeRetryCount=-1yqueue.saveonshutdown=on.
omfwd: remote server closed connection— el receptor está rechazando conexiones. Comprobar que el listener está en ejecución y que el ruleset está sin errores de parseo.
error during parsing file /etc/rsyslog.d/*.conf, on or before line N— corregir la configuración y volver a ejecutarrsyslogd -N1antes de reiniciar el servicio.
Problemas frecuentes y soluciones
| Síntoma | Causa raíz | Solución |
|---|---|---|
El receptor queda vacío; el emisor registra remote server closed connection. | La configuración del receptor tiene un error de parseo; el listener se ejecuta pero los mensajes los descarta el ruleset por defecto. | Ejecutar rsyslogd -N1 en el receptor y corregir la config. En Rsyslog 8.2510, usar dynaFile= y no template= en omfile. |
El fichero del receptor existe pero contiene CROND, rsyslogd etcétera, no solamente auditoría. | La acción omfwd está declarada a nivel raíz de la config del emisor; reenvía todos los mensajes del ruleset principal. | Envolver la acción omfwd en un ruleset dedicado y enlazar la entrada imfile a él con ruleset=“…”. |
parameter 'queue.maxdisksize' not known en el emisor. | Ese parámetro solamente es válido para queue.type=“disk”, no para linkedList. | Quitar queue.maxdisksize o cambiar la cola a disk. |
Tras borrar /var/lib/rsyslog/imfile-state* no se reenvía el histórico. | Esperado: sin state file, imfile se ancla al final actual del fichero y únicamente envía las líneas nuevas. | Dejar el state file tal como está. Para reenviar histórico, usar readMode=“2” en la entrada imfile. |
| Las nuevas líneas de auditoría llegan con retraso. | imfile hace polling cada 10 segundos por defecto. | Bajar dicho valor con PollingInterval=“2” en la entrada imfile si se necesita casi a tiempo real. |
| Tras un reinicio del emisor se pierden los últimos segundos de auditoría | La cola en memoria se descarta al apagar. | queue.saveonshutdown=“on” (especificado en la revisión de los journals de Rsyslog) persiste la cola en disco; al arrancar, Rsyslog la vacía. |
Reanclar el emisor
Para reconstruir el stream de auditoría desde cero (por ejemplo, tras una caída larga fuera de línea del receptor y en la que el log de auditoría local se ha retrasado), reiniciar el state de imfile y confirmar que el fichero sigue existiendo en la ruta esperada:
# --- On pandora-console (10.0.0.2) --- # Locate the state file (its name contains a colon; enclose it in quotation marks) ls -la /var/lib/rsyslog/ | grep imfile-state # Erase it rm -f /var/lib/rsyslog/imfile-state:* # Restar service systemctl restart rsyslog
Tras el reinicio el emisor envía únicamente las líneas escritas después del reinicio. Para reenviar todo desde el principio del audit.log actual, añadir readMode=“2” a la entrada imfile y reiniciar Rsyslog de nuevo.
Lista de revisión operacional
- □ El receptor está en línea desde el emisor por
TCP 10514. - □
rsyslogd -N1limpio en ambos extremos. - □
ss -ltn | grep 10514muestra unLISTENen el receptor. - □ Una línea de prueba añadida a
audit.logaparece en/var/log/received/pandora-audit.logen menos de un intervalo de polling. - □ El fichero de log del receptor contiene solamente líneas con el tag
pandora-audit(sinCROND/rsyslogd). - □
systemctl enable rsyslogaplicado en ambos hosts para que el reenvío sobreviva a un reinicio.