OpenResty® 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),Web 开发人员和系统工程师可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。
openresty其实是对nginx进行了再次的封装,利用各种模块对Nginx进行了深度定制,也可以根据用户个人的喜好进行重新定制。
我们可以借助上面的特点,使用openresty结合 git clone https://github.com/unixhot/waf.git该项目,可以构建出一个简易而实用的waf防火墙,该防火墙可以防止绝大部分的SQL注入攻击,webshell上传等漏洞。
OpenResty的安装:
依赖包安装:
yum install -y pcre-devel openssl-devel git wget openssl-devel gcc curl readline-devel
下载并加压安装包:
cd /usr/local/src/ && wget "https://openresty.org/download/openresty-1.15.8.1.tar.gz" && tar -zxvf openresty-1.15.8.1.tar.gz && cd openresty-1.15.8.1
利用下面的参数进行编译:
./configure --frefix=/usr/local/openresty \
--with-luajit --with-http_stub_status_module \
--with-pcre --with-pcre-jit
编译并安装:make && make install
上面就完成了对openresty的安装,下面是克隆waf项目
克隆waf的规则库:这个规则库中存放了一些访问限制的规则,正是这些规则,在起着防御危险访问的限制,具体的可以限制哪些非法访问,可以看waf/rule-config/下的rule文件。所有需要拦截的格式都是通过这个规则库来配置的.
cd /usr/local/src/ && git clone https://github.com/unixhot/waf.git
该waf是在https://github.com/loveshell/ngx_lua_waf项目之上进行开发的。如有什么需要深入研究得话,可以参考这个原生项目。
cp -a /usr/local/src/waf/waf /usr/local/openresty/conf/
vim /usr/local/openresty/nginx/conf/nginx.conf
http {
.........
lua_shared_dict limit 50m;
lua_package_path "/usr/local/openresty/nginx/conf/waf/?.lua*";
init_by_lua_file "/usr/local/openresty/nginx/conf/waf/init.lua";
access_by_lua_file "/usr/local/openresty/nginx/conf/waf/access.lua";
..........
}
接下来可以配置下文件:/usr/local/src/waf/waf/config.lua,如错误回显。
检查上面得配置是否成功:
/usr/local/openresty/nginx/sbin/nginx -t
如果返回成功,则开启nginx
/usr/local/openresty/nginx/sbin/nginx
这时候,我们就可以在网页上进行测试,看是否配置生效,我们可以通过在网页上使用ip/a.sql进行测试,如下图
这样我们就利用了waf.git中得规则,对某些危险项进行了屏蔽和过滤。