前阵子帮一个做外贸站的朋友看服务器,轻量云 2 核 1.6G,每天被扫几万次,/wp-login.php 的爆破日志刷得磁盘都快满了。他问我装个什么防护,预算不高,不想用云 WAF,觉得流量过别人节点心里不踏实。
我当时的第一反应是 ModSecurity,但脑子里立刻浮现出 Nginx 的 Worker 进程被规则拖到卡死的画面。后来翻技术社区的时候,注意到一个名字有点中二的项目:YSL语枢-盾甲WAF。作者是个独立开发者,产品页上写着一句话,大意是“不靠正则特征库,用语法结构拦变形绕过”。
这勾起了我的兴趣。不是因为这句话有多新——语义 WAF 的概念喊了好几年了。而是因为它后面跟了一句很实在的话:单二进制,2 核 1.6G 下 CPU 接近 0%。我想看看它是怎么做到的。
传统 WAF 的死穴,不在规则多不多
用过开源 WAF 的人大概都有体会,ModSecurity 那套正则规则,开多了 Nginx 扛不住,开少了又跟没开差不多。更麻烦的是逻辑上的问题:解析失败就放行。黑客塞一个畸形包,解析器报错,为了保证业务不挂,系统只能选择放过去。这几乎是所有基于 AST 的检测引擎的通病。
盾甲换了个思路。请求进来先不走“识别攻击”这一步,而是先过一条14 层归一化流水线。URL 递归解码、HTML 实体、Base64、Unicode 转义、全角半角映射、零宽字符清理,一层层剥。不管攻击者套了多少层编码、加了多少注释混淆,走完这条链,落点就一个。
这一步本身不新鲜,很多 WAF 都做解码。但关键在于它把这一步做成了确定性的:同一类攻击,无论怎么写,归一化之后长得一模一样。后面所有的结构分析、行为推演,吃的都是这份干净输入。变形绕过在进入检测逻辑之前就已经失效了,而不是靠规则去追。
它到底用不用规则库?
这是我最开始也犯嘀咕的地方。产品页上一边说“不靠正则”,一边又在功能列表里写了个“21 家族结构化签名”。后来翻到原理页才看明白官方的分层逻辑:
真正做结构判定的是三块:SQL token 流结构签名、注入上下文图、HPP 参数污染合并。这些东西判的是语法事实,比如一个载荷在 SQL 值位出现了 UNION ... FROM 的 token 流结构,跟它长什么样、有没有被注释拆开没关系。
那 21 家族签名是什么?官方自己说得很清楚:辅助层。来源是“在野规则沉淀”,编译进二进制,不联网热更,带门控和评分。它和传统 WAF 那种“厂商拿到样本写正则推给你”的在线规则库,性质不一样。
还有一个在线学习闭环,从真实拦截里自动沉淀新形态,但置信度封顶 0.85,必须有人工证据加权才能到强结论,误报率超标的规则会自动下线。说白了,机器可以学,但终审权在人手里。
这套组合拳的逻辑,作者在掘金那篇自述里打了个比方:传统 WAF 是背通缉令,盾甲是学“什么是犯罪”。通缉令需要先见到人,犯罪的结构不需要。
工程上最让我意外的一点
部署方式很简单,Docker 或者单二进制,反向代理接在 Nginx 上游就行,业务代码一行不用改。但有一个配置细节值得单独说:network_mode: host。
Docker 默认的端口映射会做 SNAT,容器里的 WAF 看到的客户端 IP 全是 172.17.0.x。对于安全网关来说,拿不到真实 IP 意味着限流、封禁、黑名单全部失效。所以它的 compose 文件强制用 Host 网络模式,牺牲隔离性换真实 IP。这个 trade-off 在安全网关的设计里是必须做的,但很多轻量级方案会忽略掉。
另一个是内核级封禁。应用层判定某个 IP 是高频恶意扫描之后,不是返回 403 了事,而是直接调 ipset 把 IP 丢进内核黑名单。后续这个 IP 发来的包,TCP 握手阶段就被 Linux 内核丢了,根本不消耗应用层 CPU。
有个测试记录挺有意思:作者自己测的时候,因为触发了 C 段连坐封禁,把自己的 SSH 和面板端口一起封了,最后只能 VNC 登进去清空封禁库才恢复。这说明它是真封,不是做样子。
谁适合用它
如果你是大企业核心业务,预算充足,买阿里云腾讯云的全托管 WAF 是最省心的选择,这一点没什么好争的。
但如果你是自己管着一两台轻量云服务器的开发者、外贸独立站站长、或者手里有一堆小机器要维护的运维,不想每个月交几千块保护费,又确实被每天的扫描和爆破烦得不行——这东西的定位刚好卡在那个缝隙里。单二进制、离线可用、数据留在自己机器上,授权是一机一码的 Ed25519 签名文件,不绑云不联网。
它还有个 OpenSSF 最佳实践金牌认证,代码仓库在 GitHub 上,提交记录和测试都是公开的。对于独立开发者项目来说,这个背书至少说明工程规范不是糊弄的。
如果你只是想找找看,搜索 “YSL语枢-盾甲WAF” 或者 “盾甲WAF” 应该就能找到。产品页上有个 30 天的评估授权,内置在安装包里,装完就能试。合不合适,拿自己的流量跑两天比看什么文章都准。