# rate-limit repeated new requests from same IP to any ports
iptables -I INPUT -i $ETH0ORSIMILAR -m state --state NEW -m recent --set
iptables -I INPUT -i $ETH0ORSIMILAR -m state --state NEW -m recent --update --seconds 60 --hitcount 12 -j DROP
通过上述设置,我将丢弃在 60 秒内反复访问我的服务器超过 12 次的任何连接。
是否可以在所有端口(比如说 8080 端口)上实现此功能?
答案1
您可以简单地将DROP
规则修改为:
iptables -I INPUT -i $ETH0ORSIMILAR -p tcp ! --dport 8080 -m state --state NEW -m recent --update --seconds 60 --hitcount 12 -j DROP
您需要添加选项-p tcp ! --dport 8080
以匹配发往除 8080 之外的任何端口的 TCP 流量。请注意,此规则不会匹配其他协议(如 UDP)。
另一种可能性是在端口 8080 的这两个规则之前添加一条 ACCEPT 规则。
答案2
另一个解决方案是,您可以iptables
在 DROP 规则之前将 ACCEPT 规则添加到规则中。它将接受端口 8080 上的所有数据包,并对所有其他端口进行速率限制。
iptables -I INPUT -i $ETH0ORSIMILAR -m tcp --dport 8080 -j ACCEPT
iptables -I INPUT -i $ETH0ORSIMILAR -m state --state NEW -m recent --set
iptables -I INPUT -i $ETH0ORSIMILAR -m state --state NEW -m recent --update --seconds 60 --hitcount 12 -j DROP
该解决方案将允许您打开端口进行访问而无需修改规则。