1 Star 9 Fork 8

eeenet/xwaf

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
11个月前
11个月前
11个月前
11个月前
11个月前
11个月前
11个月前
11个月前
11个月前
11个月前
11个月前
11个月前
Loading...
README
MIT

简介

xwaf是利用lua+nginx作为web服务接入层,结合管理平台xwaf_admin进行管理的一款轻量级低成本防火墙。

xwaf_admin管理平台的功能主要是对接入的应用,建立一套安全防护、防刷限流的规则、黑白名单等规则进行管理维护,waf防护的规则参考开发web安全项目组织【owsp】的核心规则集【crs】。nginx实例从xwaf_admin管理平台读取配置、配置及规则信息并写进nginx的内存。 该防火墙的开发思路思想借鉴了modesecurity、openresty和x-waf中的waf模块思路,并完善改良。防刷限流核心策略采用:固定窗口、令牌桶、漏桶算法,并结合当前防刷限流中的一些不足之处进行改进。

其中,xwf在工作中有进行过大范围的使用、在安全性、稳定性、性能、可用性都得到过实际验证,效果显著,其中nginx+lua采用pcre-git来进行处理,性能有了极大的提升。在部署了xwaf的nginx单个实例上,qps达到了5000+,响应及状态码、机器性能和xwaf部署前相差不大,cpu及负载甚至还有略微的降低。

主要功能简单说明如下: web防护:可以拦截简单的xss、sql注入、webshell、cc攻击、ip/ua/referer/cookie的黑白名单等。 防刷限流:对于大量爬取数据,大量IP、大量ua来刷量的情况进行拦截限制,限制抓取的频率、速度等。 报表分析:将各种攻击类型及日志入库elasticsearch进行汇总分析并画图。 日志查询:将拦截的日志入库到elasticsearch,并进行实时查询。

一.xwaf安装目录

/usr/local/xwaf

二.目录结构如下

xwaf目录结构

三. 文件说明如下

Col1 Col2
403.html 入侵被拦截时返回的友好提示页,默认用这页面
405.html 入侵被拦截时返回的友好提示页,未使用
503.html 请求被限流时返回的友好提示页
access.lua nginx引入的防火墙入口文件
conf/appname.json 配置接入的应用名
config.lua 加载配置到内存
init.lua 初始化防火墙模块
lib/* lua库文件
nginx_xwaf.conf nginx接入引入的配置文件
timer.lua 更新防火墙配置的定时器、触发配置更新。
version.txt 版本号
util.lua 防火墙核心控制模块,作用是配置更新、限流拦截、日志处理、规则同步等功能
waf.lua 防火墙规则控制模块,作用是用于拦截请求并进行分析,并根据防火墙规则进行处理。

四.nginx引入xwaf防火墙配置

include /usr/local/xwaf/nginx_xwaf.conf; init_worker_by_lua_file /usr/local/xwaf/timer.lua; resolver 192.168.xx.xx; 参考下图: xwaf目录结构

五、功能模块

功能模块1 功能模块2 功能模块3 功能模块4

三、架构示意图

架构示意图

六、技术原理

1、waf安全的拦截

首先了解nginx 的请求处理的工作流程: nginx请求处理过程

结合nginx的工作流程,nginx的lua模块在nginx中划分了如下8个阶段: lua请求处理过程 waf模块的工作流程如下: 1、在init_by_lua阶段读取原始默认配置,并将配置写入nginx的table和词典。 2、在set_by_lua阶段和rewrite_by_lua没有定义变量和rewrite,此阶段不做处理。 3、在access_by_lua阶段对请求头里的各个参数进行判断,判断范围包括如下几个重要的信息:【url,args,useragent,remoteaddress,x-forward-for,cookies,request_body】。当请求头里的信息是否符合定义的防火墙规则,然后再根据规则是允许还是阻止进行相应的动作。 4、结合公司的业务特色会做如下几个判断并觉得是否排除:【1】针对广告的post请求忽略,【2】针对上传文件忽略,【3】针对静态文件是否进行拦截判断,【4】针对内网请求是否进行拦截判断。 5、如果被拦截则返回403,并返回自定义返回页面。如果放行则请求进入下一阶段或者进入后端处理。

2、防刷限流

1.防刷限流的判断流程也是在access_by_lua阶段进行处理。 2.防刷限流是利用nginx的词典、固定窗口策略,通过分析请求头里的信息并利用词典进行计数统计,达到限定的阀值则返回503。 3.nginx 词典功能类似redis或mc,是一个内存型nosql的数据存储数据库,具备set过期时间的功能,利用该过期时间可以在周期范围内的请求数据量进行判断。 4.支持令牌桶、漏桶策略的防刷限流功能扩展。

3、规则及配置更新

1、xwaf具备在平台设置配置,定义防火墙规则、防刷限流规则,并将规则和接入的应用进行管理。而nginx+lua的客户端则需要从管理平台读取配置及规则过来写入词典和table里才能实现拦截判断。 2、对于每个接入的应用都有一个独立的应用名称。管理平台对每个独立的应用启用一套独立的防火墙配置或规则。然后再提供一个接口供nginx+lua客户端读取配置。 3、nginx+lua客户端利用timer定时器通接口进行判断配置是否更新,有更新则读取配置,没有更新则忽略。 4、nginx+lua客户端读取配置以后,将配置set进词典。 5、有些需要set进table的配置,则利用timer根据版本标签进行判断,如需更新则加载到nginx 各个worker的内存。

4、拦截日志采集

1、首先lua中将日志进行json序列化。 2、利用lua+kafka客户端将日志推送到kafka,日志采集支持本地文件、http、kafka。默认设置为kafka。 2、然后再利用logkit将kafka中的日志采集入库elasticsearch。

七.拦截效果截图如下:

1.kibana分析拦截的信息及走势图

kibana分析 kibana分 kibana分 kibana分

2.xwaf_admin中的安全分析大盘

xwaf目录结构

3.线上应用存在的一些漏洞来进行测试

xwaf目录结构

4.上线xwaf后的拦截效果的日志记录

xwaf目录结构

5.上线xwaf后的拦截后,机器负载下降

xwaf目录结构

6.上线xwaf后的拦截后,服务趋于稳定,出现超时的状态码减少

xwaf目录结构

7.上线xwaf后的拦截后,总体数据汇总

拦截汇总

八.常见问题

1、xwaf的性能怎样?

答:经过大规模的应用验证,单nginx的实例【4核、4G】最高达到20w+/分的请求时,机器负载和内存占用和部署xwaf之前相差不大。

2、xwaf是否安全,当出问题时、是否会影响业务?

答:nginx实例在加载xwaf防火墙时、默认情况下防火墙开关是关闭的。在这种情况下是不对请求做任何的分析或拦截的。只有当nginx是从控制台读取到正确的配置时才开始工作。而当防火墙的配置或规则被加载成功以后。中途如果出现控制台挂掉无法加载配置时,就会按照上一次加载成功的配置执行。 如果控制台挂了,就会出现加载配置出错的日志打印,但不会影响服务运行。此时可以通过注释nginx中的xwaf配置,然后relod。

3、xwaf的防火墙效果怎样?

答:经过近一年的大规模应用情况来看,在waf拦截效果上,能有效拦截业务90%+左右的攻击,而在防刷限流上,能将原本刷量、爬虫的量拦截90%+,如果在通过精细话的规则,可以接近100%的拦截,特别是当防刷开启限制响应速度、或者开启限制带宽后,可以将对方的请求有效进行阻断,从而导致对方需要消耗更多的资源来进行爬取,这在一定程度上就进行了有效的拦截。

MIT License Copyright (c) 2024 eeenet Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

利用lua+nginx实现的低成本、高性能的waf防火墙,可以抵御普通的xss攻击、sql注入、cc攻击、webshell木马,有IP、useragent、referer等的黑白名单。还能实现防刷限流,限制请求的速率、限制下载速度等功能,对于经常被爬取数据、或被刷的网站有很好的防御效果。 展开 收起
Lua 等 3 种语言
MIT
取消

发行版

暂无发行版

贡献者 (2)

全部

近期动态

2个月前推送了新的提交到 master 分支,add7685...c7d528e
3个月前推送了新的提交到 master 分支,751fd0e...add7685
3个月前推送了新的提交到 master 分支,04b3d3f...751fd0e
11个月前推送了新的提交到 master 分支,7049063...04b3d3f
11个月前推送了新的提交到 master 分支,eada27a...7049063
加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/eeenet/xwaf.git
git@gitee.com:eeenet/xwaf.git
eeenet
xwaf
xwaf
master

搜索帮助