提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
Nginx+lua后续添加waf支持
前言
近期公司测试环境的应用经常被扫描出来有一些安全漏洞,然而测试环境的入口是一个暴露在公网的nginx,这样的话没有安全防护措施,还是比较危险的。
这次通过给nginx加上waf插件来实现web安全防护。
一、waf是什么?
Web应用防护系统(也称为:网站应用级入侵防御系统。英文:Web Application Firewall,简称: WAF)。利用国际上公认的一种说法:Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。
二、安装使用
1.前提
安装nginx + lua 的环境,安装教程可以参考我之前的一篇文章[nginx 中添加 lua 模块,支持lua脚本以及遇到的坑]
2.开始安装
本次使用ngx_lua_waf 模块来给nginx添加waf的支持。
ngx_lua_waf的相关信息可以点击ngx_lua_waf查看。
ngx_lua_waf的开发者也提供了一键安装脚本包括(nginx + lua + waf),克隆其项目后,执行install.sh就可以了。不过脚本很久没有维护了,比较老,可以自行更改一些参数后再运行。
1.下载并解压ngx_lua_waf
cd /usr/local/nginx-1.22.0/conf
wget https://github.com/loveshell/ngx_lua_waf/archive/master.zip --no-check-certificate
unzip master.zip
mkdir waf
mv ngx_lua_waf-master/* waf/
rm -rf ngx_lua_waf-master
2. 创建攻击日志目录hack并授予权限
cd /usr/local/nginx-1.22.0/logs
mkdir hack
chmod -R 775 hack
3. 修改waf的相关配置
ngx_lua_waf的配置文件名称为 config.lua
因为我服务器上安装的nginx版本比较多,所以目录加了版本区分,我这次的nginx目录为/usr/local/nginx-1.22.0
所以waf配置修改如下:
vim /usr/local/nginx-1.22.0/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~~]]
--警告内容,可在中括号内自定义
备注:不要乱动双引号,区分大小写
4. 修改nginx.conf 配置
在nginx.conf的http段添加
lua_package_path "/usr/local/nginx-1.22.0/conf/waf/?.lua";
lua_shared_dict limit 10m;
init_by_lua_file /usr/local/nginx-1.22.0/conf/waf/init.lua;
access_by_lua_file /usr/local/nginx-1.22.0/conf/waf/waf.lua;
5. 重启nginx
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
6. 检查规则是否生效
在正常的访问URL后面加上参数 ?id=../etc/passwd
返回如下页面,说明规则生效。
7.规则说明
ngx_lua_waf的规则目录在/usr/local/nginx-1.22.0/conf/waf/wafconf
下,其中已经内置了一些默认规则,按行,使用正则表达式匹配。
也可以对其中的规则进行自定义补充。
可以参考ngx_lua_waf
过滤规则在wafconf下,可根据需求自行调整,每条规则需换行,或者用|分割
args里面的规则get参数进行过滤的
url是只在get请求url过滤的规则
post是只在post请求过滤的规则
whitelist是白名单,里面的url匹配到不做过滤
user-agent是对user-agent的过滤规则
默认开启了get和post过滤,需要开启cookie过滤的,编辑waf.lua取消部分--注释即可
日志文件名称格式如下:虚拟主机名_sec.log