OpenResty学习笔记02:安装WAF

一. 什么是WAF

 
Web应用防护系统(也称为:网站应用级入侵防御系统。英文:Web Application Firewall,简称: WAF)。
目前国内的几大云服务商都提供了企业级的WAF产品,且均价格不菲。
好消息是,在 OpenResty 生态中,有几款开源的WAF可供我等学习,开源万岁!
 

二. 开源的WAF

 

  1. ModSecurity:https://github.com/SpiderLabs/ModSecurity
  2. Kindle大神的ngx_lua_waf:https://github.com/loveshell/ngx_lua_waf
  3. VeryNginx:https://github.com/alexazhou/VeryNginx
  4. 赵班长的WAF:https://github.com/unixhot/waf
     

以上是目前已知的四款开源WAF,根据我本人了解到的信息大概情况如下:
第一个 ModSecurity 来自国外,出现的最早,在软WAF的领域貌似影响力很大,尤其是它的防御规则非常牛X,该项目现在还在维护中;
第二个 ngx_lua_waf 是一位国人写的,出现的时间也很早,后期其他基于Lua的WAF或多或少都借鉴了ngx_lua_waf的思路,该项目已停止维护;
第三个 VeryNginx 也是国人写的,最大的特点是具备Web控制台页面,可以更直观的修改配置,且无需对Nginx进行reload,该项目已停止维护;
 
第四个来自赵班长的WAF应该是目前使用人数最多的,主要特点就是小巧精悍、功能齐全,最适合像我这样的WAF菜鸟拿来学习。
该项目原本已停止维护,但班长在2020.7.29表示还会继续维护并增加新功能,你信吗,反正我信(你个鬼)。
本系列笔记主要围绕赵班长的WAF展开学习历程,其他三个怕是没有时间再去尝试了。
 
赵班长WAF的主要功能列表:

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

三. 安装WAF

 

cd /home/my/tools git clone https://github.com/unixhot/waf.git cp -a ./waf/waf ./waflib rm -rf ./waf cd waflib 

 
之后需要创建一个软连接,否则会提示 failed to load the 'resty.core' module
 

ln -s /usr/local/openresty/lualib/resty/ /home/my/tools/waflib/resty 

 
修改waf的配置文件,重新指定规则目录位置:
 

vim config.lua 

 
修改其中的 config_rule_dir 为实际位置:
 

--rule setting config_rule_dir = "/home/my/tools/waflib/rule-config" 

 
至此,我们的WAF就安装完成了,看一下最终的目录清单:
 

ls -al 

 
OpenResty学习笔记02:安装WAF
 

四、在Nginx配置中引用WAF

 
想要启动WAF,还需要修改Nginx的配置文件。
我们保留上一篇的 hello 项目,再创建一个新的工作目录 waf,并创建新的Nginx配置文件:
 

cd /home/my/work mkdir waf cd waf mkdir logs conf vim conf/nginx.conf 

 
将下面的配置内容粘贴到新建的配置文件中:
 

worker_processes 1; error_log logs/error.log; events { worker_connections 1024; } http { lua_shared_dict limit 50m; lua_package_path "/home/my/tools/waflib/?.lua"; init_by_lua_file "/home/my/tools/waflib/init.lua"; access_by_lua_file "/home/my/tools/waflib/access.lua"; server { listen 8080; location /waf { default_type text/html; content_by_lua_block { ngx.say("<p>hello waf!</p>") } } } } 

 
该配置文件中增加了对 waflib 的引用。
启动后将打开 8080 的监听端口,并创建了一个名为 /waf 的服务,输出一行静态的文字:hello waf!
 
启动Nginx:
 

openresty -p `pwd`/ -c conf/nginx.conf 

 
使用浏览器访问:localhost:8080/waf,不出意外的话应该会显示以下信息:
hello waf!
 
再尝试访问另一个地址:localhost:8080/waf/.bak,该地址会触发 waf 的保护规则,因此会显示以下信息:
欢迎白帽子进行授权安全测试,安全漏洞请联系QQ:57459267
 
这段信息是命中WAF的保护规则后的默认信息,我们可以在 config.lua 文件中对这段信息进行自定义。
 

五. 总结

 
至此,我们已经成功在 OpenResty 环境下安装完成了 waf 功能,并初步测试通过。
下一篇将深入学习 waf 的实现原理,并进行简单的个性化改造。

原文链接:https://www.cnblogs.com/netWild/p/17365883.html

原创文章,作者:优速盾-小U,如若转载,请注明出处:https://www.cdnb.net/bbs/archives/21056

(0)
上一篇 2023年10月4日
下一篇 2023年10月4日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

优速盾注册领取大礼包www.cdnb.net
/sitemap.xml