iptables limit模块限单ip需配合-s指定源ip,以令牌桶平滑控速,结合-p、--dport限定端口,--limit与--limit-burst协同调节速率和突发值,并须用accept+drop规则闭环实现有效限流。

用 iptables 的 limit 模块限制单 IP 流量峰值,核心是控制单位时间内该 IP 匹配规则的数据包数量,但要注意它本身不区分源 IP——必须配合 -s 显式指定 IP,才能实现“单 IP”粒度的限流。它的效果偏“平滑”是因为令牌桶式节奏发放许可,而非硬性阻断所有超限包,适合防轻量刷量、日志洪泛等场景。
明确匹配目标与协议端口
限流不是对所有流量生效,必须锁定具体访问路径:
- 用
-s 192.168.1.100精确限定某一个客户端 IP(支持/32写法) - 加
-p tcp和--dport 8080绑定业务接口端口,避免误伤 SSH、DNS 等管理流量 - 若只限新建连接(如 HTTP 请求),可叠加
-m state --state NEW;若需限制全部数据包(含响应),则不加
设置合理的速率与突发值
--limit 和 --limit-burst 共同决定平滑性:
一款AI工具,主要用于在持久tmux会话中运行AI编码代理(Codex、Claude Code),使用Ralph重试循环和完成钩子处理多步骤编码任务,适合需要提升相关任务效率的用户。
-
--limit 20/minute表示长期平均速率上限为每分钟 20 个包,即平均每 3 秒放行 1 个 -
--limit-burst 5表示初始允许连续通过 5 个包,之后才按节奏控速;burst 太小会卡首屏,太大则失去限流意义 - 常见组合:登录页限速可用
10/minute --limit-burst 3,API 接口可用60/hour --limit-burst 10
配套 DROP 规则形成闭环
仅加 ACCEPT 不等于限流,必须丢弃未被放行的包:
- 先写一条带 limit 的 ACCEPT 规则,放行合规流量
- 紧接着写一条无条件 DROP 规则,目标同样是该 IP + 端口,确保超限包被丢弃
- 两条规则顺序不能颠倒,否则 DROP 会提前拦截一切,limit 形同虚设
验证与微调建议
上线后别只查规则是否存在,要观察真实行为:
- 执行
iptables -vnL INPUT --line-numbers查看命中计数,确认规则在生效 - 用
watch -n1 'iptables -vnL INPUT | grep 192.168.1.100'实时盯住该 IP 的匹配次数变化 - 模拟请求时注意:curl 多次快速发起可能触发 burst 后的限速节奏,响应延迟会逐步拉长,而非立刻失败
- 若发现正常用户也被卡,可适度调高 burst;若攻击仍能穿透,可降低 limit 值或叠加 connlimit 做并发连接数限制










