iptables本身不是压测工具,但可配合ab、wrk等工具模拟高并发瓶颈,通过--syn限新建连接、connlimit限单ip并发、recent模块实现10秒内15次访问等策略验证限流效果,规则需按序配置并用-v参数实时观测计数。

iptables 本身不是压测工具,但可以配合压力测试(如 ab、wrk、siege)做“人为限流”,模拟高并发下的服务瓶颈或验证限流策略有效性。关键不是用 iptables 发起请求,而是用它在被测服务器上设置可控的流量拦截点,让压测结果反映真实限流行为。
限制每秒新建连接数(模拟连接层限流)
这是最常用、最贴近 nginx limit_req 的方式,适合测试服务能否扛住突发 TCP 握手压力:
- 允许每秒最多 20 个新连接(burst 容忍 50 个),超出即丢弃 SYN 包:
iptables -A INPUT -p tcp --syn -m limit --limit 20/s --limit-burst 50 -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP - 注意:规则顺序很重要,
--syn确保只匹配三次握手首包;--limit-burst是初始令牌桶容量,避免压测刚启动就被全拦。
限制单 IP 并发连接数(模拟客户端连接数控制)
适用于测试防爬、防暴力扫描类策略,验证是否能有效抑制单源高频建连:
- 限制每个源 IP 对端口 80 的并发连接数不超过 3:
iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 3 -j DROP - 若需排除本地调试 IP(如 192.168.1.100),加一条前置放行:
iptables -I INPUT -s 192.168.1.100 -j ACCEPT - 使用
ss -nt state established | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr可实时观察各 IP 当前连接数。
基于时间窗口的访问频次控制(模拟接口级 QPS 限流)
用 recent 模块实现“10 秒内最多 15 次访问”,更接近业务接口限流逻辑:
- 先标记每次新请求:
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --set --name httpreq --rsource - 再检查并拦截超频请求:
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 10 --hitcount 16 --name httpreq --rsource -j DROP - 测试时可用
curl -s http://localhost/ &快速并发发起请求,观察响应延迟与失败率变化。
验证与清理要点
压测前后必须确认规则生效且可逆:
- 查看带计数的规则:iptables -L INPUT -vn --line-numbers(注意
-v显示 pkts/bytes 计数) - 临时清空 INPUT 链所有自定义规则:iptables -D INPUT [行号] 或 iptables -F INPUT(慎用,确保已有基础策略)
- 规则不持久——重启即失效,压测完无需手动恢复,适合临时沙箱环境。











