在我的 iptables 中,我有一条记录丢弃数据包的规则:
-A INPUT -i eth0 -j LOG --log-prefix "FW: " --log-level 7
-A INPUT -i eth0 -j DROP
在中/etc/rsyslog.conf
,我有另一个规则将这些日志发送到专用文件/var/log/firewall.log
。
:msg, contains, "FW: " -/var/log/firewall.log
& ~
立即删除& ~
日志,以便它们不会淹没syslog
或其他日志文件。
这很有效,除了它会充斥着dmesg
这些防火墙日志(不是/var/log/dmesg
命令的输出dmesg
)。
有没有办法防止这些日志显示在dmesg
?
答案1
您可以使用NFLOG
目标而不是LOG
:
NFLOG
This target provides logging of matching packets. When this target is set for a
rule, the Linux kernel will pass the packet to the loaded logging backend to log the
packet. This is usually used in combination with nfnetlink_log as logging backend,
which will multicast the packet through a netlink socket to the specified multicast
group. One or more userspace processes may subscribe to the group to receive the
packets. Like LOG, this is a non-terminating target, i.e. rule traversal continues
at the next rule.
您所需要的只是一个nfnetlink_log
功能强大的日志记录程序。消息将发送到那里,用户空间进程将决定是否记录数据包。
您可以尝试的另一件事是将LOG
规则限制为特定阈值:
-A INPUT -i eth0 -m limit --limit 10/minutes -j LOG --log-prefix "FW: " --log-level 7
-A INPUT -i eth0 -j DROP
这平均每分钟记录 10 个数据包。您当然可以根据需要进行调整。
答案2
当您使用以下命令将日志级别设置为 7 时:
-A INPUT -i eth0 -j LOG --log-prefix "FW: " --log-level 7
然后,您可以通过将级别阈值传递给 dmesg 来简单地过滤掉这些消息:
dmesg --level=err,warn
答案3
这可能与您在 iptables 中使用的日志级别有关。据我从 rsyslog 文档日志级别了解,优先级是以下关键字之一,按升序排列:debug、info、notice、warn、warn(与 warning 相同)、err、error(与 err 相同)、暴击、警报、紧急、恐慌(与紧急)。”尝试使用名称“notice”来指定 iptables 中的日志级别怎么样?不检查就发帖是我的权利,因为我现在认为这根本不是问题。我实施了与上述方案类似的方案,但也遇到了同样的问题。我的 centos 7 内核是 v3.10.0,显然从 v3.5 开始,内核日志记录似乎是使用 /dev/kmsg 完成的,我认为 dmesg 以某种方式从那里获取输入。
答案4
你为什么在乎?dmesg
是一个打印最近内核消息的低级工具,并且您确实要求内核记录丢弃的数据包。
配置系统的 syslog 系统,将 iptables 消息记录在与其他内核消息不同的日志文件中,并使用它写入的日志文件而不是dmesg
.