Registrar mensagens contendo uma string específica em outro arquivo no rsyslogd

Registrar mensagens contendo uma string específica em outro arquivo no rsyslogd

Quero salvar minhas mensagens de log geradas pelo iptables em outro arquivo via rsyslogd.

Atualmente eu 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

Meus logs do cron estão bem, eles são registrados apenas em cron.log, mas meus logs do iptables são registrados em ambos sysloge firewall.log. Existe uma maneira de fazer login apenas firewall.log?

Especificações do meu 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

Responder1

Você tem que mover a parte de registro do firewall antes de outras regras, para que pareça

# 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

As regras são consideradas em ordem, então agora você tem uma mensagem correspondente*.*;cron,auth,authpriv.nonesempre será gravado no syslog, mesmo que também corresponda:msg, contém,"[BLOCO "e é gravado em firewall.log. O comando stop está simplesmente muito atrasado no arquivo para parar qualquer coisa.

Veja tambémhttps://www.rsyslog.com/writing-specific-messages-to-a-file-and-discarding-them/

informação relacionada