Por que o rsyslogd não honra as seguintes linhas no rsyslog.d

5

Isso é um pouco relacionado à minha pergunta anterior aqui .

Eu tenho três arquivos em /etc/rsyslog.d , que estão incluídos em /etc/rsyslog.conf :

  • 00-iptables.conf
  • 50-default.conf
  • postfix.conf

O primeiro é um que eu criei. Minha suposição é / foi, que devido à nomenclatura ele será incluído antes de 50-default.conf , mas também tentei colocar as linhas de filtro diretamente em 50-default.conf e remover meu arquivo personalizado ( 00-iptables.conf ).

:msg, startswith, "ipt:" /var/log/iptables.log
& stop

Substituiu ~ com stop como em execução rsyslogd com -N1 conforme descrito na página do manual e nas etapas de solução de problemas forneceu um aviso, dizendo que ~ foi preterido em favor ou stop , o que significa a documentação disponível (oficial!) parece estar desatualizada / atrasada.

Agora, a ideia aqui é que qualquer mensagem prefixada com ipt: entrará no arquivo de log nomeado e nenhum outro arquivo de log receberá essas linhas (tentei também contains em vez de startswith ). Em particular, syslog e kern.log mencionados em 50-default.conf não devem mais receber essas mensagens:

auth,authpriv.*            /var/log/auth.log
*.*;auth,authpriv.none     -/var/log/syslog
kern.*                     -/var/log/kern.log

Eu li a documentação do rsyslog, mas a documentação para os filtros baseados em propriedade (também aqui ) não é exatamente o mais esclarecedor. O exemplo dado na documentação (também encontrada em outro lugar) e o seu Wiki dá um exemplo similar :

# From documentation
*.* /var/log/allmsgs-including-informational.log
:msg, contains, "informational"  ~
*.* /var/log/allmsgs-but-informational.log
# From Wiki
:syslogtag, startswith, "MSWinEventLog#011" /var/log/messages;fixsnareFormat
& @192.168.1.8;fixsnareForwardFormat
& ~

Embora o exemplo da documentação não seja tão próximo do meu verso, ele ainda explica o significado do ~ better.

O que estou fazendo de errado?

Pontos de bônus se alguém puder responder se existe uma maneira de combinar seletores e propriedades. Por exemplo:

:msg, startswith, "ipt:" kern.* /var/log/iptables.log

NB: eu uso a versão 7.4.4 de rsyslog . E sim, eu fiz service rsyslog restart após as alterações e depois esperei que isso tivesse efeito.

Editar

Mais algumas informações. Ao executar o daemon no modo de depuração ( RSYSLOG_DEBUG=LogFuncFlow RSYSLOG_DEBUGLOG=~/rsl.log $(which rsyslogd) -f /etc/rsyslog.conf -d ), posso ver que o conjunto de regras após a otimização se parece com isso, o que parece indicar que é exatamente do jeito que eu quero (prefixo removido por brevidade):

ruleset 'RSYSLOG_DefaultRuleset' after optimization:
ruleset 0x214a640: rsyslog ruleset RSYSLOG_DefaultRuleset:
PROPFILT
   Property.: 'rawmsg'
   Operation: 'contains'
   Value....: 'ipt:'
THEN
  ACTION 0x215c070 [builtin:omfile:/var/log/iptables.log]
  STOP
END PROPFILT
PRIFILT 'auth,authpriv.*'
pmask:  X  X  X  X FF  X  X  X  X  X FF  X  X  X  X  X  X  X  X  X  X  X  X  X  X
  ACTION 0x215e840 [builtin:omfile:/var/log/auth.log]
END PRIFILT
PRIFILT '*.*;auth,authpriv.none'
pmask: FF FF FF FF  X FF FF FF FF FF  X FF FF FF FF FF FF FF FF FF FF FF FF FF FF
  ACTION 0x215f030 [builtin:omfile:-/var/log/syslog]
END PRIFILT

Devo também acrescentar que, a partir do comportamento que vejo, posso deduzir que o filtro tem um efeito, já que ele grava claramente no arquivo /var/log/iptables.log como esperado. No entanto, as mensagens não são descartadas conforme o esperado depois de serem gravadas nesse arquivo específico.

Veja uma linha de exemplo do jeito que acaba em kern.log , syslog e iptables.log em oposição a apenas a última. Detalhes foram redigidos por motivos de privacidade:

Jun  1 02:23:01 hostname kernel: [70025.211497] ipt:drop IN=eth0 OUT=virbr0 MAC=dd:cc:bb:aa:99:88:77:66:55:44:33:22:11:00 SRC=9.8.7.6 DST=1.2.3.4 LEN=60 TOS=0x00 PREC=0x00 TTL=47 ID=59201 DF PROTO=TCP SPT=47626 DPT=23 WINDOW=4380 RES=0x00 SYN URGP=0
    
por 0xC0000022L 01.06.2014 / 02:10

2 respostas

1

Por que não usar o RainerScript? Em vez do seletor de instalações, corresponda a $syslogfacility-text . Em afeto, isso combina seletores e propriedades.

if ($msg startswith 'ipt:' and $syslogfacility-text == 'kern') then {
    action(type="omfile" file="/var/log/iptables.log")
    stop
}

Observe também que os documentos do Rsyslog indicam que a árvore da versão 7 está desatualizada e deve ser não usada ( link ).

    
por 30.07.2017 / 01:44
0

não tenho certeza se você gostou ou não. Eu não passei por todos os detalhes, mas o rsyslog pode enviar mensagens de maneiras diferentes, dependendo de algumas configurações. Por exemplo, ele pode enviar para todas as condições ao mesmo tempo ou enviar para o primeiro e depois para o segundo, e assim por diante. Se suas configurações devem ser enviadas para todos ao mesmo tempo, a parada não terá nenhum significado real. Tente procurar pelo rsyslog assíncrono / síncrono / paralelo e, especialmente, pelo tipo de filas direcionadas / ligadas que alteram o fluxo de rsyslog. Espero que isso ajude pelo menos a ter algumas dicas

    
por 03.10.2016 / 14:18