配置nginx支持ngx_lua_waf
个人学习笔记,谢绝转载!!!
原文:https://www.cnblogs.com/wshenjin/p/12489013.html
ngx_lua_waf 是一个基于 ngx_lua 的 开源的web 应用防火墙,使用简单,高性能和轻量级。
1、安装LuaJIT2.0
LuaJIT是采用C语言写的Lua代码的解释器, 这里推荐使用lujit2.1做lua支持
# wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz
# tar xf LuaJIT-2.0.5.tar.gz
# cd LuaJIT-2.0.5
# make && make DESTDIR=/usr/local/luajit/ install
ngx_lua如果是0.9.2以上版本,建议正则过滤函数改为ngx.re.find,匹配效率会提高三倍左右。
2、安装ngx_devel_kit
NDK(nginx development kit)模块是一个拓展nginx服务器核心功能的模块,第三方模块开发可以基于它来快速实现
# wget https://github.com/simplresty/ngx_devel_kit/archive/v0.3.0.tar.gz
# tar xf v0.3.0.tar.gz
3、安装nginx_lua_module
# wget https://github.com/openresty/lua-nginx-module/archive/v0.10.13.tar.gz
# tar xf v0.10.13.tar.gz
4、环境变量
# export LUAJIT_LIB=/usr/local/luajit/lib
# export LUAJIT_INC=/usr/local/luajit/include/luajit-2.0
5、编译安装Nginx
# ./configure \
...略... \
--add-module=/dist/ngx_devel_kit-0.3.0 \
--add-module=/dist/lua-nginx-module-0.10.13 \
--with-ld-opt="-Wl,-rpath,$LUAJIT_LIB"
如果报错: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory
解决方法:ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2
6、下载waf
# wget https://github.com/loveshell/ngx_lua_waf/archive/master.zip
# unzip master.zip
# mv ngx_lua_waf-master /usr/local/nginx/conf/waf
7、nginx.conf http字段里添加配置:
lua_package_path "/usr/local/nginx/conf/waf/?.lua";
lua_shared_dict limit 10m;
init_by_lua_file /usr/local/nginx/conf/waf/init.lua;
access_by_lua_file /usr/local/nginx/conf/waf/waf.lua;
8、配置详解:
/usr/local/nginx/conf/waf/config.lua
RulePath = "/usr/local/nginx/conf/waf/wafconf/"
--规则存放目录
attacklog = "off"
--是否开启攻击信息记录,需要配置logdir
logdir = "/usr/local/nginx/logs/hack/"
--log存储目录,该目录需要用户自己新建,切需要nginx用户的可写权限
UrlDeny="on"
--是否拦截url访问
Redirect="on"
--是否拦截后重定向
CookieMatch = "on"
--是否拦截cookie攻击
postMatch = "on"
--是否拦截post攻击
whiteModule = "on"
--是否开启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~~]]
--警告内容,可在中括号内自定义
备注:不要乱动双引号,区分大小写
过滤规则在wafconf下,可根据需求自行调整,每条规则需换行,或者用|分割:
- args里面的规则get参数进行过滤的
- url是只在get请求url过滤的规则
- post是只在post请求过滤的规则
- whitelist是白名单,里面的url匹配到不做过滤
- user-agent是对user-agent的过滤规则
默认开启了get和post过滤,需要开启cookie过滤的,编辑waf.lua取消部分--注释即可
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能