基于ngx_lua_waf模块配置web应用防火墙

前言

ngx_lua_waf是一个基于lua-nginx-module(openresty)的web应用防火墙

github地址:https://github.com/loveshell/ngx_lua_waf 

1,用途:

防止sql注入,本地包含,部分溢出,fuzzing测试,xss,SSRF等web攻击

防止svn/备份之类文件泄漏

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

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

屏蔽异常的网络请求

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

防止webshell上传

2,安装配置

2.1下载安装 luajit

Luajit是一个C语言写的lua解释器。

#git clone http://luajit.org/git/luajit-2.0.git

#make  install PREFIX=/usr/local/luajit

# export LUAJIT_LIB=/usr/local/luajit/lib

# export LUAJIT_INC=/usr/local/luajit/include/luajit-2.0 导出环境变量

# vim /etc/profile.d/luajit  添加全局环境变量

export PATH=/usr/local/luajit/bin:$PATH

2.2下载安装ngx_devel_kit

Ngx_devel_kit是nginx的一个模块,用来扩展nginx服务器的核心功能,其他模块可以在这个框架下更好的开发。

#git clone https://github.com/simpl/ngx_devel_kit.git 下载好不用编译

#/usr/local/soft/ngx_devel_kit 找到位置即可。

2.3下载安装下载lua-nginx-module

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

#tar -zxvf v0.9.15.tar.gz

#/usr/local/soft/lua-nginx-module-0.9.15  解压后找到位置即可

2.4重新编译nginx,需要注意编译顺序

--with-ld-opt="-Wl,-rpath, /usr/local/luajit/lib " \

--add-module=/usr/local/soft/ngx_devel_kit \

--add-module=/usr/local/soft/lua-nginx-module-0.9.15

以上luajit的lib,ngx_devel_kit,lua-nginx模块只主要添加的模块。最后得到如下配置。

#  wget http://nginx.org/download/nginx-1.7.10.tar.gz  建议使用nginx1.7版本,之前我使用1.9一直报错。

#./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --with-ld-opt="-Wl,-rpath,/usr/local/luajit/lib" --add-module=/usr/local/soft/ngx_devel_kit  --add-module=/usr/local/soft/lua-nginx-module-0.9.15  && make &&make install

安装完成之后查看版本:

[root@ nginx-1.7.10]# /usr/local/nginx/sbin/nginx -V

nginx version: nginx/1.7.10

built by gcc 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)

TLS SNI support enabled

configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --with-ld-opt=-Wl,-rpath,/usr/local/luajit/lib --add-module=/usr/local/soft/ngx_devel_kit --add-module=/usr/local/soft/lua-nginx-module-0.9.15

2.3平滑重启nginx

#kill -HUP `cat /var/run/nginx/nginx.pid`
#/usr/local/nginx/sbin/nginx -s reload

2.4下载之后后解压,把ngx_lua_waf移动到nginx安装目录的conf目录下,改名为waf

# wget https://github.com/loveshell/ngx_lua_waf/archive/master.zip

# mv ngx_lua_waf-master/  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;

2.5在conf.lua里的waf规则目录(/usr/local/nginx/conf/waf)

RulePath = "/usr/local/nginx/conf/waf/wafconf/"  注意规则配置文件的路径

重启nginx即可。

3.测试

测试waf防火墙配置 /?a=union select,证明拦截成功~ok.

2016050701

[以上内容脚本一键安装:wafinstall.sh 下之后#bash  wafinstall.sh 即可安装。]

4.总结

Ngx_lua_waf安装还算顺利,在此需要注意的就是luajit(解释器)->ngx_devel_kit(快速开的模块)->lua-nginx-module(模块),luajit的需要编译和指定安装目录,在后续nginx编译模块时候需要该参数。还有下载好的ngx_devel_kit和lua-nginx-module模块,无需编译只需要下载之后,找到路径,然后编译nginx的时候编译进去即可。同时建议使用nginx1.7版本。

以上内容pdf版本下载: 基于ngx_lua_waf模块的配置web应用防火墙.pdf


发表评论

登录 后发表评论.