一、背景
AWS在2019年底的 re-Invent 2019 大会上,发布了WAF V2产品,提供Managed Rules。当使用WAF V2对Wordpress博客进行防护时候,一些正常的访问行为包括登录后提示二次确认邮箱、发送某些body过大的文章都会被WAF V2 AWS托管规则的CommonRule视为危险举动而拦截。本文将描述如何调整WAF V2托管规则并适应Wordpress应用。
二、AWS的WAF如何实现
1、空白WAF引擎+第三方托管的规则
过去AWS一直提供一个空白的WAF过滤引擎,然后开放引擎给第三方传统安全厂家如F5、Fortinet等安全公司。第三方厂家制作 Managed rules subscription,放在 AWS Marketplace 应用市场里边出售订阅规则。每个厂家发布的订阅规则收费10~30USD每个规则。订阅规则采用“黑盒”模式,即对外不公布规则内部本身有哪些防护能力,属于厂家机密。这种方式的优势:弹性好,处理能力强,可以与CDN、ELB等组件关联,且天然高可用。
注:这种实现方式,中国本土的几家友商,一直在提供云厂商自己维护的规则列表,可以一键打开防护,不需要订阅第三方。
2、EC2+AMI+硬件厂家的虚拟化版本
此外,AWS的另一种实现WAF的方式,是通过Marketplace购买AMI的方式。也就是在EC2虚拟机上运行一个软件版本的防火墙软件,即可以理解为F5、Paloalto等硬件盒子的虚拟机版本。然后,将流量通过NLB送给这个EC2实例,进行流量过滤和清洗,再将干净流量送到应用服务器所在的EC2上。这种方式,可以享受到全功能的硬件体验,硬件盒子的管理界面、功能配置都是高度一致的。这种方式的优势:体验与过去用硬件盒子高度一致,功能非常强大,厂家覆盖全面,包括Cisco、Fortinet、Checkpoint、Paloalto等等一票国际大牌厂家。缺点:天然不高可用,需要多个EC2分别跑在不同AZ上实现高可用,还需要NLB调度流量,大带宽处理能力受到EC2网络限制。
注:这种实现方式,中国本土的几家友商,提供的多为本土厂家的虚拟防火墙镜像,例如深信服、绿盟等。
3、AWS新产品 – AWS管理的托管规则
在2019年底,AWS在以上第一种实现方式“空白WAF引擎+第三方托管的规则”的基础上,发布了由AWS自行管理的订阅规则,被称为第二代WAF,即WAF V2。在这个版本上,WAF控制台界面提供了一系列AWS自己维护的防护规则可以订阅。这种实现方式,如此,大大方便了使用,不需要再去关联第三方应用了。当然,这个订阅规则也是黑盒模型,不对外公开具体规则列表。
于此同时,原先的合作伙伴的订阅规则继续存在,可以作为相互的补充。
三、Wordpress兼容问题
这个规则上线后,第一时间放到了wordpress上防护体验,发现一些规则与wordpress不兼容,会影响正常使用,包括:发帖、上传图片等多种操作。错误现象可能表现为:发帖失败报告无效JSON,上传图片失败等。
排查错误是否是代码错误还是WAF拦截可以从WAF控制台引擎入手。如下图所示,进入WEB ACLs界面,看到页面下方会显示最近近期规则拦截的情况(有几分钟延迟)。
查看日志可以通过源IP、访问地址、时间来判断是否是用户正常访问触发、还是恶意攻击扫描触发、还是自己调适错误触发。确定了要检查的是那一条后,看其中rules规则,即是触发拦截的规则。例如上图中是“AWS#AWSManagedRulesCommonRuleSet#CrossSiteScripting_BODY”这一条。
接下来进去rules界面,找到触发规则的“AWSManagedRulesCommonRuleSet”,在下面的截图中处于最上方第一条。点击右上角的Edit按钮。
编辑界面下,从清单中,找到链接的规则,将其设置为override。如下截图中还有一条红色的也是类似方式检查出来的规则需要被跳过。
此时还需要注意,编辑规则的页面最上方还有一个统一的按钮:Enable count mode。注意这个开关需要处于关闭模式。只修改下方单独规则的跳过就可以,不要修改整个rule的actions。否则整个rule里边所有规则都将变成只计数不拦截了。
点击页面最下方的保存。
现在,再去访问Wordpress,尝试刚才触发拦截的操作,即可正常通过。
至此就给AWS WAF V2设置了针对的wordpress的bypass规则。