近期雷池发布了6版本,相比5版本,最新的v6提供了动态防护能力(链接: 雷池社区版发布动态防护能力),社区版也有幸能够体验此功能(虽然社区版单站点只支持一个路径资源的动态防护)
这里以最近很火的自托管个人相册管理工具immich为例,尝试为其打开动态防护功能。
篇幅限制,这里仅涉及雷池配置部分,关于 immich 的搭建请直接移步官方文档。
雷池作为串连接入我们的访问链路,可以将其理解为 Nginx, 这里假设我们的 immich 部署在内网的 192.168.1.2 8080端口,域名http://immich.com解析到了雷池所在机器的IP,拟通过https://immich.com来访问 则上图站点配置应当为:
端口: 443
上游服务器: http://192.168.1.2:8080
至此,我们可以直接通过访问 https://immich.com 来访问到我们的 immich 服务。
进入 “站点管理”,点击对应站点的 “动态防护”:
打开动态防护,选择 添加需要保护的资源
注意: 这里被保护的资源列表来自于站点资源采集(点击站点可以进入查看已经采集的资源),采集是只有访问过的资源才会被采集到(并且上限500个资源),因此,当你在”添加需要保护的资源“中没有发现想要的资源时,需要试图访问一下,等待雷池采集,再重新添加。
开启动态防护后,我们访问指定的资源(目前似乎还只支持静态资源)便会经过雷池的混淆:
访问时会先经过浏览器解密:
查看被访问的资源源代码已经被雷池混淆过:
加密前:
加密前
加密后:
加密后
大致在devtools看了一下解密过程:
访问时通过查看容器的日志发现访问动态防护资源时,safeline-chaos有这样的两条日志:
猜测是雷池在请求链路的过程中将指定path的资源经过了AES-GCM加密,返回加密混淆后的数据给到浏览器,浏览器再通过js来进行解密,完成后最终渲染。
结语
目前来看,动态防护已经能够阻挡一大部分机器爬虫了(互联网中,大部分爬虫也是来自于广撒网的机器人爬虫),针对一般的漏洞扫描器也有比较好的效果。
不过需要注意的是,由于许多搜索引擎对JS的支持问题,因此开启了动态防护的页面可能会影响搜索引擎的收录,注重SEO的站长需要针对搜索引擎的爬虫做特殊处理。
另外就是,根据动态防护的原理, 一些针对性的爬虫(如无头浏览器)行为,可能效果也会打折扣。
总得来说,雷池WAF社区版提供的基础能力已经能够覆盖小型站点的大部分防护场景了, 目前社区也比较活跃, 官方对于社区的反馈处理也比较及时, 值得一试。