温馨提示×

ubuntu iptables如何限流

小樊
42
2026-09-28 03:34:41
栏目: 智能运维

在 Ubuntu 下使用 iptables 进行限流,通常有以下几种常见方式,按使用场景说明:


一、使用 limit 模块(按数据包速率限流)

适合:限制每秒/每分钟允许的数据包数量

1️⃣ 限制 SSH(22 端口)每秒最多 3 个包

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 个包
  • 超过的包被 DROP
  • 可用于防暴力破解

2️⃣ 限制 ICMP(ping)请求

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 攻击

1️⃣ 限制每个 IP 每分钟最多 10 个 HTTP 请求

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:内核中限流表名(必须唯一)

2️⃣ 限制每个 IP 每秒最多 5 个连接请求

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

三、限制新连接数(connlimit)

适合:限制单 IP 并发连接数

限制每个 IP 最多 20 个 SSH 连接

iptables -A INPUT -p tcp --dport 22 \
  -m connlimit --connlimit-above 20 -j DROP

四、配合 state(只限制新连接)

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

五、保存 iptables 规则(Ubuntu)

Ubuntu 18.04+

apt install iptables-persistent
netfilter-persistent save

或手动:

iptables-save > /etc/iptables/rules.v4

六、常见误区

❌ limit 不是“带宽限速”,而是包速率 ✅ 真·带宽限速要用 tc(traffic control)


七、如果你想要的是「带宽限速」

告诉我:

  • 网卡名(如 eth0)
  • 限速目标(上传/下载)
  • 限速值(如 10Mbps)

我可以给你 tc 示例。


如果你能说明:

  • 限流对象(IP / 端口 / 协议)
  • 限流维度(速率 / 连接数 / 带宽)

我可以给你精准 rule。

0 踩