¿Es posible personalizar el registro de iptables en syslog?

1

Digamos que tengo la siguiente entrada de registro de iptablesa 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

Donde " Packet:" es mi prefijo de registro personalizado definido como iptablesregla:... -j LOG --log-prefix "Packet: "

La pregunta: ¿se IN=enp0s9 <...> ACK PSH URGP=0puede modificar (me refiero a toda la cadena)? ¿O es todo el "Mensaje" que no puede ser deconstruido?

En resumen, quiero que la entrada se vea así:

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

Sin otra información. Y quiero hacer esto como plantilla personalizada para syslog. ¿Es posible? Desafortunadamente no está claro en la documentación de Syslog

Groosha
fuente

Respuestas:

1

Puede hacerlo utilizando un sustituto de propiedad .

Coloque su línea rsyslog.confo una similar que defina una plantilla que tenga el formato deseado del nuevo mensaje y úsela en la acción cuando coincida con la línea de entrada. Por ejemplo,

$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")
}

La plantilla dice que la variable de plantilla myedites la cadena que incluye la msgpropiedad reemplazada por una coincidencia regex (R), extendida (ERE), captura de grupo 1 (1), (y si no coincide, mantenga el CAMPO original). La expresión regular real es la Packet: .*?(SRC=.*LEN=[0-9]+).*parte. El --endes una parte obligatoria de la %...:R,...--end%secuencia. Agregue una nueva línea final, ya que reemplazaremos el mensaje completo por esta plantilla.

Las siguientes líneas son la prueba habitual de Rainer Script para las líneas que desea editar y dónde colocar el resultado.

meuh
fuente
¡Muchas gracias! ¿Cómo es posible agregar fecha antes que todo lo demás (ver mi pregunta), ¿debería hacerse con regex o usando alguna variable interna de syslog?
Groosha
1
Upd: No importa, Agregar %TIMESTAMP%antes %msgfuncionó bien para mí.
Groosha