2

背景。

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

问题。

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

当前的解决方法。

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

问题。

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

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

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

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

4

1 回答 1

3

我认为该limit模块是您正在寻找的,正如iptables-extensions手册页所暗示的那样:

limit

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

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

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

因此,在这个答案的基础上,我认为这样的事情可以完成这项工作:

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

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

于 2014-11-27T18:48:39.837 回答