给你的Nginx加个防火墙

朋友的一个 wordPress/ target=_blank class=infotextkey>WordPress 站经常访问慢 。看了一下日志 , 发现整天被扫描网站目录 , 如phpmyadmin 或者 SQL 文件 , 和被 CC攻击 。
找了一下 , 发现 ngx_lua_waf 是个不错的方案 , 但是太久不更新了 , 而且代码我看不懂 , 猝
最后找到 oneinstack 一键包内置的 ngx_lua_waf , 基于之前的代码 , 不过重构 了 , 这下我能看懂了 , 以后要修改也能简单一些
介绍ngx_lua_waf 是一个高性能的轻量级 web 应用防火墙 , 基于 lua-Nginx-module 。

给你的Nginx加个防火墙

文章插图
 
它具有以下功能:
防止sql注入 , 本地包含 , 部分溢出 , fuzzing测试 , xss,SSRF等web攻击防止svn/备份之类文件泄漏防止ApacheBench之类压力测试工具的攻击屏蔽常见的扫描黑客工具 , 扫描器屏蔽异常的网络请求屏蔽图片附件类目录php执行权限防止webshell上传经过 unixhot 的修改和重构 , 拥有了以下功能:
支持IP白名单和黑名单功能 , 直接将黑名单的IP访问拒绝支持URL白名单 , 将不需要过滤的URL进行定义支持User-Agent的过滤 , 匹配自定义规则中的条目 , 然后进行处理(返回403)支持CC攻击防护 , 单个URL指定时间的访问次数 , 超过设定值 , 直接返回403支持Cookie过滤 , 匹配自定义规则中的条目 , 然后进行处理(返回403)支持URL过滤 , 匹配自定义规则中的条目 , 如果用户请求的URL包含这些 , 返回403支持URL参数过滤 , 原理同上支持日志记录 , 将所有拒绝的操作 , 记录到日志中去日志记录为JSON格式 , 便于日志分析 , 例如使用ELKStack进行攻击日志收集、存储、搜索和展示这些功能刚好能满足我朋友的需求
安装安装起来也是相当容易 , 说白了就是给 nginx 增加 ngx_devel_kit、lua-nginx-module 这两个模块 , 然后再修改 nginx 配置来运行 ngx_lua_waf 。
一键安装一键命令我已经给你们准备好了 , 一键命令会编译 nginx-1.15.6 , 编译的详细模块可以看我的这篇帖子 https://zhih.me/make-your-website-support-tls1-3  , 当然你也可以直接看脚本的代码
sh -c "$(curl -kfsSl https://raw.githubusercontent.com/xzhih/nginx-compile/master/install.sh)"手动安装下载 ngx_lua_waf 防火墙的各种依赖及模块cd /usr/src/wget https://github.com/openresty/luajit2/archive/v2.1-20181029.tar.gztar xzvf v2.1-20181029.tar.gzmv luajit2-2.1-20181029 luajit-2.1wget https://github.com/openresty/lua-cjson/archive/2.1.0.6.tar.gztar xzvf 2.1.0.6.tar.gzmv lua-cjson-2.1.0.6 lua-cjsonwget https://github.com/simplresty/ngx_devel_kit/archive/v0.3.1rc1.tar.gztar xzvf v0.3.1rc1.tar.gzmv ngx_devel_kit-0.3.1rc1 ngx_devel_kitwget https://github.com/openresty/lua-nginx-module/archive/v0.10.13.tar.gztar xzvf v0.10.13.tar.gzmv lua-nginx-module-0.10.13 lua-nginx-module编译安装 luajitcd luajit-2.1make -j2 && make installecho '/usr/local/lib' >> /etc/ld.so.conf.d/local.confldconfig编译安装 lua-cjsoncd /usr/src/lua-cjsonexport LUA_INCLUDE_DIR=/usr/local/include/luajit-2.1 make -j2 && make install设置 LUAJIT 环境变量export LUAJIT_LIB=/usr/local/libexport LUAJIT_INC=/usr/local/include/luajit-2.1编译 nginx 的时候加上以下两个模块【给你的Nginx加个防火墙】--add-module=../lua-nginx-module--add-module=../ngx_devel_kit下载配置 ngx_lua_wafcd /usr/local/nginx/conf/git clone https://github.com/xzhih/ngx_lua_waf.git waf cat > /usr/local/nginx/conf/waf.conf << EOFlua_shared_dict limit 20m;lua_package_path "/usr/local/nginx/conf/waf/?.lua";init_by_lua_file "/usr/local/nginx/conf/waf/init.lua";access_by_lua_file "/usr/local/nginx/conf/waf/access.lua";EOFmkdir -p /usr/local/nginx/logs/waf chown www-data:www-data /usr/local/nginx/logs/waf你可以在 /usr/local/nginx/logs/waf 找到防火墙日志
在 nginx.conf 里 include waf.confinclude waf.conf;启动 nginx 并访问 http://你的IP/?a=a.sql
就可以看到防火墙提示了
Copyrighthttps://github.com/lj2007331/ngx_lua_waf
https://github.com/loveshell/ngx_lua_waf
https://github.com/unixhot/waf




    推荐阅读