在 Ubuntu 下使用 iptables 进行限流,通常有以下几种常见方式,按使用场景说明:
limit 模块(按数据包速率限流)适合:限制每秒/每分钟允许的数据包数量
iptables -A INPUT -p tcp --dport 22 -m limit --limit 3/s -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
说明:
--limit 3/s:每秒最多 3 个包iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
hashlimit(按源 IP 限流,推荐)适合:防止单 IP 刷接口 / CC 攻击
iptables -A INPUT -p tcp --dport 80 -m hashlimit \
--hashlimit-name http_limit \
--hashlimit-mode srcip \
--hashlimit-above 10/minute \
-j DROP
参数说明:
--hashlimit-mode srcip:按源 IP 统计--hashlimit-above 10/minute:超过则 DROP--hashlimit-name:内核中限流表名(必须唯一)iptables -A INPUT -p tcp --dport 443 -m hashlimit \
--hashlimit-name https_limit \
--hashlimit-mode srcip \
--hashlimit-upto 5/s \
-j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j DROP
适合:限制单 IP 并发连接数
iptables -A INPUT -p tcp --dport 22 \
-m connlimit --connlimit-above 20 -j DROP
iptables -A INPUT -p tcp --dport 80 -m state --state NEW \
-m hashlimit --hashlimit-name web \
--hashlimit-mode srcip \
--hashlimit-above 30/minute -j DROP
apt install iptables-persistent
netfilter-persistent save
或手动:
iptables-save > /etc/iptables/rules.v4
❌ limit 不是“带宽限速”,而是包速率
✅ 真·带宽限速要用 tc(traffic control)
告诉我:
我可以给你 tc 示例。
如果你能说明:
我可以给你精准 rule。