今天我将展示如何在 OpenResty Edge 中启用 Web 应用防火墙,即 WAF。

OpenResty Edge 的 WAF 平台比几乎所有开源的 WAF 解决方案快很多倍,例如 ModSecurity 和 lua-resty-waf。

Embeded image

为应用程序启用 WAF

让我们进入 OpenResty Edge 的 Admin Web 控制台。这是我们控制台的样本部署。每个用户都有自己的本地部署。

Screenshot

这一次我们继续使用 test-edge.com 域名的样本应用。

Screenshot

进入这个应用。

Screenshot

进入 Page Rule 页面。

Screenshot

在之前的教程中我们已经设置了一个反向代理的页面规则。

Screenshot

现在来启用一些 WAF 规则集。

点击编辑这个页面规则。

Screenshot

需要点击这个开关启用 WAF。

Screenshot

Screenshot

我们可以选择要启用的 WAF 规则集。

Screenshot

这里我们只保留默认的规则集。

Screenshot

选择要对命中 WAF 规则的请求执行的动作。

Screenshot

Log only 这个动作可以帮助我们测试 WAF 规则而不影响请求本身。

Screenshot

保存这个规则。

Screenshot

像往常一样,需要发布一个新的版本来推送我们刚才的改动。

Screenshot

点击这个按钮。

Screenshot

发布!

Screenshot

新版本现在已经同步到所有的网关服务器上了。

Screenshot

现在,新的页面规则已经被推送到所有的网关集群和服务器。

Embeded video

Embeded video

Embeded video

这些配置的变化不需要服务器重载、重启或二进制升级。所以它是非常高效和可扩展的。

Embeded image

测试应用程序的 WAF 设置

现在发送一个试图进行 SQL 注入的恶意请求。

Screenshot

该请求返回源站的默认索引页。这是符合预期的,因为我们选择了 Log only 这个动作。在 Web 控制台中检查 WAF 命中日志。

Screenshot

Screenshot

可以看到,这个规则确实被命中了并且被记录了下来。

Screenshot

这一部分显示了被 WAF 捕获的请求的细节。

Screenshot

点击检查规则按钮,查看命中的 WAF 规则的细节。

Screenshot

这里显示了该规则的 Edgelang 定义。

Screenshot

禁用和重新启用 WAF

如果发现有误报的情况,可以点击关闭这个开关,单独禁用相应的 WAF 规则。

Screenshot

被禁用的规则将显示在 WAF 配置页面上。

Screenshot

这里是所有被禁用的 WAF 规则的列表。

Screenshot

而这就是我们刚刚禁用的 WAF 规则。

Screenshot

点击删除按钮可以重新启用这个规则。

Screenshot

Screenshot

WAF 白名单

此外,为了节省 CPU 资源,您可以添加一个 WAF 白名单列出所有应该绕过 WAF 的请求。

Screenshot

例如,一般情况下不需要使用 WAF 过滤静态资源。跳过这些资源可以减少服务器的开销。

Screenshot

Screenshot

修改 WAF 命中之后的拦截动作

这一次,让我们把 “Log only” 的动作改成别的。比如返回一个 403 错误响应。

Embeded image

跳转到 Page Rule 页面。

Screenshot

再次编辑页面规则。

Screenshot

改变动作。

Screenshot

这次我们会阻止恶意的请求。

Screenshot

这里我们可以设置敏感度等级。

Screenshot

另外,我们也可以设置一个分数阈值。

Screenshot

它是所有命中的 WAF 规则的风险评分之和。刚才设置的动作只有在达到总分阈值的情况下才会被执行。保存这个规则。

Screenshot

再次发布配置的变化。

Screenshot

Screenshot

Screenshot

Screenshot

测试新的拦截动作

再次发送恶意请求。

Screenshot

这次服务器返回了一个 “403 Forbidden” 的响应。

再看一下 WAF 的日志页面。

Screenshot

这里记录的动作确实是 “用 HTTP 代码 403 阻止”。

Screenshot

创建 WAF 规则集

WAF 平台是非常灵活和可扩展的。你也可以创建你自己的 WAF 规则集。

Screenshot

转到全局配置页面。

Screenshot

点击 “全局 WAF” 菜单项。

Screenshot

单击 “新建规则集” 按钮。

Screenshot

在这里输入规则集的名称和定义。

Screenshot

可以使用 Edge 语言中定义 WAF 规则。Edge 语言简称 Edgelang。

Screenshot

保存这个规则集。

Screenshot

退出这个页面。

Screenshot

OpenResty Edge 中 WAF 的实现

OpenResty Edge 的 WAF 效率极高。因为它实现了许多先进的优化技术。

它支持将所有 WAF 规则所引用的正则表达式合并到一个状态机中。这样,它只需扫描一次请求数据,就能立即知道能匹配到哪些规则和这些规则的哪些部分。

它还支持把所有 Edgelang 规则的常量字符串前缀和后缀模式组合成单一的树状数据结构。

Screenshot

Screenshot

Screenshot

这些优化不仅仅是针对 WAF 平台的。

所有的页面规则和 Edge 语言规则也都具有完全相同的优化。

Screenshot

这就是我今天要讲的内容。

Screenshot

如果你喜欢这个教程,请订阅这个博客网站和我们的 YouTube 频道B 站频道。谢谢!

关于本文和关联视频

本文和相关联的视频都是完全由我们的 OpenResty Showman 产品从一个简单的剧本文件自动生成的。

关于作者

章亦春是开源 OpenResty® 项目创始人兼 OpenResty Inc. 公司 CEO 和创始人。

章亦春(Github ID: agentzh),生于中国江苏,现定居美国湾区。他是中国早期开源技术和文化的倡导者和领军人物,曾供职于多家国际知名的高科技企业,如 Cloudflare、雅虎、阿里巴巴, 是 “边缘计算“、”动态追踪 “和 “机器编程 “的先驱,拥有超过 22 年的编程及 16 年的开源经验。作为拥有超过 4000 万全球域名用户的开源项目的领导者。他基于其 OpenResty® 开源项目打造的高科技企业 OpenResty Inc. 位于美国硅谷中心。其主打的两个产品 OpenResty XRay(利用动态追踪技术的非侵入式的故障剖析和排除工具)和 OpenResty Edge(最适合微服务和分布式流量的全能型网关软件),广受全球众多上市及大型企业青睐。在 OpenResty 以外,章亦春为多个开源项目贡献了累计超过百万行代码,其中包括,Linux 内核、Nginx、LuaJITGDBSystemTapLLVM、Perl 等,并编写过 60 多个开源软件库。

关注我们

如果您喜欢本文,欢迎关注我们 OpenResty Inc. 公司的博客网站 。也欢迎扫码关注我们的微信公众号:

我们的微信公众号

翻译

我们提供了英文版原文和中译版(本文)。我们也欢迎读者提供其他语言的翻译版本,只要是全文翻译不带省略,我们都将会考虑采用,非常感谢!