一种基于nginx请求转发的Web防火墙拥塞控制方法与流程

文档序号:16544586发布日期:2019-01-08 20:46阅读:425来源:国知局
一种基于nginx请求转发的Web防火墙拥塞控制方法与流程

本发明涉及防火墙技术领域,特别涉及一种基于nginx请求转发的web防火墙拥塞控制方法。



背景技术:

web应用防火墙作为现代互联网中重要的安全防护设施,在网络安全性的保证方面起着不可估量的作用。web防火墙系统对网络流量的解析较为深入,其对数据处理的复杂性也导致其吞吐量低于一般的数据包级别和流级别的防火墙,性能损失较为严重。当在防护一些流量或访问量较大的网站或系统时,如何使得web防火墙在负载请求过大时能及时调整自身策略,使得系统尽快恢复到正常工作状态,保证系统有较好的应对能力并能持续稳定的提供服务,显得格外重要。

目前关于应对大流量的拥塞控制策略主要是一种基于主动队列的管理算法,该类算法以概率性丢包为基础,提前预测网络可能出现的拥塞。利用tcp协议工作特点,采取选择性丢包的策略控制流量大小,对拥塞现象加以避免。

这种基于概率性丢包思想的做法被广泛应用于路由器这种主要负责分组转发功能的设备上,并不适用于web防火墙这种以内容还原检测为主要目的的系统。这种算法为缓冲区设定不同的阈值,标识出缓冲区分组数量在不同范围内时,系统应使用的丢包概率。这种方法避免了溢出法出现的队列抖动性现象,使得队列长度能够保持在一个较为平稳的范围。

由于web防火墙主要处理部分在http层处理上,驱动有较高的转发速率。当web防火墙面对网络负载较大的情况时,采用概率丢弃思想虽然可以有效减小网络流量,但是这样会造成用户请求响应缓慢,影响用户的正常业务处理,不能充分发挥web防火墙的高速转发的功能。

nginx是一个轻量级的服务器,具有转发速度快,内存占用小,并发能力强等优点,nginx的配置文件很容易与c,lua等语言结合,制定访问规则容易。目前有不少waf(网站应用级入侵防御系统)是基于nginx添加检测规则来实现的。本发明即针对基于nginx的web防火墙在规则复杂时性能损耗较大的特点,结合阻塞队列和qps检测的思想,提出一种基于请求转发的拥塞控制方法。旨在提高防火墙的业务吞吐量,降低系统的丢包率



技术实现要素:

本发明的目的是克服上述背景技术中不足,提供一种基于nginx请求转发的web防火墙拥塞控制方法,旨在解决现有的基于nginx的web应用防火墙(下文均简称为waf)对业务性能损耗过大的不足,目的在于提升waf的吞吐量,减小用户与业务源站间的性能损耗,增强waf处理请求的能力。

为了达到上述的技术效果,本发明采取以下技术方案:

一种基于nginx请求转发的web防火墙拥塞控制方法,其特征在于,包括以下步骤:

a.统计web防火墙的吞吐量,在业务请求量正常的情况下在一段时间内连续统计nginx当前的请求队列长度和每秒查询率qps,其中,在队列长度稳定的情况下对应的每秒查询率qps就是web防火墙的系统吞吐量tps,稳定的队列长度即当前网络环境下正常的队列长度lm;

b.当nginx当前每秒查询率qps大于或等于web防火墙的系统吞吐量tps时,每隔时间间隔t,获取一次nginx的当前队列长度l1,在连续n次获取nginx的当前队列长度后,计算(n-1)*t这段时间内队列的平均长度l=(l1+l2+...+ln)/n;其中,n的值可有技术人员根据业务情况确定;

即nginx内部对当前qps与系统吞吐量tps作比较,当qps大于tps时,一定时间段内用循环方式记录这段时间内的队列长度总和,然后除以统计次数得到这段时间内的请求队列平均长度l;

c.根据队列平均长度l和队列正常长度lm,计算队列的增长率p,p=(l-lm)/lm;

d.前端负载均衡服务器定期获取队列增长率p,并根据队列增长率p对负载均衡服务器的负载权重作调整,使请求中占比为p百分比的请求不通过web防火墙直接被转发到后台业务服务器;

即waf前方的负载均衡服务器通过拉取配置的方式定时获取后方一台或多台waf的请求队列增长率,根据增长率来配置负载均衡服务器中upstream节点的权重,保证占比为p的部分请求能直接被转发到后台业务服务器;

e.重复步骤b至步骤d,直至队列增长率p开始下降;当增长率p小于0时,表明在当前分流比率下web防火墙能够及时处理来访的请求,此时维持负载权重不变;

即反复判断当前qps与waf吞吐量tps的关系,并计算队列增长率,若当前qps持续增加,响应的队列增长率(即请求转发率)也相应提高,则以这种方式来减小流经waf的流量;当增长率小于0时,表明平均等待队列长度已经小于正常时的队列长度,流经waf的流量开始下降,此时转发权重保持不变;

f.持续监控web防火墙的当前每秒查询率qps,若每秒查询率qps下降至小于web防火墙的系统吞吐量tps,则停止负载均衡服务器的转发;

即waf继续监测当前自身的qps,若qps已下降至小于tps,表明waf无需转发即可自己完成所有的请求处理,此时停止转发。

进一步地,所述步骤1具体为:针对web防火墙保护的服务器或业务,在业务正常工作的情况下,通过nginx的status模块获取nginx当前的处理链接数,通过nginx的tcp参数获取当前的等待队列长度,待队列长度稳定之后记录队列长度数值作为正常的队列长度lm,并记录此时nginx处理的链接数作为系统吞吐量tps。

进一步地,所述步骤b中,若nginx当前每秒查询率qps小于web防火墙的系统吞吐量tps时,则在步骤c中直接将增长率p赋为特殊值,步骤d中前端负载均衡服务器获取到队列增长率p为特殊值时则直接进入步骤f并停止负载均衡服务器向业务服务器的直接转发,将请求全交由web防火墙处理。

进一步地,所述时间间隔t为1秒,实际中也可由技术人员根据具体业务情况确定该时间间隔t的具体取值。

本发明与现有技术相比,具有以下的有益效果:

本发明的基于nginx请求转发的web防火墙拥塞控制方法中,采用以qps和等待队列长度相结合的方式来实现waf的阻塞控制,将nginx的当前qps作为一个标志量,用来触发对等候队列的判断,请求等待队列的长度增加与否则直接表明了waf是否有能力处理当前qps下对业务的代理请求,队列增加,表明阻塞情况趋于严重,此时需要负载均衡服务器作转发分流,缓解waf压力,防止down机使整个业务系统处于不受保护的危险环境中;队列长度稳定或减小,表明waf有能力处理当前数量的请求,此时便停止转发,使尽可能多的请求经过waf的检测。本发明的方法作为性能与安全两个对立面中的一种折中方案,可以在保证业务系统正常工作的情况下,尽可能多的检测请求,可解决防火墙检测规则过于复杂带来的响应时间过久甚至响应错误的问题,在阻塞时通过直接转发的方式来缓解防火墙压力,从而达到控制阻塞、提高业务性能及保护系统安全的目的。

附图说明

图1是本发明的基于nginx请求转发的web防火墙拥塞控制方法的流程示意图。

具体实施方式

下面结合本发明的实施例对本发明作进一步的阐述和说明。

实施例:

由于waf需要对每条来访的请求进行检测,即使nginx具有高性能的特点,在规则库规则增多的情况下,请求检测依旧会带来相当高的性能损耗,而此时如果请求数增多,waf很容易产生阻塞丢包,导致请求不能得到正常响应。本发明实施实例需要首先检测waf的负载状态,得到waf的正常吞吐量;当负载超出这个值之后,请求就可能被堵塞,影响用户正常使用。

如图1所示,一种基于nginx请求转发的web防火墙拥塞控制方法,具体包括以下步骤:

步骤1:统计web防火墙的吞吐量,在业务请求量正常的情况下在一段时间内连续统计nginx当前的请求队列长度和每秒查询率qps(querypersecond),其中,在队列长度稳定的情况下对应的每秒查询率qps就是web防火墙的系统吞吐量tps(transactionpersecond),稳定的队列长度即当前网络环境下正常的队列长度lm。

具体为,针对web防火墙保护的服务器或业务,在业务正常工作的情况下,通过nginx的status模块获取nginx当前的处理链接数,通过nginx的tcp(transmissioncontrolprotocol)参数获取当前的等待队列长度,待队列长度稳定之后记录队列长度数值作为正常的队列长度lm,并记录此时nginx处理的链接数作为系统吞吐量tps。

步骤2:当nginx当前每秒查询率qps大于或等于web防火墙的系统吞吐量tps时,每隔时间间隔t(本实施例中取值为1s),获取一次nginx的当前队列长度l1,在连续n次获取nginx的当前队列长度后,计算(n-1)*t这段时间内队列的平均长度l=(l1+l2+...+ln)/n;其中,n的值可有技术人员根据业务情况确定。

即nginx内部对当前qps与系统吞吐量tps作比较,当qps大于tps时,一定时间段内用循环方式记录这段时间内的队列长度总和,然后除以统计次数得到这段时间内的请求队列平均长度l。

步骤3:根据队列平均长度l和队列正常长度lm,计算队列的增长率p,p=(l-lm)/lm。

步骤4:前端负载均衡服务器定期获取队列增长率p,并根据队列增长率p对负载均衡服务器的负载权重作调整,使请求中占比为p百分比的请求不通过web防火墙直接被转发到后台业务服务器;

即waf前方的负载均衡服务器通过拉取配置的方式定时获取后方一台或多台waf的请求队列增长率,根据增长率来配置负载均衡服务器中upstream节点的权重,保证占比为p的部分请求能直接被转发到后台业务服务器。

步骤5:重复步:2至步骤4,直至队列增长率p开始下降;当增长率p小于0时,表明在当前分流比率下web防火墙能够及时处理来访的请求,此时维持负载权重不变。

即反复判断当前qps与waf吞吐量tps的关系,并计算队列增长率,若当前qps持续增加,响应的队列增长率(即请求转发率)也相应提高,则以这种方式来减小流经waf的流量;当增长率小于0时,表明平均等待队列长度已经小于正常时的队列长度,流经waf的流量开始下降,此时转发权重保持不变。

步骤6:持续监控web防火墙的当前每秒查询率qps,若每秒查询率qps下降至小于web防火墙的系统吞吐量tps,则停止负载均衡服务器的转发。

即waf继续监测当前自身的qps,若qps已下降至小于tps,表明waf无需转发即可自己完成所有的请求处理,此时停止转发。

具体的,若步骤2中,若nginx当前每秒查询率qps小于web防火墙的系统吞吐量tps时,则在步骤3中直接将增长率p赋为特殊值,步骤4中前端负载均衡服务器获取到队列增长率p为特殊值时则直接进入步骤f并停止负载均衡服务器向业务服务器的直接转发,将请求全交由web防火墙处理。

通过上述内容可知,本发明的技术方案中,waf通过获取nginx状态得到当前的访问数,当检测到当前访问的qps超过了正常tps,若继续照当前速度处理请求,则会导致队列排队过长从而无法正常响应所有请求,此时为了确认超出负载的请求有多少,nginx通过统计一段时间内请求队列的增加情况得到这段时间内队列长度的增长率,当前方的负载均衡服务器拉取到增长率值后,会调整upstream的权重,将部分请求直接代理到业务源站,绕过waf,从而减少waf的负载,防止停机。

当业务源站的请求流量下降时,队列增涨速度减慢;当一段时间内的队列平均长度小于或等于设定值(即正常的队列长度lm)时,表明此时的队列增长率为0或为负,队列有缩短趋势,即在当前转发比例下waf可以保证不被堵塞,此时维持转发比例不变。

waf监控自身的qps数,当qps小于自身tps值时,将增长率p赋为特殊值;负载均衡服务器拉取到增长率并作判断,若为特殊值则停止向业务服务器的直接转发,将请求全交由waf处理。

本发明具体通过以上技术方案,实现在流量过大时维持正常的业务访问及一定的防御能力,waf会在qps增大至超过承受限度时开始计算等待队列的增长率,并按增长率将超出负荷的流量用负载均衡服务器分流,达到缓解waf请求阻塞的目的。

可以理解的是,以上实施方式仅仅是为了说明本发明的原理而采用的示例性实施方式,然而本发明并不局限于此。对于本领域内的普通技术人员而言,在不脱离本发明的精神和实质的情况下,可以做出各种变型和改进,这些变型和改进也视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1