dmesg充满防火墙日志


8

在我的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/dmesgcommand的输出dmesg)。

有没有办法防止这些日志显示在dmesg


无论如何,记录所有内容有什么意义?
0xC0000022L 2014年

1
记录所有丢弃的数据包确实不是一个好主意。与消除症状相比,更好的方法是使用日志记录规则更具体。例如,记录与任何连接都不相关且不执行任何“特殊”操作(如连接初始化)的数据包不是很明智。最好将其缩减为诸如»Host A想连接到端口B«之类的相关内容。数据包丢弃的原因数量可能远大于因相关原因而丢弃数据包的原因数量。
2014年

1
@Andreas Wiese-为了这个问题,我简化了规则。我的规则更加复杂和具体。但是无论如何,问题是如何防止dmesg泛滥,而不是关于防火墙规则。
马丁·贝格

另请参阅有关Netfilter日志记录守护程序的此答案ulogd2。这就是我解决问题的方式。
mivk

Answers:


4

您可以使用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个数据包。您当然可以根据需要进行调整。


我找不到任何有关如何配置rsyslog记录NFLOG数据包的信息。我需要一些可以配合使用的解决方案rsyslog
Martin Vegter 2014年

2
@MartinVegter-NFLOG将与rsyslog一起使用。对于NFLOG,您可以使用ulogd(我认为需要ulogd2)作为过渡。它将在netlink套接字上侦听以获取日志,并将它们(按配置)交付给syslog。如果ulogd2不可用,请使用ulogd(1.x)和ULOG目标。
Christopher Cashell 2015年

0

它可能与您在iptables中使用的日志级别有关。据我从rsyslog文档的日志级别了解,“优先级是以下关键字之一,以升序排列:debug,info,notice,warning,warn(与警告相同),err,error(与err相同),暴击,机敏,紧急状态,恐慌(与紧急状态相同)。” 尝试使用其名称即“ notice”在iptables中指定日志级别。好吧,我可以不经检查就正确发布,因为我现在认为这根本不是问题。我实施了与上面概述的方案类似的方案,但遇到了同样的问题。我的centos 7内核是v3.10.0,显然从v3.5开始,内核日志似乎是使用/ dev / kmsg完成的,并且我认为dmesg会以某种方式从那里获取输入。


0

使用以下命令将日志级别设置为7:

-A INPUT -i eth0       -j   LOG  --log-prefix "FW: " --log-level 7

然后,您可以通过将级别阈值传递给dmesg来简单地过滤掉这些消息:

dmesg --level=err,warn

-7

你为什么在乎?dmesg是打印最近的内核消息的低级工具,您确实要求内核记录丢弃的数据包。

配置系统的syslog系统,以将iptables消息记录在与其他内核消息不同的日志文件中,并使用它编写的日志文件代替dmesg

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.