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:

  1. Ir a Management → Settings → System Settings → General Setup → Security y luego activar la opción Enable audit log.
  2. 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:

  • imfile es 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 ruleset dedicado RemoteAuditFwd en el emisor es obligatorio. Si la acción omfwd se 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 de rsyslogd, etcétera) y “contamina” el receptor. Enlazar la entrada imfile a su propio ruleset es la forma más limpia de enviar únicamente las líneas de auditoría.
  • Un ruleset, RemoteAudit en 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=-1 y queue.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. Usar imudp si se prefiere UDP; TCP es lo recomendado para datos de auditoría.
  • El template de tipo string PandoraAudit define la ruta del fichero de salida.
  • ruleset(“RemoteAudit”) une el único escritor a ese fichero vía dynaFile= (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 a queue.type=“disk” (Atención: queue.maxdisksize solamente 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 entrada imfile es lo crítico: Hace que la salida del file-tail evite el ruleset principal y llegue únicamente a la acción omfwd.

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 de resumed — el receptor se ha caído (o se ha reiniciado) y el emisor ha reconectado. Los mensajes no se pierden gracias a action.resumeRetryCount=-1 y queue.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 ejecutar rsyslogd -N1 antes 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 -N1 limpio en ambos extremos.
  • ss -ltn | grep 10514 muestra un LISTEN en el receptor.
  • □ Una línea de prueba añadida a audit.log aparece en /var/log/received/pandora-audit.log en menos de un intervalo de polling.
  • □ El fichero de log del receptor contiene solamente líneas con el tag pandora-audit (sin CROND / rsyslogd).
  • systemctl enable rsyslog aplicado en ambos hosts para que el reenvío sobreviva a un reinicio.

←Volver al índice de documentación de Pandora FMS