iptables的limit模块可限制单IP对Web接口的新连接频率,通过--limit和--limit-burst参数控制平均速率与突发容量,配合--state NEW匹配TCP SYN包,实现低开销、高响应的首道速率防护。

用 iptables 的 limit 模块限制单 IP 对 Web 接口的连接频率,能有效缓解自动化暴力探测,比如反复提交登录、注册或 API 密钥校验请求。它不依赖外部服务,响应快、开销低,适合做第一道速率门槛。
基础限速:每秒/每分钟允许多少次新连接
limit 模块统计的是单位时间内的“新连接请求数”(即 TCP SYN 包),不是并发数,也不是请求内容。关键参数是 --limit(平均速率)和 --limit-burst(突发容量):
- --limit 10/minute:平均每分钟最多放行 10 个新连接
- --limit-burst 20:初始允许最多 20 个连续新连接(用于应对合法用户短时重试)
- 超出 burst 后,后续连接按 --limit 速率逐步放行;超速部分直接丢弃(-j DROP)或拒绝(-j REJECT)
针对 Web 端口(80/443)添加限速规则
以 HTTP(端口 80)为例,插入一条带限速的 INPUT 规则:
sudo iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m limit --limit 15/minute --limit-burst 30 -j ACCEPTsudo iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j DROP
说明:
- 第一行:只对新连接(--state NEW)启用限速,匹配则放行
- 第二行:所有未被上一行放行的新连接全部丢弃(必须放在后面,否则限速失效)
- HTTPS(443)只需把 --dport 80 改为 443,逻辑完全一致
区分业务场景调整阈值
固定一套数值不适合所有接口。应根据实际访问特征设定:
- 静态页面或 CDN 回源:可设宽松些,如 50/minute
- 登录页或密码重置接口:建议收紧,如 5/minute,burst 设为 10
- 内部 API 或管理后台:可设极低,如 3/minute,burst=5
- 若发现误伤(如用户刷新过快被限),优先调高 burst,而非 limit
验证与持续维护
规则加完后别跳过验证:
- 查看是否生效:sudo iptables -L INPUT -n | grep ':80',确认含 limit 字样
- 模拟探测测试:用 curl 或 ab 工具循环发请求,观察第 N+1 次开始明显延迟或失败
- 清空计数器(临时调试用):sudo iptables -Z INPUT
- 保存规则(Ubuntu/Debian):sudo netfilter-persistent save;CentOS:sudo service iptables save

















