我们是做企业 SaaS 的小团队,就 3 个程序员,之前维护的客户管理 API 总出问题 —— 要么被异常参数搞崩,要么高频请求占满服务器资源,试了几款免费 WAF 都不够灵活。直到用雷池 WAF 的 Lua 脚本自定义规则,才彻底解决问题,现在 API 稳定性从 95% 提到 99.9%,今天分享我们的真实操作,小团队能直接复用。
一、小团队的 API 防护痛点,雷池 Lua 脚本刚好对症
我们的客户管理 API 部署在 Nginx 上,日均请求 30 万次,之前的痛点很具体:
-
参数校验太死板:客户 ID 必须是 “CID+10 位数字”,普通 WAF 只能拦明显异常,遇到 “CID-123456” 这种变形参数就放行,导致后端报错;
-
高频请求难管控:某客户的系统每秒调用 100 次查询接口,占满数据库连接池,普通限流按 IP 限制,又会影响其他客户;
-
定制化需求满足不了:需要根据 “客户等级” 调整防护策略(VIP 客户放宽限制),免费 WAF 没这功能。
雷池的 Lua 脚本正好能解决这些 —— 不用改后端代码,直接在 WAF 层写简单脚本,灵活度远超预设规则,我们 3 个程序员没人懂复杂安全技术,跟着文档也能上手。

二、3 个实操案例:Lua 脚本自定义规则
案例 1:精准校验客户 ID 格式(15 分钟搞定)
客户 ID 格式是 “CID+10 位数字”,之前普通规则拦不住变形参数,用 Lua 脚本写校验逻辑:
-
登录雷池控制台,进入 “规则管理→自定义脚本”,新建 Lua 脚本;
local
cid = ngx.var.arg_cid
if
not
string
.
match
(cid,
"^CID%d%d%d%d%d%d%d%d%d%d$"
)
then
-
绑定到 API 路径 “/api/customer/query”,保存后立即生效。
现在不管是 “CID-123” 还是 “cid123456”,都会被拦截,后端再也没因参数格式报错。

案例 2:按客户账号限流,不影响其他用户(20 分钟)
之前按 IP 限流,会误拦同一 IP 下的多个客户,用 Lua 脚本按客户账号限流:
-
先在雷池 “用户管理” 里给每个客户建专属标识(比如 “client_code”),API 请求时携带该参数;
-
写 Lua 脚本,按 “client_code” 统计请求次数:
local client_code = ngx.var.arg_client_code
if client_code ~= nil then
local key = "limit:" .. client_code
local count = redis.call("incr", key) --
用
Redi
s
计数
redis.call("expire", key, 1) --
1
秒过期
ngx.exit(429) -- 超
过
1
0
次返回限流
-
绑定到 “/api/order/list” 接口,VIP 客户单独调大阈值到 20 次 / 秒。
这样某客户高频调用时,只限制它自己,不影响其他客户,数据库连接池再也没满过。
案例 3:根据客户等级调整防护强度(25 分钟)
VIP 客户需要放宽部分限制(比如允许批量查询),普通客户严格防护,用 Lua 脚本实现:
local
client_level = ngx.var.arg_client_level
local
request_type = ngx.var.request_uri
if
client_level ==
"普通"
and
string
.
match
(request_type,
"/api/batch/query"
)
then
if
client_level ==
"VIP"
then
local
cid = ngx.var.arg_cid
if
cid ~=
nil
and
not
string
.
match
(cid,
"^CID%d%d%d%d%d%d%d%d%d?%d?%d?$"
)
then
现在不同等级客户的防护策略精准匹配,既安全又不影响 VIP 客户体验。
三、小团队的使用心得:不用复杂技术也能上手
-
脚本不用从头写:雷池官网有现成模板,我们的 3 个脚本都是改模板来的,最多改几行逻辑;
-
调试很简单:控制台有 “脚本测试” 功能,输入测试参数,能实时看是否拦截,不用反复上线试错;
-
资源占用低:3 个脚本同时运行,雷池 CPU 占用只增加 5%,API 响应延迟基本没变化。
我们 3 人小团队没专门的安全人员,靠雷池的 Lua 脚本把 API 防护做扎实了,现在客户没再反馈过 API 不稳定的问题。如果你们也是小团队,维护企业服务 API,试试用雷池的 Lua 脚本,灵活又省心
,比花钱买商业 WAF 划算多了。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70048256/viewspace-3104947/
,如需转载,请注明出处,否则将追究法律责任。