OpenResty Edge WAF:启用、测试与拦截攻击
OpenResty Edge 内置高性能 WAF,直接在 Web 控制台按应用启用:选择规则集,先用仅记录(Log only)模式试运行,查看命中日志,再把动作切换为返回 403 拦截——所有配置发布到全部网关服务器,无需任何 reload 或重启。
OpenResty Edge 的 WAF 引擎也比 ModSecurity、lua-resty-waf 等开源 WAF 快数倍,具体数据见 WAF 与 ModSecurity 的性能对比实测。本文聚焦控制台操作:逐步完成 WAF 的启用、测试、调优与扩展。
以仅记录模式为应用启用 WAF
让我们进入 OpenResty Edge 的 Admin Web 控制台。这是我们控制台的样本部署。每个用户都有自己的本地部署。
这一次我们继续使用 test-edge.com 域名的样本应用。
进入这个应用。
进入 Page Rule 页面。
在之前的教程中我们已经设置了一个反向代理的页面规则。
现在来启用一些 WAF 规则集。
点击编辑这个页面规则。
需要点击这个开关启用 WAF。
我们可以选择要启用的 WAF 规则集。
这里我们只保留默认的规则集。
选择要对命中 WAF 规则的请求执行的动作。
Log only 这个动作可以帮助我们测试 WAF 规则而不影响请求本身。
保存这个规则。
像往常一样,需要发布一个新的版本来推送我们刚才的改动。
点击这个按钮。
发布!
新版本现在已经同步到所有的网关服务器上了。
现在,新的页面规则已经被推送到所有的网关集群和服务器。
这些配置的变化不需要服务器重载、重启或二进制升级。所以它是非常高效和可扩展的。
发送测试攻击并查看 WAF 日志
现在发送一个试图进行 SQL 注入的恶意请求。
该请求返回源站的默认索引页。这是符合预期的,因为我们选择了 Log only 这个动作。在 Web 控制台中检查 WAF 命中日志。
可以看到,这个规则确实被命中了并且被记录了下来。
这一部分显示了被 WAF 捕获的请求的细节。
点击检查规则按钮,查看命中的 WAF 规则的细节。
这里显示了该规则的 Edgelang 定义。
禁用与重新启用单条 WAF 规则
如果发现有误报的情况,可以点击关闭这个开关,单独禁用相应的 WAF 规则。
被禁用的规则将显示在 WAF 配置页面上。
这里是所有被禁用的 WAF 规则的列表。
而这就是我们刚刚禁用的 WAF 规则。
点击删除按钮可以重新启用这个规则。
添加 WAF 白名单以节省 CPU
此外,为了节省 CPU 资源,您可以添加一个 WAF 白名单列出所有应该绕过 WAF 的请求。
例如,一般情况下不需要使用 WAF 过滤静态资源。跳过这些资源可以减少服务器的开销。
WAF 命中返回 403:敏感度与风险评分阈值
这一次,让我们把 “Log only” 的动作改成别的。比如返回一个 403 错误响应。
跳转到 Page Rule 页面。
再次编辑页面规则。
改变动作。
这次我们会阻止恶意的请求。
这里我们可以设置敏感度等级。
另外,我们也可以设置一个分数阈值。
它是所有命中的 WAF 规则的风险评分之和。刚才设置的动作只有在达到总分阈值的情况下才会被执行。保存这个规则。
再次发布配置的变化。
在 WAF 日志中验证 403 拦截
再次发送恶意请求。
这次服务器返回了一个 “403 Forbidden” 的响应。
再看一下 WAF 的日志页面。
这里记录的动作确实是 “用 HTTP 代码 403 阻止”。
用 EdgeLang 创建自定义 WAF 规则集
WAF 平台是非常灵活和可扩展的。你也可以创建你自己的 WAF 规则集。
转到全局配置页面。
点击 “全局 WAF” 菜单项。
单击 “新建规则集” 按钮。
在这里输入规则集的名称和定义。
可以使用 Edge 语言中定义 WAF 规则。Edge 语言简称 Edgelang。
保存这个规则集。
退出这个页面。
无论启用多少规则集,WAF 依然保持高速:OpenResty Edge 会把所有规则的正则表达式合并成单一状态机,每个请求只扫描一次。实现细节与性能数据见 OpenResty Edge WAF 如何超越 ModSecurity。
FAQ:OpenResty 上的 WAF
开源版 OpenResty 自带 WAF 吗?
没有。开源版 OpenResty 不包含任何 WAF 模块。本文演示的 WAF 是 OpenResty Edge 的功能——它是基于 OpenResty 构建的商业网关产品,开箱即带上文展示的托管规则集、仅记录模式、WAF 日志和拦截动作。
开源版 OpenResty 上能跑 ModSecurity 吗?
OpenResty 没有官方的 ModSecurity 模块。你需要自行针对 OpenResty 捆绑的 nginx 编译 libmodsecurity 和第三方 nginx 连接器,而且 ModSecurity 的原厂商已于 2024 年终止支持,项目移交社区维护。如今这是一条完全自行承担维护成本的路线。
lua-resty-waf 还能用吗?
基本不能。lua-resty-waf 已多年无人维护,不建议用于新的生产部署。在 OpenResty 技术栈上,可持续维护的 WAF 现实选择是 OpenResty Edge 内置的 WAF,也就是本文所配置的引擎。
如何在不拦截真实流量的前提下测试 WAF 规则?
启用规则集时把 WAF 动作设为"仅记录(Log only)"。命中规则的请求会原样转发到源站,但每次命中都会记入 WAF 日志,通过检查规则按钮可以看到具体命中了哪条规则。确认规则无误后,再把动作切换为拦截并发布配置。
OpenResty Edge WAF 如何决定是否拦截请求?
每条命中的 WAF 规则都带有风险评分,单个请求命中的所有规则评分会累加。只有总分达到阈值时拦截动作才会执行;阈值既可以通过选择敏感度等级设置,也可以直接填写分数。
如何在 OpenResty Edge 中禁用单条 WAF 规则?
如果某条规则持续误伤正常流量,可在 WAF 日志中只关闭这一条规则,规则集其余部分继续生效。被禁用的规则列在 WAF 配置页面上,删除对应条目即可重新启用。对完全不需要过滤的请求(如静态资源)也可以加入白名单,还能节省 CPU。
关于 OpenResty Edge
OpenResty Edge 是一款专为微服务和分布式流量架构设计的全能型网关软件,由我们自主研发。它集流量管理、私有 CDN 构建、API 网关、安全防护等功能于一体,帮助您轻松构建、管理和保护现代应用程序。OpenResty Edge 拥有业界领先的性能和可扩展性,能够满足高并发、高负载场景下的苛刻需求。它支持调度 K8s 等容器应用流量,并可管理海量域名,轻松满足大型网站和复杂应用的需求。
如果你喜欢这个教程,请订阅这个博客网站和我们的 YouTube 频道 或 B 站频道。谢谢!
关于作者
章亦春是开源 OpenResty® 项目创始人兼 OpenResty Inc. 公司 CEO 和创始人。
章亦春(Github ID: agentzh),生于中国江苏,现定居美国湾区。他是中国早期开源技术和文化的倡导者和领军人物,曾供职于多家国际知名的高科技企业,如 Cloudflare、雅虎、阿里巴巴, 是 “边缘计算“、”动态追踪 “和 “机器编程 “的先驱,拥有超过 22 年的编程及 16 年的开源经验。作为拥有超过 4000 万全球域名用户的开源项目的领导者。他基于其 OpenResty® 开源项目打造的高科技企业 OpenResty Inc. 位于美国硅谷中心。其主打的两个产品 OpenResty XRay(利用动态追踪技术的非侵入式的故障剖析和排除工具)和 OpenResty Edge(最适合微服务和分布式流量的全能型网关软件),广受全球众多上市及大型企业青睐。在 OpenResty 以外,章亦春为多个开源项目贡献了累计超过百万行代码,其中包括,Linux 内核、Nginx、LuaJIT、GDB、SystemTap、LLVM、Perl 等,并编写过 60 多个开源软件库。
关注我们
如果您喜欢本文,欢迎关注我们 OpenResty Inc. 公司的博客网站 。也欢迎扫码关注我们的微信公众号:
翻译
我们提供了英文版原文和中译版(本文)。我们也欢迎读者提供其他语言的翻译版本,只要是全文翻译不带省略,我们都将会考虑采用,非常感谢!













































































