我正在尝试将 iptables 日志重定向到另一个文件。根据我在网上的阅读,我做了以下事情:
在我的 iptables 规则中,我有如下规则:
iptables -A INPUT -s ... -j LOG --log-prefix "iptables@@" 然后在文件夹 /etc/rsyslog.d 中,我创建了一个包含以下条目的文件:
:msg,contains,"iptables@@" /var/log/iptables.log & ~ 我也尝试过在上面两行之间留一个空行。我现在确实将 iptables 日志条目发送到 iptables.log 文件。但它们也会发送到 /var/log/kern.log 文件。我想抑制后者。我该怎么做。我正在运行 Ubuntu 14.04 LTS。
答案1
当你的/etc/rsyslog.conf加载你的 *.conf/etc/rsyslog.d,它会按字母顺序读取您的文件。因此,您需要确保您的规则位于 50-default.conf 之前的文件中,例如:
01-myiptablesrules.conf
这样,你的规则将被首先读取,然后丢弃它。你还应该使用以下语法:
:msg, contains, "iptables@@" {
*.* /var/log/iptables.log
stop
}
*您应该使用 stop 而不是 ~
或者如果你没有其他的 kern.* 而不是你的 iptables 消息,你应该修改50-默认.conf和:
kern.* /var/log/iptables.log
答案2
您的 rsyslog 配置文件中是否有一行将消息打印到/var/log/kern.log
?如果有,请发布该代码。同时发布您的 rsyslog 版本号。与此同时,这可能会起作用:
:msg,contains,"iptables@@" /var/log/iptables.log
:msg,contains,"iptables@@" ~
不过我相信一旦你完成了第二行,rsyslog 将忽略所有包含的消息,iptables@@
因此它无法在其他地方记录(该行之后)。