dmesg 充斥着防火墙日志

dmesg 充斥着防火墙日志

在我的 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.

相关内容