nginx 1.13.3编译安装ngx_lua_waf安全防护

前言

ngx_lua_waf是一个基于ngx_lua的web应用防火墙,使用简单,高性能和轻量级。

  • 防止sql注入,本地包含,部分溢出,fuzzing测试,xss,SSRF等web攻击
  • 防止svn/备份之类文件泄漏

  • 防止ApacheBench之类压力测试工具的攻击

  • 屏蔽常见的扫描黑客工具,扫描器

  • 屏蔽异常的网络请求

  • 屏蔽图片附件类目录php执行权限

  • 防止webshell上传

准备

ngx_lua_waf推荐使用Luajit做lua支持,而Luajit需要ngx_devel_kit模块与lua-nginx-module模块。进入/usr/local/src目录准备以上文件。

1、下载ngx_devel_kit

wget https://github.com/simpl/ngx_devel_kit/archive/v0.3.0.tar.gz
tar zxvf v0.3.0.tar.gz

2、下载lua-nginx-module

wget https://github.com/openresty/lua-nginx-module/archive/v0.10.10.tar.gz
tar zxvf v0.10.10.tar.gz

3、安装Lua环境

wget http://luajit.org/download/LuaJIT-2.0.3.tar.gz
tar xf LuaJIT-2.0.5.tar.gz
cd LuaJIT-2.0.5
make && sudo make install

编译

1、进入Nginx安装目录:

cd /usr/local/src/nginx-1.13.3

2、导入环境变量

#这个很有可能不一样
export LUAJIT_LIB=/usr/local/lib
#这个很有可能不一样
export LUAJIT_INC=/usr/local/include/luajit-2.0

3、查看目前Nginx的版本

nginx -V

4、加载模块

./configure(Nginx-V已有的模块)--add-module=/usr/local/src/ngx_devel_kit-0.3.0 --add-module=/usr/local/src/lua-nginx-module-0.10.10 --with-ld-opt=-Wl,-rpath,$LUAJIT_LIB

5、编译参数

# 注意不要make install
make
#重命名nginx旧版本二进制文件
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old
#拷贝一份新编译的二进制文件
cp objs/nginx /usr/local/nginx/sbin/
#升级
make upgrade
#确认
nginx -V
#重新加载Nginx
nginx -s reload

安装

1、准备Luajit

从https://github.com/loveshell/ngx_lua_waf下载Luajit。

nginx安装路径假设为/usr/local/nginx/,把ngx_lua_waf下载到conf目录下,解压命名为waf。

2、在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即可

service nginx restart

配置

1、配置文件详细说明

    RulePath = "/usr/local/nginx/conf/waf/wafconf/"
    --规则存放目录
    attacklog = "on"n
    --是否开启攻击信息记录,需要配置logdir
    logdir = "/home/wwwlogs/"
    --log存储目录,需要nginx用户的可写权限。该目录LNMP默认建立,放在这个目录即可
    --日志文件名称格式如下:虚拟主机名_sec.log
   
    --是否拦截url访问
   
    --是否拦截后重定向
    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用逗号分隔
   
    --是否开启拦截cc攻击(需要nginx.conf的http段增加lua_shared_dict limit 10m;)
    CCrate = "100/60"
    --设置cc攻击频率,单位为秒.
    --默认1分钟同一个IP只能请求同一个地址100次
    html=[[Please go away~~]]
    --警告内容,可在中括号内自定义
    备注:不要乱动双引号,区分大小写

2、部署完毕可以尝试如下命令进行测试:

curl https://www.youfencun.com/index.php?id=../etc/passwd

返回网站防火墙Html源码即表示配置成功,也可通过网页访问,返回如下图所示:

标签:LUANginx 发布于:2019-11-11 14:14:36