在 Debian 上使用 iptables 进行限速,通常结合 hashlimit 或 limit 模块来实现。下面按常见场景给你说明。
iptables 本身不能直接限制带宽(如 1Mbps),它只能:
如果你要限制真实带宽(如限速 100KB/s),需要配合 tc(traffic control)。
limit 限制速率(简单)例如:每秒最多 5 个包,突发 10 个
iptables -A INPUT -p icmp --icmp-type echo-request \
-m limit --limit 5/s --limit-burst 10 \
-j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
hashlimit 按 IP 限速(推荐)例如:每个 IP 每秒最多 10 个新连接
iptables -A INPUT -p tcp --syn \
-m hashlimit \
--hashlimit-name conn_limit \
--hashlimit-mode srcip \
--hashlimit-above 10/s \
-j DROP
iptables -A INPUT -p tcp --dport 80 \
-m hashlimit \
--hashlimit-name http_limit \
--hashlimit-mode srcip \
--hashlimit-above 20/s \
-j DROP
iptables 做不到真正的带宽限速,示例用 tc:
tc qdisc add dev eth0 root tbf rate 1mbit burst 32kbit latency 400ms
tc qdisc del dev eth0 root
apt install iptables-persistent
netfilter-persistent save
| 需求 | 推荐方案 |
|---|---|
| 防 ping 洪水 | limit |
| 防 CC 攻击 | hashlimit |
| 限制真实带宽 | tc |
| 限制单 IP 带宽 | tc + ip |
| Docker 限速 | docker --blkio / tc |
如果你能告诉我:
我可以给你更精确的命令。