【问题标题】:iptables: limit the number of logged packets/secondiptables:限制记录的数据包数/秒
【发布时间】:2014-11-28 02:48:39
【问题描述】:

背景。

我正在构建一个用于蜜罐部署的防火墙/NAT 设备。简单来说,它被配置为某种反向防火墙。当其中一个蜜罐被感染/受损时,防火墙将允许攻击者出站连接,但出站连接仅限于一组特定的端口,在一定的限制范围内,并且只有特定数量的连接。如果防火墙检测到超过这些限制的流量,它将在一段时间内开始丢弃数据包。来自蜜罐的任何流量都会被记录,因为它被认为是恶意的。

问题。

攻击者经常使用蜜罐发起 DDoS 攻击。平均而言,97% 的流量被防火墙阻止,它还会记录所有这些。问题是它会生成aropx。每秒 90000 个条目,这些攻击可以持续 10 分钟到几个小时。由于所有这些都被记录下来,它会生成一些非常大的日志文件。

当前的解决方法。

我已尝试通过每 60 秒轮换一次防火墙日志来解决此问题,但这只会影响日志大小。当 logrotate 创建了最大数量的日志时,最终会收到来自一次 DDoS 攻击的大量日志。我添加了一个专用硬盘来保存日志文件并增加了日志轮换。

问题。

恐怕这是“保留蛋糕/吃蛋糕”的情况。我想尽可能多地记录,同时告诉 iptables 在某个点之后停止记录流量。

有没有办法配置 iptables 将条目写入日志文件,但是,如果同一条目在最后一秒被写入 N 次,是否会停止记录其余部分?

日志记录功能是否有诸如“速率限制”之类的东西?

还有其他方法可以解决这个问题吗?

【问题讨论】:

    标签: security logging iptables ddos honeypot


    【解决方案1】:

    我认为limit 模块是您正在寻找的,正如iptables-extensions's man page 所建议的那样:

    limit

    此模块使用令牌桶过滤器以有限的速率匹配。使用此扩展的规则将匹配,直到达到此限制。例如,它可以与 LOG 目标结合使用以提供有限的日志记录。
    xt_limit 不支持否定 - 在这种情况下,您必须使用 -m hashlimit ! --hashlimit rate,同时省略 --hashlimit-mode

    --limit rate[/second|/minute|/hour|/day]
    最大平均匹配率:指定为数字,带有可选的'/second'、'/minute'、'/hour'或'/day'后缀;默认值为 3/小时。

    --limit-burst number
    要匹配的最大初始数据包数:每次未达到上述限制时,此数字会重新充电一次,直至此数字;默认值为 5。

    因此,在this answer 的基础上,我认为这类东西可以完成这项工作:

    iptables -N LOGANDDROP
    iptables -A INPUT -s 192.168.1.0/24 -j LOGANDDROP
    iptables -A LOGANDDROP -m limit --limit 5/min -j LOG --log-prefix "iptables dropped packets " --log-level 7
    iptables -A LOGANDDROP -j DROP
    

    您可以通过在不同规则下使用多个限制约束来实现更精细的粒度。

    【讨论】:

    • 我的规则是如何构建的示例:pastebin.com/hRFHQSjf - 设置速率和突发限制,记录所有流量 - 捕获和丢弃超过这些限制的任何内容,记录所有流量 - 捕获和丢弃任何超过连接的内容限制,记录所有流量使用限制模块限制流量不是问题,我正在寻找一种方法来限制通过这些规则写入防火墙日志的行数。你提供的规则,他们将如何实现这一点?也许我误解了你,如果是这样,我为此道歉。
    • LOGANDDROP 链中带有limit 模块的规则限制了在这些数据包已被先前规则过滤后记录的数据包的数量。在您的示例中,您应该将规则放在LOGNDROP 链中,以便将所有要丢弃的数据包中的日志记录限制为每分钟 5 个数据包(使用我提供的特定规则)。事实上,也许您应该定义 2 个链并在每个链中放置一个类似的规则。
    • 不错的答案 :) 我仍然有点不确定这会是什么样子。鉴于我提供的规则并使用您建议的方法,您能否告诉我如何修改此规则以每秒仅写入 100 个条目?
    • 一般来说,LOGNDROP 链中的第一条规则应该是 -A LOGNDROP -m limit --limit 100/sec -j LOG,第二条规则应该是 -A LOGNDROP -j DROP。该链中不应有任何其他规则。
    • 感谢您的提示,并对迟到的回复感到抱歉。我设法使用您修改 LOGALLOW/LOGNDROP 链的建议来解决它: -A LOGALLOW -j LOG --log-prefix "IPTABLES - ALLOW" -m limit --limit 300/s
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-12
    • 2014-11-18
    • 1970-01-01
    相关资源
    最近更新 更多