温馨提示×

Debian iptables如何限速

小樊
46
2026-07-01 22:47:08
栏目: 智能运维

在 Debian 系统中,使用 iptables 进行限速(流量控制)通常通过 hashlimitlimit 模块实现。下面按常见场景给你说明,并附上可直接用的示例。


一、使用 hashlimit 限速(推荐,功能更强)

hashlimit 可以按 IP、端口、协议 等维度限速,适合防止单 IP 突发流量。

1️⃣ 限制单个 IP 每秒新建连接数(防攻击)

iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW \
  -m hashlimit \
  --hashlimit-name http \
  --hashlimit 10/sec \
  --hashlimit-burst 20 \
  --hashlimit-mode srcip \
  -j ACCEPT

含义:

  • 每个源 IP 每秒最多 10 个新连接
  • 允许突发 20 个
  • 基于 源 IP(srcip)

2️⃣ 限制单个 IP 的下载/上传速率(按包数)

iptables -A INPUT -p tcp -m hashlimit \
  --hashlimit-name limit1 \
  --hashlimit 100/sec \
  --hashlimit-burst 200 \
  --hashlimit-mode srcip \
  -j ACCEPT

⚠️ 注意:

  • iptables 不能直接限制带宽(如 1Mbps)
  • 只能限制 包速率 / 连接速率

二、使用 limit 模块(简单但不够精细)

限制 ICMP(ping)速率(防 ping flood)

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

超出限制的包会被后面的规则丢弃。


三、限制上传 / 下载带宽(真正限速)

⚠️ iptables 本身不适合做带宽限速
✅ 正确方式是:iptables + tc(Traffic Control)

示例:使用 tc 限制接口带宽(推荐方案)

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

说明:

  • eth0:网卡名
  • 1mbit:限制为 1Mbps
  • 适合限制 整体出口带宽

四、限制某个 IP 的带宽(结合 tc + iptables)

1️⃣ 标记特定 IP 的包

iptables -t mangle -A POSTROUTING -s 192.168.1.100 -j MARK --set-mark 10

2️⃣ 使用 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: handle 10 fw flowid 1:10

五、查看 / 删除规则

查看规则

iptables -L -n -v

删除规则(示例)

iptables -D INPUT -p tcp --dport 80 -m conntrack --ctstate NEW -j ACCEPT

六、重要提醒

iptables ≠ 带宽限速器
✅ 防攻击、防突发 → hashlimit
✅ 限制带宽 → tc
✅ 生产环境建议:

  • 限速 + 防火墙
  • 或直接使用 nftables(Debian 新版本推荐)

如果你愿意,可以告诉我:

  • 想限制 上传还是下载
  • 单 IP / 整个服务器 / 某个端口
  • Debian 版本(10 / 11 / 12)

我可以给你一套 完全可落地的配置方案

0