使用前须知
众所周知,宝塔的nginx防火墙是付费的,但正如linux面板的nginx一样,宝塔其实内置了一套免费的lua防火墙,只是默认是关闭的,本文就是教你怎么开启它的。
部分Windows且使用nginx的用户,有使用免费WAF的需求,但现在的WAF类产品很少有针对Windows的nginx进行适配的,而宝塔官方WAF则需要付费,因此,本教程可解决此问题。
安装教程
1、下载lua防火墙配置文件并安装
下载地址:
[button color="info" icon="" url="https://down.iminbk.com/luawaf/luawaf2.1.zip" type=""]点击下载[/button]
下载后上传到宝塔nginx安装目录,并解压。
2.在宝塔安装目录下conf文件夹内新建luawaf.conf文件,并编辑文件为:
lua_package_path "/BtSoft/nginx/waf/?.lua";
lua_shared_dict limit 10m;
init_by_lua_file /BtSoft/nginx/waf/init.lua;
access_by_lua_file /BtSoft/nginx/waf/waf.lua;保存。
3.找到nginx配置文件,找到#include luawaf.conf;删除前面的#号,保存。
重启nginx,在你的域名后面输入/?id=../etc/passwd ,如出现以下界面,代表lua防火墙已成功开启。
配置修改
lua防火墙可自行修改参数;
进入waf文件夹,里面的config.lua是防火墙的主配置参数:
RulePath = "C:/BtSoft/nginx/waf/wafconf/" --waf 详细规则存放目录(一般无需修改,如路径不同,请修改为正确路径)
attacklog = "on" --是否开启攻击日志记录(on 代表开启,off 代表关闭。下同)
logdir = "C:/BtSoft/wwwlogs/waf/" --攻击日志文件存放目录(修改为你想设置的,注意路径要真实存在)
UrlDeny="on" --是否开启恶意 url 拦截
Redirect="on" --拦截后是否重定向
CookieMatch="off" --是否开启恶意 Cookie 拦截
postMatch="off" --是否开启 POST 攻击拦截
whiteModule="on" --是否开启 url 白名单
black_fileExt={"php","jsp"} --文件后缀名上传黑名单,如有多个则用英文逗号分隔。如:{"后缀名1","后缀名2","后缀名3"……}
ipWhitelist={"127.0.0.1"} --白名单 IP,如有多个则用英文逗号分隔。如:{"127.0.0.1","127.0.0.2","127.0.0.3"……} 下同
ipBlocklist={"1.0.0.1"} --黑名单 IP
CCDeny="off" --是否开启 CC 攻击拦截
CCrate="300/60" --CC 攻击拦截阈值,单位为秒。"300/60" 代表 60 秒内如果同一个 IP 访问了 300 次则拉黑在该目录下的wafconf目录下,可以看到具体的防护规则,如您不了解正则表达式,请不要随意修改这些文件,保持默认即可。
总结一些,通过这些步骤操作之后,我们就成功开启了nginx防火墙,在遇到渗透与扫描的时候,可以对黑客行为进行缓解。
网络安全无小事,特别是网络安全法和网站安全负责人负责制建立以后,每个人都要对网站安全负起责任来,单纯的使用防火墙、依靠安全软件堆积无法真正解决安全问题,人工加固,定期巡检,保持程序更新,及时修复安全漏洞才是关键。
常见问题
1.为什么没有拦截日志?
答:请手动在/BtSoft/wwwlogs/下创建waf文件夹。
2.误报怎么办?
答:查看拦截日志,找到误报的那一条,查看是哪条规则误报,删除那条规则即可。



[secret] 抱歉实在不太清楚这边的审核机制,也尝试加您的QQ,后台估计有很多的信息吧,真的很抱歉 ::aru:distressed::
[/secret]
你这网站我怎么什么都发不出来,连报错都没法发2024/05/17 01:37:22 [error] 11068#7360: *367 lua entry thread aborted: runtime error: D:/BtSoft/nginx/waf/waf.lua:21: http v2 not supported yet
[C]: in function 'socket' D:/BtSoft/nginx/waf/waf.lua:21: in function <D:/BtSoft/nginx/waf/waf.lua:1>, client: 2400:cb00:581:1024::a29e:72b0, server: www.skysparkle.xyz, request: "POST /wp-admin/admin-ajax.php HTTP/2.0", host: "www.skysparkle.xyz", referrer: "https://www.skysparkle.xyz/wp-admin/post.php?post=424&action=edit"stack traceback:
coroutine 0:
这个肯定不会再改了
[secret] 所以说可以请教一下到底是什么原因导致这个报错的吗,难道是真的不支持HTTP2?
[/secret]
似乎是不支持http2,突然报了个错:
[C]: in function 'socket' D:/BtSoft/nginx/waf/waf.lua:21: in function <D:/BtSoft/nginx/waf/waf.lua:1>, client: 2400:cb00:581:1024::a29e:72b0, server: www.skysparkle.xyz, request: "POST /wp-admin/admin-ajax.php HTTP/2.0", host: "www.skysparkle.xyz", referrer: "https://www.skysparkle.xyz/wp-admin/post.php?post=424&action=edit"2024/05/17 01:37:22 [error] 11068#7360: *367 lua entry thread aborted: runtime error: D:/BtSoft/nginx/waf/waf.lua:21: http v2 not supported yet
stack traceback:
coroutine 0:
感谢dalao制作的waf防火墙这个可能是win宝塔唯一能用的防火墙了反馈下就是默认设置的CCrate="5/60"参数有点太严格了导致我刚部署好就报500错误搞得我以为是挂了,没想到居然没问题;另外似乎需要注意一下,这个防火墙会和nginx站点加速产生冲突导致500错误
感谢dalao,这个可能是win宝塔唯一能用的防火墙了就是默认设置的CCrate="5/60"参数有点太严格了导致我刚部署好就报500错误搞得我以为是挂了,没想到居然没问题;另外似乎需要注意一下,这个防火墙会和nginx站点加速产生冲突导致500错误
<D:/BtSoft/speed_nginx/nginx_get.lua:1>, client: 127.0.0.1, server: _, request: "GET / HTTP/2.0", host: "127.0.0.1"
2024/05/16 00:41:39 [error] 6880#7244: 3 failed to run body_filter_by_lua: D:/BtSoft/speed_nginx/speed.lua:970: attempt to index upvalue 'conf' (a boolean value), client: 127.0.0.1, server: _, request: "GET / HTTP/2.0", host: "127.0.0.1"
2024/05/16 00:41:39 [error] 6880#7244: *3 lua entry thread aborted: runtime error: D:/BtSoft/speed_nginx/speed.lua:875: attempt to index upval
感谢dalao,这个可能是win宝塔唯一能用的防火墙了就是默认设置的CCrate="xxx"参数有点太严格了导致我刚部署好就报500错误搞得我以为是挂了,没想到居然没问题;另外似乎需要注意一下,这个防火墙会和nginx站点加速产生冲突导致500错误
<D:/BtSoft/speed_nginx/nginx_get.lua:1>, client: 127.0.0.1, server: _, request: "GET / HTTP/2.0", host: "127.0.0.1"
2024/05/16 00:41:39 [error] 6880#7244: 3 failed to run body_filter_by_lua: D:/BtSoft/speed_nginx/speed.lua:970: attempt to index upvalue 'conf' (a boolean value), client: 127.0.0.1, server: _, request: "GET / HTTP/2.0", host: "127.0.0.1"
2024/05/16 00:41:39 [error] 6880#7244: *3 lua entry thread aborted: runtime error: D:/BtSoft/speed_nginx/speed.lua:875: attempt to index upval
感谢dalao,这个真的很好用,就是默认设置的CCrate="xxx"参数有点太严格了导致我刚部署好就报500错误搞得我以为是挂了,没想到居然没问题;另外似乎需要注意一下,这个防火墙会和nginx站点加速产生冲突导致500错误
感谢dalao,这个真的很好用,就是默认设置的CCrate="150/10"参数有点太严格了导致我刚部署好就报500错误搞得我以为是挂了,没想到居然没问题
感谢dalao,这个真的很好用,就是默认设置的cc公鸡参数有点太严格了导致我刚部署好就报500错误搞得我以为是挂了
感谢大佬,就是默认配置的cc攻击参数设置的有点小了,搞得我部署好就报500错误,吓我一跳
老大,可以参考这个改版升级下,就更厉害了哈
https://toscode.gitee.com/chleniang/cls_lua_waf/tree/master
老大,能不能定制增加一个IP拦截的,我是想着拦截海外的IP,虽然下载了各种IP库,但是不知道如何配置
老大,可以在win宝塔里面添加面板吗?就像linux那样有面板配置waf这些功能
这个不可以
lua防火墙配置文件 下载地址失效了,还望可以给一个下载地址,谢谢。
已修复此问题
win2016 安装配置好了以后没有报任何错误,但是针对 http://test.com/test.php?id=非法字符 没有任何拦截提示!
你好,已通过邮件答复
我配置完毕后,nginx启动啥的一切正常,config中白名单切换也是有效的,但是针对 http://test.com/test.php?id=非法字符,这种的无法拦截。博主有遇到过嘛。配置如下
RulePath = "D:/BtSoft/nginx/conf/waf/wafconf/"
--规则存放目录
attacklog = "on"
--是否开启攻击信息记录,需要配置logdir
logdir = "D:/BtSoft/nginx/conf/waf/log"
--log存储目录,该目录需要用户自己新建,切需要nginx用户的可写权限
UrlDeny="on"
--是否拦截url访问
Redirect="on"
--是否拦截后重定向
CookieMatch = "on"
--是否拦截cookie攻击
postMatch = "on"
--是否拦截post攻击
whiteModule = "off"
--是否开启URL白名单
black_fileExt={"php","jsp"}
--填写不允许上传文件后缀类型
ipWhitelist={"127.0.0.1"}
--ip白名单,多个ip用逗号分隔
ipBlocklist={"1.0.0.1"}
--ip黑名单,多个ip用逗号分隔
CCDeny="on"
--是否开启拦截cc攻击(需要nginx.conf的http段增加lua_shared_dict limit 10m;)
CCrate = "100/60"
--设置cc攻击频率,单位为秒.
--默认1分钟同一个IP只能请求同一个地址100次
html=[[Please go away~~]]
--警告内容,可在中括号内自定义
--备注:不要乱动双引号,区分大小写
你从别的地方复制的吧,本站不是从github中提取的,不一样
是是试了文件中的下载发现不行,又找的github,还是不行,哭了 ::aru:crying::
除了路径,不要修改任何东西,你是宝塔面板用户吗
是的
按本站教程来,github那些,是针对linux的
另外,我遇到了
[alert] 10708#15212: OpenEvent("ngx_master_12104") failed (2: The system cannot find the file specified)
是什么原因?
你是怎么知道这个网站的,另外,你用的是宝塔windows面板吗,这个都是按照宝塔的来的
hi,这个文件链接好像下不了啊
你好,感谢反馈,稍后会进行修复。
已修复
有没有基于luawaf的规则更新git
luawaf官方规则已经不更新了,我这个是有更新的,包括log4j的规则都有。
防火墙2.0版本是用的新规则,可以防更多攻击,如果有误报,请在评论区留言。
这个lua防火墙脚本太老了,好多年都不更新了!我记得好像都没有人维护了!推荐试试 Fail2ban !
您好,此规则相对于原生luawaf,规则已做更新,可以防护更多攻击,同时有效降低误报。
我的体验是误伤率极高!(´இ皿இ`)
我用着还好,误报的情况很少,本站已对规则进行优化,误报低,提供的是基础通用防护规,同时对于最近很火的log4j漏洞也有防护效果。