Registre mensajes que contengan una cadena específica en otro archivo en rsyslogd

Registre mensajes que contengan una cadena específica en otro archivo en rsyslogd

Quiero guardar mis mensajes de registro generados por iptables en otro archivo mediante rsyslogd.

Actualmente uso este código de /etc/rsyslog.d/20-custom.conf:

# Log cron to cron.log and not to syslog
*.*;cron,auth,authpriv.none         -/var/log/syslog
cron.*                               /var/log/cron.log

# Log firewall to extra log
:msg,contains,"[BLOCK " /var/log/firewall.log

& stop

Mis registros cron están bien, se registran solo en cron.log, pero mis registros de iptables se registran tanto en como syslogen firewall.log. ¿Hay alguna manera de iniciar sesión únicamente firewall.log?

Especificaciones de mi sistema:

> rsyslogd -v
rsyslogd 8.16.0, compiled with:
        PLATFORM:                               x86_64-pc-linux-gnu
        PLATFORM (lsb_release -d):
        FEATURE_REGEXP:                         Yes
        GSSAPI Kerberos 5 support:              Yes
        FEATURE_DEBUG (debug build, slow code): No
        32bit Atomic operations supported:      Yes
        64bit Atomic operations supported:      Yes
        memory allocator:                       system default
        Runtime Instrumentation (slow code):    No
        uuid support:                           Yes
        Number of Bits in RainerScript integers: 64

Linux MYHOSTNAME 4.4.0-116-generic #140-Ubuntu SMP Mon Feb 12 21:23:04 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

> lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.4 LTS
Release:        16.04
Codename:       xenial

Respuesta1

Tienes que mover la parte de registro del firewall antes que otras reglas, para que parezca

# Log firewall to extra log
:msg,contains,"[BLOCK " /var/log/firewall.log
& stop

# Log cron to cron.log and not to syslog
*.*;cron,auth,authpriv.none         -/var/log/syslog
cron.*                               /var/log/cron.log

Las reglas se consideran en orden, por lo que ahora aparece un mensaje que coincide.*.*;cron,auth,authpriv.nonesiempre se escribirá en syslog, incluso si también coincide:msg,contiene,"[BLOQUEAR "y se escribe en firewall.log. El comando de detención simplemente llega demasiado tarde en el archivo para detener algo.

Ver tambiénhttps://www.rsyslog.com/escribir-mensajes-específicos-a-un-archivo-y-descartarlos/

información relacionada