使用Nginx+Lua实现自定义WAF(Web application firewall) 您所在的位置:网站首页 dns反向代理 使用Nginx+Lua实现自定义WAF(Web application firewall)

使用Nginx+Lua实现自定义WAF(Web application firewall)

#使用Nginx+Lua实现自定义WAF(Web application firewall)| 来源: 网络整理| 查看: 265

转载https://github.com/unixhot/waf

WAF 使用Nginx+Lua实现自定义WAF(Web application firewall)

功能列表: 支持IP白名单和黑名单功能,直接将黑名单的IP访问拒绝。 支持URL白名单,将不需要过滤的URL进行定义。 支持User-Agent的过滤,匹配自定义规则中的条目,然后进行处理(返回403)。 支持CC攻击防护,单个URL指定时间的访问次数,超过设定值,直接返回403。 支持Cookie过滤,匹配自定义规则中的条目,然后进行处理(返回403)。 支持URL过滤,匹配自定义规则中的条目,如果用户请求的URL包含这些,返回403。 支持URL参数过滤,原理同上。 支持日志记录,将所有拒绝的操作,记录到日志中去。 日志记录为JSON格式,便于日志分析,例如使用ELK进行攻击日志收集、存储、搜索和展示。 WAF实现 WAF一句话描述,就是解析HTTP请求(协议解析模块),规则检测(规则模块),做不同的防御动作(动作模块),并将防御过程(日志模块)记录下来。所以本文中的WAF的实现由五个模块(配置模块、协议解析模块、规则模块、动作模块、错误处理模块)组成。

安装部署 以下方案选择其中之一即可:

选择1: 可以选择使用原生的Nginx,增加Lua模块实现部署。 选择2: 直接使用OpenResty OpenResty安装 1 Yum安装OpenResty(推荐)

源码安装和Yum安装选择其一即可,默认均安装在/usr/local/openresty目录下。

[root@opsany ~]# wget https://openresty.org/package/centos/openresty.repo [root@opsany ~]# sudo mv openresty.repo /etc/yum.repos.d/ [root@opsany ~]# sudo yum install -y openresty 测试OpenResty和运行Lua [root@opsany ~]# vim /usr/local/openresty/nginx/conf/nginx.conf #在默认的server配置中增加 location /hello { default_type text/html; content_by_lua_block { ngx.say("

hello, world

") } } [root@opsany ~]# /usr/local/openresty/nginx/sbin/nginx -t nginx: the configuration file /usr/local/openresty-1.17.8.2/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/openresty-1.17.8.2/nginx/conf/nginx.conf test is successful [root@opsany ~]# /usr/local/openresty/nginx/sbin/nginx

测试访问

[root@opsany ~]# curl http://127.0.0.1/hello hello, world

WAF部署

[root@opsany ~]# git clone https://github.com/unixhot/waf.git [root@opsany ~]# cp -r ./waf/waf /usr/local/openresty/nginx/conf/ [root@opsany ~]# vim /usr/local/openresty/nginx/conf/nginx.conf #在http{}中增加,注意路径,同时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"; [root@opsany ~]# ln -s /usr/local/openresty/lualib/resty/ /usr/local/openresty/nginx/conf/waf/resty [root@opsany ~]# /usr/local/openresty/nginx/sbin/nginx -t [root@opsany ~]# /usr/local/openresty/nginx/sbin/nginx -s reload Nginx反向代理

Nginx+Lua WAF很重要的一个基础功能,即反向代理功能,通过代理的方式保护网站: 在nginx.conf配置文件倒数第二行处添加一行,增加www.douwaf.com的反向代理配置,保护的网站多了以后会导致nginx.conf太大难以维护,所以通常会把不同服务的配置文件独立组成文件。

include "/usr/local/openresty/nginx/conf/www.douwaf.com.conf";

include指令也支持通配符,所以更常见的做法是:

include "/home/maidou/opt/openresty/nginx/conf/*.conf";

编辑www.douwaf.com.conf,定义upstream组,对应是后端真实提供服务的服务器地址和端口,192.168.1.222:80

upstream xi{ server 192.168.1.222:80; } server { listen 80; server_name www.test.com; location / { proxy_pass http://xi; index index.html index.htm; } }

使用页面访问,可以正常使用,说明反向代理配置生效。测试阶段也可以不进行DNS切换,修改/etc/hosts文件也可以达到同样效果

基于Nginx+Lua的WAF

1)WAF配置。WAF的配置在config.lua文件中完成,其中比较重要的几个配置内容如下所示。 ● config_waf_enable:表明WAF是否拦截,on表明检测并拦截,off表明检测不拦截 ● config_log_dir:表明WAF日志对应的路径 ● config_rule_dir:表明WAF规则对应的路径 ● config_url_check:表明是否对URL进行检测 ● config_user_agent_check:表明是否对user_agent进行检测 ● config_cookie_check:表明是否对cookie进行检测 ● config_post_check:表明是否对post内容进行检测 ● config_output_html:表明检测到攻击后返回给用户的页面内容

Lua环境初始化:Lua的初始化是在init.lua文件中完成的,根据配置分别加载不同的规则文件。比如在函数url_attack_check中,首先判断配置文件中是否配置需要检测URL:

function url_attack_check() if config_url_check == "on" then

如果配置了该选项,则加载对应的检测规则:

local URL_RULES = get_rule('url.rule')

其他检测URL参数、cookie以及post内容都类似。

Lua处理HTTP协议: 这个是整个WAF最核心的部分,流程如图2-8所示,Nginx处理HTTP协议的请求内容,将HTTP协议解析成URL、URL参数、post内容、cookie、user-agent等字段,Lua针对这些字段进行检测,判断攻击类型。处理应答内容类似,不再赘述。整个处理过程体现在access.lua文件,可以看出一个HTTP请求会如图2-9所示,串行经过各种检测: 在这里插入图片描述

function waf_main() if white_ip_check() then elseif black_ip_check() then elseif user_agent_attack_check() then elseif cc_attack_check() then elseif cookie_attack_check() then elseif url_attack_check() then elseif url_args_attack_check()

Lua的检测规则在rule-config目录,不同检测内容保存在不同文件中



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有