connlimit
让我限制每个客户端/服务的连接数。我如何将这样的规则与最新版本的 Linux 内核和 netfilter 中可用的 IP 集结合起来?
答案1
假设我们有一个名为 的 ipset MYTESTSET
,并且该 ipset 的类型为hash:ip
。它只会存储 ip 地址。
然后与您的 IPset 进行匹配,并在与connlimit
匹配扩展进行匹配后,使用您想要的参数。
iptables -A INPUT -p tcp -m set --match-set MYTESTSET src -m connlimit --connlimit-above 1 --connlimit-saddr --connlimit-mask 32 -j DROP
这将执行以下操作:对于 IP 集中的每个源,将计算连接数,如果有多个(--connlimit-above 1),它将被丢弃,从而限制连接数ipset 中的每个源到 1。(您也可以使用其他方式进行匹配,使用--connlimit-upto xxx
and-j ACCEPT
代替DROP
)
如果要考虑整套并允许1个连接对于 ipset 中的所有源然后将--connlimit-mask
开关设置为0。