nginx lua lua-nginx-module构建web应用防火墙(waf)

1、简介

Web应用防火墙Web Application Firewall WAF),通过对HTTP(S)请求进行检测,识别并阻断SQL注入、跨站脚本攻击(Cross Site Scripting  xss)、网页木马上传、命令/代码注入、文件包含、敏感文件访问、第三方应用漏洞攻击、CC(挑战黑洞)攻击、恶意爬虫扫描、跨站请求伪造等攻击,保护Web服务安全稳定。

2、架构

整体架构:nginx + lua + lua-nginx-module

nginx lua lua-nginx-module构建web应用防火墙(waf)_第1张图片

nginx lua lua-nginx-module构建web应用防火墙(waf)_第2张图片

3、实现功能

支持IP白名单和黑名单功能,直接将黑名单的IP访问拒绝。
支持URL白名单,将不需要过滤的URL进行定义。
支持User-Agent的过滤,匹配自定义规则中的条目,然后进行处理(返回403)。
支持CC攻击防护,单个URL指定时间的访问次数,超过设定值,直接返回403。
支持Cookie过滤,匹配自定义规则中的条目,然后进行处理(返回403)。
支持URL过滤,匹配自定义规则中的条目,如果用户请求的URL包含这些,返回403。
支持URL参数过滤,原理同上。
支持日志记录,将所有拒绝的操作,记录到日志中去。
日志记录为JSON格式,便于日志分析,例如使用ELKStack进行攻击日志收集、存储、搜索和展示。

4、安装包下载

提供了超链接,可以根据自己的需求下载各种版本安装包

 LuaJIT-2.0.5.tar.gz

nginx-1.9.15.tar.gz

ngx_devel_kit-0.3.0.tar.gz

lua-nginx-module-0.10.10.tar.gz

5、安装

         5.1、创建目录,并下载安装包

mkdir -p /app/openresty/install

使用wget下载安装包(需要安装wget ),

或者将安装包下载到本地,然后通过rz将安装包上传到虚拟机(需要安装rz)

nginx lua lua-nginx-module构建web应用防火墙(waf)_第3张图片

 

nginx lua lua-nginx-module构建web应用防火墙(waf)_第4张图片

 

5.2、准备环境、安装基本包

yum install -y readline-devel pcre-devel openssl-devel gcc gcc-c++ perl.x86_64

nginx lua lua-nginx-module构建web应用防火墙(waf)_第5张图片

 

5.3、解压NDK和lua-nginx-module

tar zxvf lua-nginx-module-0.10.10.tar.gz

tar zxvf ngx_devel_kit-0.3.0.tar.gz 

nginx lua lua-nginx-module构建web应用防火墙(waf)_第6张图片

nginx lua lua-nginx-module构建web应用防火墙(waf)_第7张图片

 

5.4、安装LuaJIT

tar zxvf  LuaJIT-2.0.5.tar.gz

nginx lua lua-nginx-module构建web应用防火墙(waf)_第8张图片

cd LuaJIT-2.0.5

nginx lua lua-nginx-module构建web应用防火墙(waf)_第9张图片

编译并安装  make && make install

nginx lua lua-nginx-module构建web应用防火墙(waf)_第10张图片

 

5.5、配置环境变量

vi /etc/profile

末尾添加

export LUAJIT_LIB=/usr/local/lib
export LUAJIT_INC=/usr/local/include/luajit-2.0
export LD_LIBRARY_PATH=/usr/local/luajit/lib:$LD_LIBRARY_PATH

nginx lua lua-nginx-module构建web应用防火墙(waf)_第11张图片

保存并重新加载profile

source /etc/profile

5.6、安装Nginx并加载模块

tar zxvf nginx-1.9.15.tar.gz

nginx lua lua-nginx-module构建web应用防火墙(waf)_第12张图片

nginx lua lua-nginx-module构建web应用防火墙(waf)_第13张图片

 

配置环境

./configure --prefix=/usr/local/nginx/  --with-http_stub_status_module --with-http_sub_module --with-http_gzip_static_module --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module  --add-module=..
/ngx_devel_kit-0.3.0/ --add-module=../lua-nginx-module-0.10.10/

nginx lua lua-nginx-module构建web应用防火墙(waf)_第14张图片

编译安装 make && make install

nginx lua lua-nginx-module构建web应用防火墙(waf)_第15张图片

创建连接  ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2

如果不创建符号链接,可能出现以下异常:
error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory

nginx lua lua-nginx-module构建web应用防火墙(waf)_第16张图片

启动 

cd /usr/local/nginx/sbin

./nginx -t 

./nginx

ps -ef|grep nginx

nginx lua lua-nginx-module构建web应用防火墙(waf)_第17张图片

 

5.6、启动测试

关闭防火墙或者开放端口后访问

systemctl stop firewalld

nginx lua lua-nginx-module构建web应用防火墙(waf)_第18张图片

nginx lua lua-nginx-module构建web应用防火墙(waf)_第19张图片

 

6、部署waf

下载waf包  https://github.com/unixhot/waf

可以使用wget,也可以下载到本地,让后上传到虚拟机

解压后,将waf复制到/usr/local/nginx/conf/

cp -r waf /usr/local/nginx/conf/

nginx lua lua-nginx-module构建web应用防火墙(waf)_第20张图片

修改Nginx的配置文件,加入以下配置。注意路径,同时WAF日志默认存放在/tmp/日期_waf.log
    #WAF
    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";

重启nginx即可

 

参考了 https://github.com/unixhot 

你可能感兴趣的:(服务器)