Nginx WAF 防护功能实战

Nginx WAF 防护功能实战
下载地址 https://github.com/egzosn/ngx_lua_waf
用途:
防止sql注入,本地包含,部分溢出,fuzzing测试,xss,SSRF等web攻击
防止svn/备份之类文件泄漏
防止ApacheBench之类压力测试工具的攻击
屏蔽常见的扫描黑客工具,扫描器
屏蔽异常的网络请求
屏蔽图片附件类目录php执行权限
防止webshell上传,
可视化配置
推荐安装:
推荐使用lujit2.1做lua支持

ngx_lua如果是0.9.2以上版本,建议正则过滤函数改为ngx.re.find,匹配效率会提高三倍左右。

使用说明:
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即可

配置文件详细说明:
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~~]]
–警告内容,可在中括号内自定义
备注:不要乱动双引号,区分大小写
检查规则是否生效
部署完毕可以尝试如下命令:

curl http://xxxx/test.php?id=../etc/passwd
返回"Please go away~~"字样,说明规则生效。

注意:默认,本机在白名单不过滤,可自行调整config.lua配置

正文
本人喜欢把下载的东西放置/usr/local/src/ 所以进入 cd /usr/local/src/

  1. 下载luajit 2.0并安装
    下载 wget http://luajit.org/download/LuaJIT-2.0.0.tar.gz 解压 tar zxvf LuaJIT-2.0.0.tar.gz cd LuaJIT-2.0.0

    make
    make install PREFIX=/usr/local/lj2
    ln -s /usr/local/lj2/lib/libluajit-5.1.so.2 /lib64/
    进入 cd /usr/local/src/

  2. 下载 ngx_devel_kit
    下载 wget https://github.com/simplresty/ngx_devel_kit/archive/v0.3.0.zip 解压 unzip v0.3.0.zip,然后文件夹重命名(因编译是文件名不能出现“-”) ngx_devel_kit_0.3.0

  3. 下载 lua-nginx-module
    下载 wget https://github.com/openresty/lua-nginx-module/archive/v0.10.7.zip 解压 unzip v0.10.7.zip ,然后文件夹重命名(因编译是文件名不能出现“-”) lua_nginx_module_0.10.7

  4. 下载 nginx-1.11.5
    下载 wget http://nginx.org/download/nginx-1.11.5.tar.gz 解压 tar -xzvf nginx-1.11.5.tar.gz 进入 cd nginx-1.2.4/

配置安装 nginx (这一块详情可以百度搜nginx安装配置)
设置lua临时环境变量

export LUAJIT_LIB=/usr/local/lj2/lib/

export LUAJIT_INC=/usr/local/lj2/include/luajit-2.0/

配置

./configure  --user=daemon --group=daemon --prefix=/usr/local/nginx/ --with-http_ssl_module --with-http_v2_module --with-http_stub_status_module --with-http_sub_module --with-http_gzip_static_module --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --add-module=/usr/local/src/ngx_devel_kit_0.3.0/ --add-module=/usr/local/src/lua_nginx_module_0.10.7/

构造 安装

make -j8
make install

进入 对应的nginx 配置目录 cd /usr/local/nginx/conf/
wget https://github.com/loveshell/ngx_lua_waf/archive/master.zip --no-check-certificate unzip master.zip

修改文件名
mv ngx_lua_waf-master /usr/local/nginx/conf/waf
mkdir -p /data/logs/hack
chmod -R 775 /data/logs/hack
nginx安装完之后 修改nginx配置文件 nginx.conf 详情 请查看上面《使用说明》
以下针对 waf的白名单简单扩展(动态添加白名单)添加授权账号密码
在/usr/local/nginx/conf/waf/config.lua文件中加入 wafUser = “user” wafPwd = “pwd”
编辑 /usr/local/nginx/conf/waf/init.lua
– 修改 say_html()函数
function say_html(text)
if Redirect then
ngx.header.content_type = “text/html”
ngx.status = ngx.HTTP_FORBIDDEN
if text == nil then
ngx.say(html)
else
ngx.say("[["…text…"]]")
end
ngx.exit(ngx.status)
end
end
–添加授权函数 auth()
function auth()
if ngx.var.request_uri == ("/auth.html?wafu="… wafUser …"&wafp="… wafPwd) then
ipWhitelist[1]= getClientIp() --这里只允许一个外部的白名单
say_html(“Authorization success !” … ipWhitelist[1])
return true
end
return false
end
编辑 /usr/local/nginx/conf/waf/waf.lua 加入校验集里 在 if whiteip() then 后面加入 elseif auth() then

猜你喜欢

转载自blog.csdn.net/songxi_bo/article/details/105863626