什么是WAF?
Web应用防护系统(也称:网站应用级入侵防御系统。英文:Web Application Firewall,简称: WAF)。利用国际上公认的一种说法:Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。
安装及下载依赖包
使用了3个依赖软件包,分别是
.
├── LuaJIT-2.1.0-beta2.tar.gz
├── lua-nginx-module-0.10.7.tar.gz
└── ngx_devel_kit-0.3.0.tar.gz
下载软件包
wget http://luajit.org/download/LuaJIT-2.1.0-beta2.tar.gz
wget https://github.com/openresty/lua-nginx-module/archive/v0.10.7.tar.gz
wget https://github.com/simpl/ngx_devel_kit/archive/v0.3.0.tar.gz
编译LuaJIT
LuaJIT即采用C语言写的Lua代码的解释器。
find . -maxdepth 1 -type f -name "*.tar.gz" -print -exec tar zxf {} \; #先解压下载的所有压缩包
cd LuaJIT-2.1.0-beta2
make && make install #先把make gcc g++(Ubuntu上叫g++,centos上叫gcc-c++)安装了在说
### 建立软连接(这步我没有使用,因为我的/lib64下没有`libluajit-5.1.so.2`
ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2
### 设置环境变量
export LUAJIT_LIB=/usr/local/lib
export LUAJIT_INC=/usr/local/include/luajit-2.1 #这步跟你下载的luajit版本有关系
export LUAJIT_INC=/usr/local/include/luajit-2.1
这一步如果你安装的是luajit-2.0那么你应该填写对应的版本号,注意这里。
重新编译nginx,附加上lua-nginx-module和ngx-devel-kit
这里还要安装下lua库 sudo apt-get install libluajit-5.1-dev
不然编译nginx的时候会提示
checking for Lua library ... not found
checking for Lua library in /usr/local/ ... not found
由于我使用的是lnmp一键安装包,所以我在执行./install nginx
的时候在lnmp.conf
中的Nginx_Modules_Options
选项中加入了
--add-module=/usr/local/src/ngx_devel_kit-0.3.0/
--add-module=/usr/local/src/lua-nginx-module-0.10.7/
参考:https://lnmp.org/faq/lnmp1-2-upgrade.html
如果是自己编译的nginx,那么你需要自己手动加上上面2个编译参数,不出意外可以正常编译成功。如果有错误,自己google去吧。
WAF部署
克隆waf包到你的/usr/local/nginx/conf
下
cd /usr/local/nginx/conf
git clone https://github.com/loveshell/ngx_lua_waf.git 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;
配置config.lua
里的waf规则目录(一般在waf/conf/目录下)
RulePath = "/usr/local/nginx/conf/waf/wafconf/" #这个位置根据你clone的waf文件路径而定
重启nginx,OK。
测试访问http://54.223.119.137/p.php?id=../etc/passwd
,如果出现下面,就表示配置waf
成功。
更多用法参考:https://github.com/loveshell/ngx_lua_waf
安装参考: http://blog.oldboyedu.com/nginx-waf/
https://faq.xiaoz.me/archives/103.html