iptables 是否有规则来限制 /24 范围的 IP 可以发送的 SYN 数据包数量?

iptables 是否有规则来限制 /24 范围的 IP 可以发送的 SYN 数据包数量?

当 C 类 IP 向我的 ubuntu 12.04 服务器发送过多的 SYN 数据包时,我该如何阻止整个 C 类 IP 块?

以下是我在 SYN 洪水攻击期间看到的示例:

图像

每个不同的 IP 仅发送 1 个 SYN 数据包,因此防火墙不会阻止它。但是192.132.209.*整个范围在很短的时间内发送了大量 SYN 数据包。

答案1

10.0.0.0/24个例子,

iptables -A INPUT -p tcp -s 10.0.0.0/24 --syn -m limit --limit 1/s --limit-burst 3 -j RETURN

应该可以完成这项工作,而且描述性很强,所以我想不需要任何解释。这里有一篇关于如何防止 TCP SYN 洪水攻击的好文章,读起来很容易:Linux Iptables 限制传入的 tcp 连接数/syn-flood 攻击。它对选项进行了更多解释,并提供了更广泛的方法(日志记录、单独链等)。

我从这里看不到您当前的状态iptables,因此您可能需要将其添加到链的顶部INPUT或将其正确集成到您当前的脚本中。


在评论中,您提到您正在寻找一种自动查找这些 IP 块的方法。好吧,我应该在命令 ( ) 中省略源地址过滤器-s 10.0.0.0/8,这样限制将适用于全世界。

答案2

我找到了类似的解决方案。不是我想要的,但非常相似:

/sbin/iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j REJECT --reject-with tcp-reset

将每个 C 类块的新 TCP 连接(端口 80)限制为 20 个。我在这里找到了它:
示例:C 类限制

答案3

C 类 IP 地址:192.0.0.0 至 223.255.255.255。

在这种情况下,--connlimit-mask选项必须192.0.0.0/3采用 CIDR 表示法。

如果指定掩码 24,则它也适用于 A 类和 B 类。您必须使用 CIDR 表示法来指定类。

--connlimit-mask 192.0.0.0/24 

相关内容