导读 WAF的实现其实可以用一句话去概况,就是解析HTTP请求(协议解析模块),规则检测(规则模块),做不同的防御动作(动作模块),并将防御过程(日志模块)记录下来。那么如何用nginx+lua+ngx_lua_waf实现waf功能呢?
安装基础编译环境
yum install pcre-devel openssl-devel gd-devel geoip-devel gcc wget -y
下载安装所需组件
下载解压安装luajit 2.0.5(解压后直接make 然后make install)
wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz

make  
make install

下载解压ngx_devel_kit
wget https://github.com/simpl/ngx_devel_kit/archive/v0.3.0.tar.gz


下载解压lua-nginx-module(nginx的lua模块)
wget https://github.com/openresty/lua-nginx-module/archive/v0.10.14rc3.tar.gz

下载解压nginx
wget http://nginx.org/download/nginx-1.14.1.tar.gz

下载解压waf功能(ngx_lua_waf)
wget https://github.com/loveshell/ngx_lua_waf/archive/v0.7.2.tar.gz
编译安装nginx

进入nginx源码文件夹(编译安装nginx)

./configure \
--prefix=/web-boke/nginx \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_image_filter_module=dynamic \
--with-http_geoip_module=dynamic \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_degradation_module \
--with-http_slice_module \
--with-http_stub_status_module \
--with-pcre \
--with-pcre-jit \
--with-stream=dynamic \
--with-stream_ssl_module \
--with-debug \
--add-module=/root/ngx_devel_kit-0.3.0 \
--add-module=/root/lua-nginx-module-0.10.14rc3 \
--with-ld-opt="-Wl,-rpath,$LUAJIT_LIB" ;

make
make install
调试nginx实现waf
第一:将waf功能模块,解压后重命名为waf(并移动到nginx的配置目录下)
mv waf/ /web-boke/nginx/conf

第二:修改nginx的配置文件使其加载waf功能模块,并加载博客的nginx配置文件
vim /web-boke/nginx/conf/nginx.conf

#在http里面添加如下
	lua_package_path "/web-boke/nginx/conf/waf/?.lua";
	lua_shared_dict limit 10m;
	init_by_lua_file  /web-boke/nginx/conf/waf/init.lua; 
	access_by_lua_file /web-boke/nginx/conf/waf/waf.lua;

	include /web-boke/nginx-boke/boke-ssl.conf;

第三:修改waf模块的规则配置路径

vim /web-boke/nginx/conf/waf/config.lua

RulePath = "/web-boke/nginx/conf/waf/wafconf/"

第四:导出环境变量(重要)
export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH 

第五:启动nginx
/web-boke/nginx/sbin/nginx -t	#测试nginx的配置文件是否正确
/web-boke/nginx/sbin/nginx -V	#查看nginx编译了那些模块
/web-boke/nginx/sbin/nginx -s reload	#当waf规则更改后,需要reload一下nginx
/web-boke/nginx/sbin/nginx	#启动nginx

原文来自:https://boke.wsfnk.com/archives/334.html

本文地址:https://www.linuxprobe.com/nginxluangx-linux.html编辑:向金平,审核员:逄增宝

Linux命令大全:https://www.linuxcool.com/

Linux系统大全:https://www.linuxdown.com/

红帽认证RHCE考试心得:https://www.rhce.net/