前言
上一篇部署了雷池 WAF(Web 应用防火墙),大部分恶意请求在到达应用之前就被自动挡住了。
但 WAF 不是万能的。
攻击者会不断变异 payload(攻击载荷),用 WAF 没见过的新手法绕过检测。
雷池的语义分析引擎很强,但新型攻击和精心构造的变异请求仍然可能漏过。
我在网关日志里确实看到了一些 WAF 放行但明显有问题的请求。
光靠 WAF 被动防御不够,得有一道主动的监控层,把 WAF 漏掉的东西捞回来。
从手动排查到自动化
最开始的做法很原始:每天打开网关日志,人工筛查可疑请求,发现漏网的就在雷池控制台手动加规则。
流量小的时候还能应付,但随着业务线增多,每天几千条请求里混着上百个不同 IP 的扫描,手动处理根本追不上。
试过几个方案都不理想,分两个维度看。
先说日志来源。
ELK 太重,小服务器跑不动,规则维护成本高。
阿里云 SLS 成本也不小,每次拉数据都很慢。
再说恶意分析。
纯 AI 分析把所有 IP 都丢给大模型,效果不错但太慢太贵。
最终想通了一件事:大部分攻击模式是重复的,规则能判定的就不该劳烦 AI。
方案定型为六个阶段的管道:网关日志采集 → 规则预分类 → AI 分析 → 写入雷池 WAF → 飞书报告 → 规则自学习。

日志采集:全量数据的源头
管道的第一步是拿到全量请求日志。
没有用到 ELK 或阿里云 SLS,而是直接读取服务器本地的网关日志文件。
网关按小时轮转日志,格式是标准的 nginx combined 风格,每条记录包含客户端 IP、请求方法、路径、状态码、UA、Referer 等字段。
采集器通过 SSH 到网关节点读取日志文件,用正则逐行解析,按 IP 聚合访问路径、状态码、UA 等信息,输出结构化 JSON 供后续阶段使用。
相比 SLS 的条数限制和查询延迟,本地日志是全量的,每小时少则上千条多则数千条,一条都不漏。
规则预分类:AI 的减负关键
这是整套系统最重要的设计。
互联网上的扫描器套路高度固定,有人用 sqlmap 测注入,有人用 gobuster 暴力扫目录,有人直接访问 wp-admin 后台。
这些模式用规则就能精准识别,不需要 AI 来判断。
预分类器对每个 IP 给出三种判定。
规则明确判定正常的标记为 clean,直接跳过。
规则明确判定攻击的标记为 malicious,直接提交封禁。
规则无法判定的标记为 unknown,才交给 AI 做最终判断。
内置规则覆盖三大维度。
UA 维度识别扫描工具,zgrab、sqlmap、nikto 这些一听就不是正经浏览器。
路径维度识别敏感文件探测、CMS 后台扫描、Webshell 入口。
行为维度识别极短 UA、高 404 比例、CLI 工具探测后台路径等异常模式。
实际效果很显著。
1 小时内 104 个 IP,规则直接判定 61 个正常加 1 个恶意,只有 42 个交给 AI 分析,负载降低近 60%。
AI 只处理模糊情况
WAF 漏过的、规则也判不了的灰地带,才轮到 AI 出场。
比如某个 IP 用正常浏览器 UA 访问了几个 404 页面,但也碰了一下 admin 路径,说不清是迷路的真实用户还是低调的扫描器,就丢给大模型判断。
调用 DeepSeek 把 IP 的访问路径、UA、状态码、归属地发给模型,让它给出判定。
AI 判定中内置了大量误报规避逻辑,避免把正常用户误杀。
这些逻辑是被误报教训过几次后逐步加上去的,不是一开始就有的。
回写雷池 WAF:让防火墙越用越强
判定为恶意的 IP 和攻击模式,最终都通过雷池 OpenAPI 回写到 WAF 的自定义规则里。
这是整套系统的核心思路:WAF 漏掉的东西,找到之后再喂回给 WAF。
这样下次再遇到之前漏掉的恶意 IP 就直接在 WAF 层面拦截了。
回写前有多道安全检查,防止误封正常用户和业务流量。
每轮处理完自动生成安全报告,通过 lark-cli 推送到飞书群。
如果某次误封了,在雷池控制台删掉对应规则即可,也可以把 IP 写入白名单文件做预处理。
规则自学习:越用越聪明
本轮处理完成后,从 AI 的分析结果中提取新的攻击模式,通过雷池 OpenAPI 写入 WAF 规则库。
逻辑很简单:这轮 AI 判定某 IP 是攻击,就提取它的路径模式和 UA 特征,自动创建为雷池 WAF 的自定义规则。
下轮同样的攻击直接被 WAF 拦截,不再需要管道介入。
比如 AI 发现有人用变异 payload 探测某个接口,自动提取特征写入 WAF 规则。
下次再有类似请求,WAF 直接拦截,管道连看都不用看。
随着运行次数增加,WAF 的规则越来越丰富,漏过的攻击越来越少,整个系统越来越强。
定时运行
每小时通过 cron 执行一次完整的六阶段流程。
也支持单独运行某个阶段做调试,比如只采集日志看看数据量,或者只跑分类器看看判定分布。
整个管道用 Hermes Agent 编排,放在安全专用的 profile 下面,脚本之间通过 JSON 文件传递数据,互不耦合。
你的业务有没有做过主动安全防御?
评论区聊聊你的方案。






















