真正有效的api防护需组合hashlimit+state+recent:先限定端口与路径,再用hashlimit按源ip限流,recent识别慢速扫描,state过滤非法状态,connlimit控并发,最后动态调参验证。

用 iptables 限制单 IP 对 API 接口的恶意探测,核心是区分“正常调用”和“试探行为”——不能只看请求数量,还要结合连接状态、请求频率、目标端口与路径特征。纯靠 limit 模块容易误伤,真正有效的做法是组合 hashlimit + state + recent,按需分层拦截。
锁定API入口,精准匹配协议与端口
恶意探测通常打在业务暴露端口(如 8080、3000、5000),必须先限定作用范围,避免规则泛化:
- 明确指定协议和目的端口:
-p tcp --dport 8080,不加则默认影响所有端口 - 若 API 仅走 HTTPS,可进一步限定:
-m string --string "/api/" --algo bm(需加载xt_string模块) - 避免在 INPUT 链开头就加宽泛规则,应放在已允许 SSH/健康检查等必要流量之后
用 hashlimit 实现每 IP 独立限流
这是防高频刷接口最实用的一层。它对每个源 IP 单独建令牌桶,既防暴力扫路径,也控请求节奏:
- 基础写法(每 IP 每秒最多 8 次,突发容许 24 次):
iptables -A INPUT -p tcp --dport 8080 -m hashlimit \--hashlimit-name api-per-ip \--hashlimit 8/sec \--hashlimit-burst 24 \--hashlimit-mode srcip \-j ACCEPT -
--hashlimit-mode srcip是关键,确保不同用户互不影响;不要用dstport单独匹配,否则失去隔离意义 - 必须紧接一条
-j DROP规则,否则未匹配的包仍会继续向下匹配,默认策略可能放行
用 recent 模块识别慢速扫描行为
很多探测工具(如 curl 脚本、自定义 Python 扫描器)故意拉长间隔、分散端口或路径,避开秒级限流。这时要抓“单位时间内的新连接频次”:
- 记录每 IP 的 SYN 包(新建连接):
iptables -A INPUT -p tcp --syn --dport 8080 -m recent --name apisyn --set -j ACCEPT - 60 秒内发起 5 个以上新连接即拉黑:
iptables -A INPUT -p tcp --syn --dport 8080 -m recent --name apisyn --rcheck --seconds 60 --hitcount 5 -j DROP - 搭配日志便于回溯:
-j LOG --log-prefix "API-SYN-SCAN: ",日志中能看到触发 IP 和时间
配合 state 和 connlimit 封堵异常连接态
真实攻击常伴随半开连接堆积、非法 TCP 标志(如 SYN+FIN)、或短时并发突增。补充这两类规则能覆盖更多边缘场景:
- 拒绝非法状态包(非 ESTABLISHED/RELATED 的 ACK、FIN-ACK 等):
iptables -A INPUT -p tcp --dport 8080 -m state ! --state ESTABLISHED,RELATED -j DROP - 限制单 IP 并发未完成连接数(防 SYN Flood 类试探):
iptables -A INPUT -p tcp --dport 8080 -m connlimit --connlimit-above 3 --connlimit-mask 32 -j REJECT --reject-with tcp-reset - 注意:connlimit 规则建议放在 hashlimit 之前,避免合法高并发用户被提前限流
上线后记得用 watch -n1 'cat /proc/net/ipt_hashlimit/api-per-ip' 查实时桶状态,再用简单脚本模拟多 IP、多路径请求验证效果。规则不是设完就一劳永逸,要根据日志里真实的 499(客户端断连)、400(非法请求)、SYN_RECV 连接数变化来动态调参。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










