宝塔面板自从升级到6.0+免费版以后,宝塔官方为推广收费waf插件,将原本功能中的过滤器给屏蔽掉了,但其实过滤器的功能都完整的包含在了6.0的版本中。只需要简单几步即可启用原5.0中的过滤器。而这个过滤器事实上就是一个waf防火墙,并且源自知名的ngx_lua_waf。
进入宝塔面板,软件管理,nginx设置,配置修改,http段中,删掉include luawaf.conf;前面的#号,保存一下。重启nginx,即可使用waf了。
进入面板,文件,根目录/www/server/nginx/waf中的三个文件。config.lua是waf的配置文件。init.lua是waf的初始化脚本。waf.lua是运行脚本。配置文件中几个配置名,从命名规则就很容易理解配置项是什么功能。我就不说了,图上的是我目前用配置规则。
过滤规则在根目录/www/server/panel/vhost/wafconf下面,文件名上就能理解每个文件对应的管控范围。建议用默认的吧,别改了,已经满齐全的了,如果你有更好的,可以在规则上补加。returnhtml这个文件是触发过滤器后的返回页面,为了防止千篇一律,可以个性化设置一下,html和css的基础就够了。
日志是在根目录/www/wwwlogs/waf下面,可以下载到本地来看,也可以通过日志分析软件进行分析。西枫里这两天没吊事心血来潮翻了下拦截日志,随便取了几个IP百度了一下,发现怎么都是阿里云的IP。第一直觉就是过滤器获取了CDN的IP,因为西枫里博客是部署了CDN的,所以waf是没有获取到真实IP,拿到的全部是回源时候的CDN的IP。
拿到的都是CDN的IP就没有太大意义了,所以必须拿到真实IP,所以得改造一下获取规则。在根目录/www/server/nginx/waf下面,找到init.lua文件,点编辑,第18行是IP=ngx.var.remote_addr。很显然,直接去拿remote_addr的IP来用了,那些被CDN代理后的IP全被隐匿了。西枫里从没写过Lua的脚本,所以大致看了一下整个文件的脚本,我看语法和ASP很类似,于是依葫芦画瓢,把函数getClientIp给改了一下,如下图。改完,就去翻了下菜鸟教程中的Lua语法,发现竟然没写错,这还真应了那句瞎猫碰见死耗子了。改完,保存后,7P群初中生说HTTP_X_FORWARDED_FOR这个应该取第一个IP吧,逗号分割的后面都是代理IP。也对,不过写完我就直接保存重启nginx后,测试了一下,好像是可以能获取到真实IP的,我也就懒得去改了,毕竟转换数组,还得去翻Lua的语法教程。算了,就这样吧。
好了,至此就可以完整的使用宝塔提供的这个隐藏福利了。