OpenResty Edge 的高性能 Web 应用防火墙(WAF)
今天我将展示如何在 OpenResty Edge 中启用 Web 应用防火墙,即 WAF。
OpenResty Edge 的 WAF 平台比几乎所有开源的 WAF 解决方案快很多倍,例如 ModSecurity 和 lua-resty-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 资源,您可以添加一个 WAF 白名单列出所有应该绕过 WAF 的请求。
例如,一般情况下不需要使用 WAF 过滤静态资源。跳过这些资源可以减少服务器的开销。
修改 WAF 命中之后的拦截动作
这一次,让我们把 “Log only” 的动作改成别的。比如返回一个 403 错误响应。
跳转到 Page Rule 页面。
再次编辑页面规则。
改变动作。
这次我们会阻止恶意的请求。
这里我们可以设置敏感度等级。
另外,我们也可以设置一个分数阈值。
它是所有命中的 WAF 规则的风险评分之和。刚才设置的动作只有在达到总分阈值的情况下才会被执行。保存这个规则。
再次发布配置的变化。
测试新的拦截动作
再次发送恶意请求。
这次服务器返回了一个 “403 Forbidden” 的响应。
再看一下 WAF 的日志页面。
这里记录的动作确实是 “用 HTTP 代码 403 阻止”。
创建 WAF 规则集
WAF 平台是非常灵活和可扩展的。你也可以创建你自己的 WAF 规则集。
转到全局配置页面。
点击 “全局 WAF” 菜单项。
单击 “新建规则集” 按钮。
在这里输入规则集的名称和定义。
可以使用 Edge 语言中定义 WAF 规则。Edge 语言简称 Edgelang。
保存这个规则集。
退出这个页面。
OpenResty Edge 中 WAF 的实现
OpenResty Edge 的 WAF 效率极高。因为它实现了许多先进的优化技术。
它支持将所有 WAF 规则所引用的正则表达式合并到一个状态机中。这样,它只需扫描一次请求数据,就能立即知道能匹配到哪些规则和这些规则的哪些部分。
它还支持把所有 Edgelang 规则的常量字符串前缀和后缀模式组合成单一的树状数据结构。
这些优化不仅仅是针对 WAF 平台的。
所有的页面规则和 Edge 语言规则也都具有完全相同的优化。
这就是我今天要讲的内容。
关于 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. 公司的博客网站 。也欢迎扫码关注我们的微信公众号:
翻译
我们提供了英文版原文和中译版(本文)。我们也欢迎读者提供其他语言的翻译版本,只要是全文翻译不带省略,我们都将会考虑采用,非常感谢!