É possível personalizar o log do iptables para o syslog?

1

Digamos que eu tenha a seguinte entrada de log de iptables a syslog :

Nov  3 12:04:12 mypc kernel: [  296.274134] Packet: IN=enp0s9 OUT=enp0s8 MAC=08:00:27:2f:77:23:08:00:27:86:42:0e:08:00 SRC=192.168.2.20 DST=192.168.1.11 LEN=284 TOS=0x00 PREC=0x00 TTL=63 ID=61089 DF PROTO=TCP SPT=80 DPT=1335 WINDOW=32160 RES=0x00 ACK PSH URGP=0

Onde " Packet: " é meu prefixo de log personalizado definido como iptables rule: ... -j LOG --log-prefix "Packet: "

A pergunta: pode IN=enp0s9 <...> ACK PSH URGP=0 (quero dizer a string inteira) ser modificada? Ou é toda a "Mensagem" que não pode ser desconstruída?

Em suma, quero que a entrada se pareça com:

Nov  3 12:04:12 Packet: SRC=192.168.2.20 DST=192.168.1.11 LEN=284

sem outras informações. E eu quero fazer isso como um modelo personalizado para o syslog. É possível? Infelizmente, isso não está claro na Documentação do syslog

    
por Groosha 03.11.2017 / 12:09

1 resposta

1

Você pode fazer isso usando um substituto da propriedade .

Coloque no seu rsyslog.conf ou similar uma linha definindo um modelo que seja o formato desejado da nova mensagem, e use-o na ação quando você corresponder à linha de entrada. Por exemplo,

$template myedit,"Packet: %msg:R,ERE,1,FIELD:Packet: .*?(SRC=.*LEN=[0-9]+).*--end%\n"
if ($msg contains "Packet: ") then {
  action(type="omfile" file="/var/log/myedit.log" template="myedit")
}

O modelo diz que a variável de modelo myedit é a string incluindo a propriedade msg substituída por uma correspondência regex (R), estendida (ERE), captura de grupo 1 (1), (e se não houver correspondência, mantenha o CAMPO original). A regex real é a parte Packet: .*?(SRC=.*LEN=[0-9]+).* . O --end é uma parte obrigatória da sequência %...:R,...--end% . Adicione uma nova linha final, pois substituiremos a mensagem inteira por este modelo.

As linhas a seguir são o teste usual do Rainer Script para as linhas que você deseja editar e onde colocar o resultado.

    
por 03.11.2017 / 13:26