Nginx使用ngx_lua做WAF

参见作者github:https://github.com/loveshell/ngx_lua_waf

感受:

  1. 之前维护的论坛和主站都是PHP代码,攻击,扫描也是家常便饭,主站集群中的一台服务器忘记开启ngx_lua_waf导致有sqlmap通过这台获取用户信息,其他部署开启的都被成功的阻止.
  2. ngx_lua_waf轻量级的firewall 不用占用太多的系统资源去处理,尤其是nginx的非阻塞模式,是高性能的首选.

用途:

防止sql注入,本地包含,部分溢出,fuzzing测试,xss,SSRF等web攻击
防止svn/备份之类文件泄漏
防止ApacheBench之类压力测试工具的攻击
屏蔽常见的扫描黑客工具,扫描器
屏蔽异常的网络请求
屏蔽图片附件类目录php执行权限
防止webshell上传
推荐安装:

推荐使用lujit2.1做lua支持

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

安装说明:

如果是nginx请使用–add-module添加ngx_devel_kit和nginx_lua_module

  1. 下载luajit 2.0并安装,同时下载ngx_devel_kit和nginx_lua_module
    使用make &&make install即可
  2. 设置环境变量
    vim /etc/profile增加
    export LUAJIT_LIB=/usr/local/lib  #有可能不一样
    export LUAJIT_INC=/usr/local/include/luajit-2.0   #有可能不一样
  3. 下载nginx源码解压
    ./configure –prefix=/usr/local/nginx  –add-module=/path/{module_dir}/ngx_devel_kit-{version} –add-module==/path/{module_dir}/lua-nginx-module-{version}
    make –j2   &&   make   install
  4. 创建目录记录攻击日志,并赋予nginx运行用户对该目录的写入权限.
    mkdir /usr/local/nginx/logs/hack/  && chown –R nobody.nobody !$ && chmod –R 755 !$
  5. 下载配置ngx_lua_waf模块
    nginx.conf下的http添加如下:
         http {
                lua_need_request_body on;
                init_by_lua_file  /usr/local/nginx/conf/init.lua;
                access_by_lua_file /usr/local/nginx/conf/waf.lua;
            …………..}
  6. 注意:
    把wafconf目录放在nginx的conf下 
    waf.lua一定要放在/usr/local/nginx/conf/waf.lua 不能在wafconf目录.否则会报500错误.
    需要修改init.lua里面的相应logdir
    每次更改waf.lua代码需要把nginx reload一下
  7. 过滤配置说明
    过滤规则在wafconf下,可根据需求自行调整,每条规则需换行,或者用|分割
    global是全局过滤文件,里面的规则对post和get都过滤
    get是只在get请求过滤的规则
    post是只在post请求过滤的规则
    whitelist是白名单,里面的url匹配到不做过滤
    user-agent是对user-agent的过滤规则
  8. 默认开启了get和post过滤,需要开启cookie过滤,取消waf.lua的cookie注释部分即可,日志文件名称格式:虚拟主机名_sec.log
  9. 日志记录的内如如下
    [2015-04-02 09:17:21] “GET /test.php?id=../etc/passwd”
    页面报错
    image 

如果是tengine,可以直接使用dso_tool动态添加nginx_lua_module即可,其他配置部分和nginx一样.

dso_tool –add-module=MODULE_DIR 

http {

      dso {

load load ngx_http_lua_module.so;

}

}

此条目发表在Nginx, Safe分类目录,贴了, , 标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用*标注