导读 | 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
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/120839.html