ipset iptables 删除所有排除端口但通过速率限制

ipset iptables 删除所有排除端口但通过速率限制

我有简单的 IP 集图来追踪可疑 IP。

这些是我的命令:

ipset flush
ipset -q destroy banlists
ipset create banlists hash:ip comment family inet hashsize 2048 maxelem 1048576 timeout 300

然后我告诉 iptables 如果在 ipset 中匹配则删除:

iptables -I INPUT 1 -m set -j DROP --match-set banlists src
iptables -I FORWARD 1 -m set -j DROP --match-set banlists src

这是可行的,但我想

  • 所有端口必须删除
  • 排除端口 80 和 443
  • 速率限制匹配 ipset 以防止 ddos​​ 但可访问

答案1

如果要允许端口 80 和 443,可以为INPUT链添加一条规则:

iptables -I INPUT 1 -m set -j DROP --match-set banlists src
iptables -I INPUT 1 -p tcp -m multiport --dports 80,443 -j ACCEPT

还有一条FORWARDchain 规则:

iptables -I FORWARD 1 -m set -j DROP --match-set banlists src
iptables -I FORWARD 1 -p tcp -m multiport --dports 80,443 -j ACCEPT

上述规则将允许所有 IP 访问端口 80 和 443。要对 banlists ipset 应用速率限制,您可以使用:

iptables -I INPUT 1 -m set --match-set banlists src -j DROP
iptables -I INPUT 1 -p tcp -m multiport --dports 80,443 -m state --state NEW -m set --match-set banlists src -m recent --update --seconds 120 --hitcount 10 -j DROP
iptables -I INPUT 1 -p tcp -m multiport --dports 80,443 -m state --state NEW -m set --match-set banlists src -m recent --set -j ACCEPT

在我看来,更简单的方法是使用-Aswitch 而不是-I。当然,您需要查看完整的规则集以确保它按要求设置(按顺序检查规则)。这样,规则就会按编写的正常顺序出现:

iptables -A INPUT -p tcp -m multiport --dports 80,443 -m state --state NEW -m set --match-set banlists src -m recent --set -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dports 80,443 -m state --state NEW -m set --match-set banlists src -m recent --update --seconds 120 --hitcount 10 -j DROP
iptables -A INPUT -m set --match-set banlists src -j DROP

chain也需要遵循同样的规则FORWARD,可以recent根据需要自定义模块参数,即hitcountseconds

相关内容