Nginx_lua_waf 用途
防止 sql 注入,本地包含,部分溢出,fuzzing 测试,xss,SSRF 等 web 攻击
防止 svn/ 备份之类文件泄漏
防止 ApacheBench 之类压力测试工具的攻击
屏蔽常见的扫描黑客工具,扫描器
屏蔽异常的网络请求
屏蔽图片附件类目录 php 执行权限
防止 webshell 上传
安装及使用
这里为了方便直接在军哥的 lnmp 上直接安装 Nginx_Lua 可以省去直接 luajit 安装,安装前修改 /lnmpXX/lnmp.conf 后再安装 lnmp
Enable_Nginx_Lua='y' // 把 n 修改为 y
直接 luajit 安装方法
下载打包文件里自带安装脚本,位置在:
/usr/local/nginx/conf/waf/install.sh
接下来就可以直接安装 ngx_lua_waf 了;
下载脚本
使用说明:
nginx 安装路径为:/usr/local/nginx/conf/ 把 ngx_lua_waf 下载到 conf 目录下, 解压命名为 waf
在 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;
配置 config.lua 里的 waf 规则目录 (一般在 waf/conf/ 目录下)
RulePath = "/usr/local/nginx/conf/waf/wafconf/"
然后重启 nginx 即可
service nginx restart
配置文件详细说明:
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 次
DenySeconds="360"
-- 原来攻击被封默认 60 秒,这里修改为自定义,我这设定为 360 秒(这里是新加的)html=[[Please go away~~]]
-- 警告内容, 可在中括号内自定义
部署完毕可以尝试如下命令:
curl http://xxxx/test.php?id=../etc/passwd
返回”WAF Block page”字样,说明规则生效。
注意: 默认,本机在白名单不过滤,可自行调整 config.lua 配置
修改说明
修改正则过滤函数改为 ngx.re.find,匹配效率会提高三倍左右;
增加封 IP 时间自定义控制;
增加不过滤搜索引擎 (/usr/local/nginx/conf/waf/wafconf/white-user-agent);
正文完
发表至: 开源脚本
2023-01-28