ChrisKim
Do not go gentle into that good night.
颢天

只需半分钟,启用宝塔面板内置 Nginx WAF

ngx_lua_waf 是一个基于 lua 脚本的开源 WAF (Web应用防火墙),用于抵御第七层攻击。如果你装有宝塔面板,使用 Nginx 作为 Web 服务器,并且没有使用其他 WAF,不妨在几秒钟内启用它。

当然由于这款 WAF 年代久远,如果你已经使用了其他 WAF,没有必要专门换成它(不过我对比了下宝塔的免费 Nginx 防火墙,两个的规则正则表达式非常相似,效果应该也类似)

启用 ngx_lua_waf

宝塔面板安装的 Nginx 默认编译了 lua_nginx_module,也已经下载配置好了 ngx_lua_waf,唯独就是把启用代码注释掉了。我们进入 Nginx 配置文件,找到被注释的 luawaf 启动配置,取消注释保存即可。

https://assets.zouht.com/img/blog/3117-01.webp

我们测试一个被拦截的规则,看看 WAF 是否能捕获到。我们在网站链接后加上 ?id=../etc/passwd 来访问,这个 GET 请求将会触发安全规则而被拦截。

如果图方便的话,到这里就可以结束了。如果想要修改配置,一定要看最后一节“存在问题”,以免网站功能出现异常。

调整 WAF 配置

WAF 配置文件为 /www/server/nginx/waf/config.lua,可根据需求进行调整功能开关,默认如下:

RulePath = "/www/server/panel/vhost/wafconf/" --拦截规则目录
attacklog = "on"              --是否启用日志
logdir = "/www/wwwlogs/waf/"  --日志位置
UrlDeny="on"                  --是否拦截URL攻击
Redirect="on"                 --拦截后是否重定向
CookieMatch="off"             --是否拦截Cookie攻击
postMatch="off"               --是否拦截POST攻击
whiteModule="on"              --是否开启URL白名单
black_fileExt={"php","jsp"}   --不允许上传的文件类型
ipWhitelist={"127.0.0.1"}     --IP白名单,用逗号分隔
ipBlocklist={"1.0.0.1"}       --IP黑名单,用逗号分隔
CCDeny="off"                  --是否拦截CC攻击
CCrate="300/60"               --拦截阈值,格式解释:60s内同一IP只能请求同一地址180次

WAF 规则文件在 /www/server/panel/vhost/wafconf,可根据需求调整拦截规则,格式是正则表达式,文件名分别为:

  • args:GET 攻击拦截规则
  • cookie: Cookie 攻击拦截规则
  • post:POST 攻击拦截规则
  • url:URL 攻击拦截规则
  • user-agent:UA 拦截规则
  • whitelist:URL 白名单

宝塔面板的版本多了一些文件,经过实验,returnhtml 为拦截后返回的 HTML,除它之外的文件没有用。另外,你可能会在 /www/server/nginx/waf/wafconf 也找到一份配置,但是那个配置是无效的,忽略即可。

存在问题

由于这款 WAF 年久失修,已经没有人进行维护,所以存在一点需要注意的问题:

  • Cookie 拦截有时候会导致 500 错误,作者并没有成功复现这个问题,他给的建议是如果有问题就关闭该功能。
  • POST 拦截规则与 WordPress 后台有冲突,可以选择把自己的 IP 加入白名单或者直接关闭 POST 拦截功能。
  • CC 攻击无法拦截具有 301 跳转的地址,不过发送一个 301 跳转响应基本不消耗服务器资源,即使被 CC 了也没事。
本文链接:https://www.zouht.com/3117.html
本文使用:CC BY-NC-SA 4.0 许可
# # #
首页      教程      只需半分钟,启用宝塔面板内置 Nginx WAF

发表回复

textsms
account_circle
email

颢天

只需半分钟,启用宝塔面板内置 Nginx WAF
ngx_lua_waf 是一个基于 lua 脚本的开源 WAF (Web应用防火墙),用于抵御第七层攻击。如果你装有宝塔面板,使用 Nginx 作为 Web 服务器,并且没有使用其他 WAF,不妨在几秒钟内启用它。 …
扫描二维码继续阅读
2023-01-23