MENU

WAF初探

December 30, 2016 • Nginx

什么是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成功。
839d.png

更多用法参考:https://github.com/loveshell/ngx_lua_waf
安装参考: http://blog.oldboyedu.com/nginx-waf/
https://faq.xiaoz.me/archives/103.html