是否可以自定义 iptables 日志记录到 syslog?

是否可以自定义 iptables 日志记录到 syslog?

假设我有以下来自iptablesto 的日志条目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

其中“ Packet:”是我定义为规则的自定义日志前缀iptables... -j LOG --log-prefix "Packet: "

问题:(IN=enp0s9 <...> ACK PSH URGP=0我的意思是整个字符串)可以修改吗?或者它是整个“消息”,无法被解构?

简而言之,我希望条目看起来像:

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

没有其他信息。我想将其作为系统日志的自定义模板。是否可以?不幸的是,目前尚不清楚系统日志文档

答案1

您可以使用财产替代者

将您的rsyslog.conf或类似的行定义为新消息所需格式的模板,并在匹配输入行时在操作中使用它。例如,

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

模板表示模板变量myedit是包含由正则表达式 (R) 匹配、扩展 (ERE)、组捕获 1 (1) 替换的属性的字符串msg(如果不匹配,则保留原始字段)。实际的正则表达式是这Packet: .*?(SRC=.*LEN=[0-9]+).*部分。这--end是序列的强制性部分%...:R,...--end%。添加最后一个换行符,因为我们将用此模板替换整个消息。

以下几行是您要编辑的行的常见 Rainer Script 测试以及结果的放置位置。

相关内容