温馨提示×

debian iptables如何限流量

小樊
38
2026-09-04 19:23:44
栏目: 智能运维

在 Debian 下使用 iptables 进行“限流量”(带宽/速率限制),通常不是直接靠 iptables 本身完成的,而是配合 tc(traffic control) 或 iptables 的 limit / hashlimit / quota 模块来实现。下面按常见需求分类说明。


一、用 iptables 限制【连接/包速率】(不是带宽)

1. 限制每秒包数量(防 Flood)

iptables -A INPUT -p icmp --icmp-type echo-request \
  -m limit --limit 1/s --limit-burst 5 \
  -j ACCEPT

iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

说明:

  • --limit 1/s:每秒最多 1 个包
  • --limit-burst 5:突发最多 5 个

2. 限制每个 IP 的新连接速率(防 CC)

iptables -A INPUT -p tcp --dport 80 -m state --state NEW \
  -m hashlimit \
  --hashlimit-name http \
  --hashlimit-mode srcip \
  --hashlimit-above 10/min \
  --hashlimit-burst 5 \
  -j DROP

说明:

  • 每个源 IP 每分钟最多 10 个新连接
  • 适合 Web 限流

3. 限制总流量(quota,不常用)

iptables -A OUTPUT -p tcp --dport 80 \
  -m quota --quota 104857600 \
  -j ACCEPT

iptables -A OUTPUT -p tcp --dport 80 -j DROP

说明:

  • 每个规则生命周期内最多 100MB
  • 重启失效

二、真正“限速”(带宽限制)→ 用 tc + iptables

iptables 本身不能限制带宽,必须配合 tc

示例:限制 eth0 上传为 1Mbps

tc qdisc add dev eth0 root tbf \
  rate 1mbit \
  burst 32kbit \
  latency 400ms

示例:限制某个 IP 的下载速度

# 打标记
iptables -A FORWARD -s 192.168.1.100 -j MARK --set-mark 10

# tc 限速
tc qdisc add dev eth0 root handle 1: htb
tc class add dev eth0 parent 1: classid 1:10 htb rate 512kbit
tc filter add dev eth0 protocol ip parent 1: prio 1 handle 10 fw flowid 1:10

三、推荐方案(生产环境)

需求 推荐
防攻击 iptables + hashlimit
限速 tc (HTB / TBF)
简单用 wonder shutdown / trickle
高级 nftables

四、Debian 注意点

  • 确认模块存在:
lsmod | grep xt_hashlimit
  • 持久化:
apt install iptables-persistent
netfilter-persistent save

如果你能说清楚:

  • 是 上传 / 下载
  • 是 单 IP / 总带宽
  • 是 服务器还是路由器

我可以给你一套可直接用的完整配置。

0 踩