配置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 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/lib
 # export LUAJIT_INC=/usr/local/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取消部分--注释即可

参考

https://github.com/loveshell/ngx_lua_waf

https://www.cnblogs.com/Template/p/9668305.html

posted @ 2020-03-13 21:03  wshenJin  阅读(...)  评论(...编辑  收藏