背景
我正在构建一个用于蜜罐部署的防火墙/ NAT设备。简单来说,它被配置为可以作为各种反向防火墙。当其中一个蜜罐被感染/泄露时,防火墙将允许攻击者进行出站连接,但出站连接仅限于一组特定端口,在一定限制范围内且仅限于特定数量的连接。如果防火墙检测到超过这些限制的流量,它将开始丢弃数据包一段时间。任何源自蜜罐的流量都会被记录,因为它被认为是恶意的。
问题。
攻击者经常使用蜜罐来发起DDoS攻击。平均而言,97%的流量被防火墙阻止,它也记录了所有这些。问题是它会产生aropx。每秒90000个条目,这些攻击可以持续10分钟到几个小时。由于记录了所有这些,它会生成一些相当大的日志文件。
目前的解决方法。
我试图通过每隔60秒旋转一次防火墙日志来解决这个问题,但这只会影响日志大小。当logrotate创建了最大数量的日志时,最终会出现来自单个DDoS攻击的大量日志。我添加了一个专用硬盘来保存日志文件并增加了日志轮换。
问题。
我担心这是“保持蛋糕/吃蛋糕”的情况。我想尽可能多地记录,同时告诉iptables在某个点之后停止记录流量。
有没有办法配置iptables将条目写入日志文件但是,如果相同的条目已写入N次,则最后一秒将停止记录其余条目?
记录功能有“速率限制”等吗?
还有其他方法可以解决这个问题吗?
答案 0 :(得分:2)
我认为limit
模块正是您所需要的,正如iptables-extensions
's man page建议的那样:
limit
此模块使用令牌桶过滤器以有限的速率匹配。使用此扩展程序的规则将匹配,直到达到此限制。例如,它可以与
LOG
目标结合使用以提供有限的日志记录xt_limit
没有否定支持 - 在这种情况下您必须使用-m hashlimit ! --hashlimit rate
,同时省略--hashlimit-mode
。
--limit rate[/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
您可以通过在不同规则下使用多个限制约束来实现更精细的粒度。