分布式拒绝服务攻击防护与负载均衡一体化的方法和系统与流程

文档序号:12494018阅读:221来源:国知局
分布式拒绝服务攻击防护与负载均衡一体化的方法和系统与流程

本发明涉及计算机通信领域,特别涉及一种分布式拒绝服务攻击防护与负载均衡一体化的方法和系统。



背景技术:

分布式拒绝服务攻击(Distributed Denial of Service,DDoS)是目前网络攻击中最常见的手段,具备简单、暴力、攻击效果好的特征,能够对被攻击目标的服务造成很大的影响。随着互联网的发展,当前的攻击呈现出攻击带宽越来越大、攻击越来越频繁的特征,造成的影响也越来越严重。

DDoS针对的是破坏被攻击目标的“可用性”,该攻击方式利用目标系统网络服务功能缺陷或者直接消耗其系统资源,使得该目标系统无法提供正常的服务。

对于节点来说,常用的防护方式是部署硬件防护设备进行DDoS攻击的防护。同时节点通常部署有负载均衡设备,以实现流量在服务器集群之间的负载均衡,达到更好的性能,常用的负载均衡工具是Linux虚拟服务器(LVS),在非常多的互联网公司的服务中,已经被大量用于节点内部的负载均衡。

然而现有技术存在的问题是:(1)节点DDoS的防护由于需要部署硬件,会增加成本;(2)单独的防护设备与负载均衡设备相互独立,容易出现连接状态不统一,从而使得防护及流量处理出现问题;(3)负载均衡设备处理流程较多,影响整体系统的性能。



技术实现要素:

为了解决现有技术的问题,本发明实施例提供了一种分布式拒绝服务攻击防护与负载均衡一体化的方法和系统。所述技术方案如下:

一方面,一种分布式拒绝服务攻击防护与负载均衡一体化的方法,包括以下步骤:

判断接收到的报文的类型,根据报文的类型将报文传输给与报文的类型对应的防护模块进行检测,得到攻击报文和正常报文;

与该报文的类型对应的防护模块将攻击报文进行过滤或将正常报文发送给内核线程模块;

内核线程模块根据报文的类型修改报文并发送。

进一步的,根据报文的类型将报文传输给与报文的类型对应的防护模块进行检测,得到攻击报文和正常报文,与该报文的类型对应的防护模块将攻击报文进行过滤的步骤具体包括:

对传输控制协议报文的传输速率进行统计,当传输控制协议报文的传输速率超过阈值时,对超过阈值的传输控制协议报文进行SYN COOKIE验证、连接表查找或HTTP行为验证,过滤攻击报文;

对源网络协议地址和目的网络协议地址的用户数据报协议报文的传输速率和带宽进行统计,当用户数据报协议报文的传输速率或带宽超过阈值时,丢弃用户数据报协议报文;

对目的网络协议地址的互联网控制报文协议报文的带宽进行统计,当互联网控制报文协议报文的带宽超过阈值时,丢弃互联网控制报文协议报文。

具体的,对传输控制协议报文的传输速率进行统计,当超过阈值时认为有攻击发生,进行SYN COOKIE验证、连接表查找或HTTP行为验证对攻击报文进行过滤的方法包括:

SYN FLOOD检测防护:对各目的网络协议地址的SYN报文进行统计,当超过阈值时,开启防护,采用SYN COOKIE的方式进行验证,对攻击报文回应带有COOKIE的SYN/ACK报文,并对后续ACK报文进行COOKIE验证;

ACK FLOOD检测防护:根据连接表进行防护,对于合法的握手ACK报文,传入内核创建连接,对于非法的ACK报文,则直接丢弃;

HTTP FLOOD检测防护:对超文本传输协议请求报文进行统计,当超过设定的阈值时,开启防护,向发起请求的网络协议地址发送加入验证字段的超文本传输协议响应报文,并对该网络协议地址后续发来的报文验证所述字段。

进一步的,内核线程模块根据报文的类型修改报文并发送的步骤具体为:

内核线程模块通过共享内存方式接收正常报文,根据正常报文的类型,查找并修改正常报文的目的地址,然后封装正常报文进行发送。

具体的,根据正常报文的类型,查找并修改正常报文的目的地址,然后封装正常报文进行发送的具体步骤为:

对于传输控制协议类型的报文,判断是否为握手报文;

如果是握手报文,则调用Linux虚拟服务器的接口创建连接,并根据连接表中下一跳的物理地址信息,修改握手报文,再将握手报文封装后放入发送队列等待发送;

如果不是握手报文,则根据报文在Linux虚拟服务器的连接表中是否含有连接及是否为结束报文进行处理。

具体的,根据报文在Linux虚拟服务器的连接表中是否含有连接及是否为结束报文进行处理的具体步骤为:

查找Linux虚拟服务器的连接表,判断连接表是否有该报文对应的连接;

如果连接表含有该报文对应的连接,则根据连接表中的信息查找到下一跳的物理地址,修改并封装报文,放入发送队列等待发送;

如果连接表不含有该报文对应的连接,则判断该报文是否为结束连接报文;

如果是结束连接报文,则将正常报文拷贝并送入协议栈,进行Linux虚拟服务器的处理流程,完成连接状态更新;

如果不是结束连接报文,则直接丢弃报文。

另一方面,一种分布式拒绝服务攻击防护与负载均衡一体化的系统,包括:

分布式拒绝服务防护模块,用于判断接收到的报文的类型,根据报文的类型将报文传输给与所述报文的类型对应的防护子模块进行检测,得到攻击报文和正常报文,与该报文的类型对应的防护子模块将攻击报文进行过滤或将正常报文发送给内核线程模块;

内核线程模块,用于根据报文的类型修改报文并发送。

进一步的,内核线程模块包括:

内核收发包模块,用于通过共享内存方式收发正常报文;

负载均衡模块,用于根据正常报文的类型,查找并修改正常报文的目的地址,然后封装正常报文后进行发送。

进一步的,分布式拒绝服务防护模块包括:

报文类型判断子模块,用于判断报文类型;

传输控制协议防护子模块,用于对传输控制协议报文的传输速率进行统计,当传输控制协议报文的传输速率超过阈值时,对超过阈值的传输控制协议报文进行SYN COOKIE验证、连接表查找或HTTP行为验证,过滤攻击报文;

用户数据报协议防护子模块,用于对源网络协议地址和目的网络协议地址的用户数据报协议报文的传输速率和带宽进行统计,当用户数据报协议报文的传输速率或带宽超过阈值时,丢弃用户数据报协议报文;

互联网控制报文协议防护子模块,用于对目的网络协议地址的互联网控制报文协议报文的带宽进行统计,当互联网控制报文协议报文的带宽超过阈值时,丢弃互联网控制报文协议报文。

进一步的,传输控制协议防护子模块具体包括:

SYN FLOOD检测防护单元:用于对各目的网络协议地址的SYN报文进行统计,当超过阈值时,开启防护,采用SYN COOKIE的方式进行验证,对攻击报文回应带有COOKIE的SYN/ACK报文,并对后续ACK报文进行COOKIE验证;

ACK FLOOD检测防护单元:用于根据连接表进行防护,对于合法的握手ACK报文,传入内核创建连接,对于非法的ACK报文,则直接丢弃;

HTTP FLOOD检测防护单元:用于对超文本传输协议请求报文进行统计,当超过设定的阈值时,开启防护,向发起请求的网络协议地址发送加入验证字段的超文本传输协议响应报文,并对该网络协议地址后续发来的报文验证所述字段。

本发明实施例提供的技术方案带来的有益效果是:本发明将分布式拒绝服务防护功能与负载均衡功能集成到同一台设备上,解决了单独防护设备所带来的成本问题,同时防护设备与负载均衡设备可以较为高效的相互配合;减少了进行负载均衡时报文的拷贝量,避免影响设备性能。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明提供的分布式拒绝服务攻击防护与负载均衡一体化方法的流程图;

图2是图1中步骤S103的具体流程图;

图3是本发明提供的分布式拒绝服务攻击防护与负载均衡一体化系统10的结构图;

图4是图3中分布式拒绝服务防护模块100的具体结构图;

图5是图3中内核线程模块200的具体结构图;

图6是图4中传输控制协议防护子模块102的具体结构图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。

如图1所示本发明提供一种分布式拒绝服务攻击(Distributed Denial of Service,DDoS)防护与负载均衡一体化方法的实施方式,包括以下步骤:S101,判断接收到的报文的类型,根据报文的类型将报文传输给与报文的类型对应的防护模块进行检测,得到攻击报文和正常报文;S102,与该报文的类型对应的防护模块将攻击报文进行过滤或将正常报文发送给内核线程模块;S103,内核线程模块根据报文的类型修改报文并发送。

网络节点为了避免受到攻击和提高网络性能,需要对收到的报文进行分布式拒绝服务攻击检测防护与负载均衡处理,一般情况下需要在两个硬件设备中分别进行。本发明将分布式拒绝服务攻击的检测防护与负载均衡集成到同一台网络节点设备中(如服务器),当网络节点(服务器)收到来自于客户端或其他服务器发来的请求报文后,首先对报文进行解码,根据解码结果判断报文的类型是传输控制协议(Transmission Control Protocol,TCP)报文、用户数据报协议(User Datagram Protocol,UDP)报文或者互联网控制报文协议(Internet Control Message Protocol,ICMP)报文。并对传输控制协议报文进一步判断是否属于握手报文。服务器在接收报文的过程中采用UIO(Userspace I/O)机制,可以高速接收和发送报文,将报文直接收取至应用程序,在应用程序内完成处理。

根据上述判断结果,将报文按照类型交给对应的防护模块,对应的防护模块根据报文特征、协议特征和报文统计分别进行检测和防护处理:

对于传输控制协议报文,对报文的传输速率进行统计,当传输速率超过阈值时认为有攻击发生,根据传输控制协议报文特性,进行SYN COOKIE验证、连接表查找或HTTP行为验证等方式对攻击报文进行过滤。

对于用户数据报协议报文,对源网络协议地址(Internet Protocol,IP)和目的网络协议地址的用户数据报协议报文的传输速率和带宽进行统计,当传输速率或带宽超过阈值时,丢弃用户数据报协议报文。

对于互联网控制报文协议报文,对目的网络协议地址的互联网控制报文协议报文的带宽进行统计,当带宽超过阈值时,丢弃互联网控制报文协议报文。

在本实施方式中对传输控制协议报文的检测和防护具体还包括:SYN FLOOD检测防护,对各目的网络协议地址的SYN报文进行统计,当超过阈值时,开启防护,采用SYN COOKIE的方式进行验证,对攻击报文回应带有COOKIE的SYN/ACK报文,并对后续ACK报文中的信息进行COOKIE验证;ACK FLOOD检测防护,根据连接表进行防护,对于合法的握手ACK报文,传入内核创建Linux虚拟服务器(Linux Virtual Server,LVS)连接,对于非法的ACK报文,则直接丢弃;HTTP FLOOD检测防护,对超文本传输协议(Hyper Text Transfer Protocol,HTTP)请求报文进行统计,当超过设定的阈值时,开启防护,向发起请求的网络协议地址发送特定的超文本传输协议响应报文,如302重定向(302Redirect)等,并在响应报文的内容中加入一定的可验证的字段,然后该网络协议地址后续发来的报文验证该字段。正常客户端在收到该请求后会跟随该响应,并且在新的请求报文中加入该响应中的验证字段,而攻击端则不会具有该行为。

通过上述方法,对应的防护模块检测完成后过滤掉攻击报文,将正常报文通过共享内存机制在服务器内部传输给内核线程模块。

内核线程模块通过共享内存方式接收到正常报文,根据报文的类型,查找并修改正常报文的目的地址,然后封装正常报文进行发送。在本发明中的负载均衡处理主要针对传输控制协议报文,其他用户数据报协议报文或互联网控制报文协议报文的负载均衡处理采用一般常规的处理方式。

如图2所示是上述实施方式中步骤S103的具体步骤,如前所述,本发明的负载均衡处理主要针对传输控制协议类型的报文,对于用户数据报协议报文或者互联网控制报文协议报文,本发明采用一般常用的方法进行处理,本文在此不再赘述:

步骤S1031,对于传输控制协议类型的报文,判断是否为握手报文。如果是握手报文,则进行步骤S1032,如果不是握手报文,则进行步骤S1033。

经过分布式拒绝服务攻击检测防护处理后得到的正常报文通过共享内存机制传递给Linux虚拟服务器,Linux虚拟服务器根据在进行分布式拒绝服务攻击检测防护处理时得到的报文类型信息,对报文进行不同的负载均衡处理。

步骤S1032,调用Linux虚拟服务器的接口创建连接,并根据连接表中下一跳的物理地址信息修改报文,再将报文封装后放入发送队列等待发送。

对于传输控制协议类型的握手报文,服务器直接调用Linux虚拟服务器的接口创建连接,并根据Linux虚拟服务器的连接表中经过负载均衡逻辑的报文的下一跳物理地址信息,修改握手报文的目的物理地址,然后将握手报文封装后放入发送队列中等待发送。

步骤S1033,查找Linux虚拟服务器的连接表,判断连接表是否有该报文对应的连接。如果连接表含有该报文对应的连接,则进行步骤S1034,如果连接表不含有该报文对应的连接,则进行步骤S1035。

对于传输控制协议类型的非握手报文,服务器查找Linux虚拟服务器的连接表,判断报文的目的物理地址信息在连接表中是否已有下一跳的连接信息,如果报文的目的物理地址信息在连接表中已有下一跳的连接信息,则认为连接表包含该报文对应的连接,进行步骤S1034;如果报文的目的物理地址信息在连接表中没有下一跳的连接信息,则认为连接表不含该报文对应的连接,进行步骤S1035。

步骤S1034,根据连接表中的信息查找到下一跳的物理地址,修改并封装报文,放入发送队列等待发送。

对于连接表中含有对应连接的传输控制类型的非握手报文,服务器根据步骤S1033在Linux虚拟服务器的连接表中查到的该报文的目的物理地址下一跳的物理地址信息,修改报文的目的物理地址信息,然后封装报文,将封装好的报文放入发送队列等待发送。

步骤S1035,判断该报文是否为结束连接报文。如果是结束连接报文,则进行步骤S1036,如果不是结束连接报文,则进行步骤S1037。

步骤S1036,将报文拷贝并送入协议栈,进行Linux虚拟服务器的处理流程,完成连接状态更新。

对于连接表中不含对应连接的传输控制类型的非握手报文,当报文是结束连接报文时,将报文复制并发送到协议栈,按照Linux虚拟服务器的正常处理流程,完成报文中下一跳目的物理地址的更新。

步骤S1037,丢弃报文。

图3所示是本发明提供的一种分布式拒绝服务攻击防护与负载均衡一体化的系统10,包括:分布式拒绝服务防护模块100和内核线程模块200。

分布式拒绝服务防护模块100用于判断接收到的报文的类型,根据报文的类型将报文传输给与所述报文的类型对应的防护子模块进行检测,得到攻击报文和正常报文,与该报文的类型对应的防护子模块将攻击报文进行过滤或将正常报文发送给内核线程模块;内核线程模块200用于根据报文的类型修改报文并发送。

服务器利用UIO机制,实现报文的高速接收和发送,当服务器接收到报文后,将报文转发给分布式拒绝服务防护模块100进行检测和防护处理。分布式拒绝服务防护模块100,利用自身的检测模型对报文进行报文特征、协议特性、报文统计等流程检测,发现有攻击之后,开启防护算法,对攻击流量进行过滤和验证;对于判定为正常流量的报文,打标记后服务器通过内存映射建立高速的报文传递通道(即共享内存方式),将需要转发的正常报文快速转往内核线程模块200进行负载均衡处理。内核线程模块200收到打标记后的正常报文,根据报文类型,利用封装的Linux虚拟服务器接口,进行Linux虚拟服务器逻辑处理,查找出报文的目的服务器信息,并对报文进行修改,最后再由服务器发送出去。

具体的,如图4所示,分布式拒绝服务防护模块100具体包括:报文类型判断子模块101、传输控制协议防护子模块102、用户数据报协议防护子模块103和互联网控制报文协议防护子模块104。

报文类型判断模块101用于判断报文类型;传输控制协议防护子模块102用于对传输控制协议报文的传输速率进行统计,当传输控制协议报文的传输速率超过阈值时,对超过阈值的传输控制协议报文进行SYN COOKIE验证、连接表查找或HTTP行为验证,过滤攻击报文;用户数据报协议防护子模块103用于对源网络协议地址和目的网络协议地址的用户数据报协议报文的传输速率和带宽进行统计,当用户数据报协议报文的传输速率或带宽超过阈值时,丢弃用户数据报协议报文;互联网控制报文协议防护子模块104用于对目的网络协议地址的互联网控制报文协议报文的带宽进行统计,当互联网控制报文协议报文的带宽超过阈值时,丢弃互联网控制报文协议报文。

服务器收到报文后,先转发到报文类型判断模块101,报文类型判断模块101对收到的报文进行解码,根据解码结果判断报文类型,然后根据报文类型将报文发给对应的传输控制协议防护子模块102、用户数据报协议防护子模块103或互联网控制报文协议防护子模块104。各防护子模块利用自身的检测模型对报文进行报文特征、协议特性、报文统计等流程检测,发现有攻击之后,开启防护算法,对攻击流量进行过滤和验证;对于正常流量的报文,打标记后通过共享内存的方式转发给内核线程模块200进行负载均衡处理。

除上述几种防护子模块外,还可以有针对其他报文类型的相应防护模块,本发明在此不再赘述。

具体的,如图5所示,内核线程模块200具体包括:内核收发包模块201和负载均衡模块202。

内核收发包模块201,用于通过共享内存方式收发正常报文;负载均衡模块202,用于根据正常报文的类型,查找并修改正常报文的目的地址,然后封装正常报文后进行发送。

经过分布式拒绝服务防护模块100处理后得到的正常报文通过共享内存机制传递给内核线程模块200的内核收发包模块201,内核收发包模块201再将正常报文发送给负载均衡模块202进行负载均衡处理。

在本发明中,负载均衡模块202主要针对传输控制协议类型的报文,对于用户数据报协议报文或者互联网控制报文协议报文,本发明采用一般常用的方法进行处理,本文在此不再赘述。

负载均衡模块202收到经过报文类型判断模块101解码并判断类型的报文后,对于传输控制协议类型的握手报文,直接调用Linux虚拟服务器的接口创建连接,并根据Linux虚拟服务器的连接表中经过负载均衡逻辑的报文的下一跳物理地址信息,修改握手报文的目的物理地址,然后将握手报文封装后放入发送队列中等待发送。

对于传输控制协议类型的非握手报文,负载均衡模块202查找Linux虚拟服务器的连接表,判断报文的目的物理地址信息在连接表中是否已有下一跳的连接信息,如果报文的目的物理地址信息在连接表中已有下一跳的连接信息,则认为连接表包含该报文对应的连接,按照Linux虚拟服务器连接表中查到的该报文的目的物理地址下一跳的物理地址信息修改报文的目的物理地址信息,然后封装报文,将封装好的报文放入发送队列等待发送。

如果报文的目的物理地址信息在连接表中没有下一跳的连接信息,则认为连接表不含该报文对应的连接,继续判断报文是否为结束连接报文,当报文是结束连接报文时,将报文复制并发送到协议栈,按照Linux虚拟服务器的正常处理流程,完成报文中下一跳目的物理地址的更新。当报文不是结束连接报文,直接丢弃该报文。

具体的,如图6所示,传输控制协议防护子模块102具体包括:SYN FLOOD检测防护单元1021、ACK FLOOD检测防护单元1022和HTTP FLOOD检测防护单元1023。

SYN FLOOD检测防护单元1021用于对各目的网络协议地址的SYN报文进行统计,当超过阈值时,开启防护,采用SYN COOKIE的方式进行验证,对攻击报文回应带有COOKIE的SYN/ACK报文,并对后续ACK报文进行COOKIE验证。

ACK FLOOD检测防护单元1022用于根据连接表进行防护,对于合法的握手ACK报文,传入内核创建Linux虚拟服务器连接,对于非法的ACK报文,则直接丢弃。

HTTP FLOOD检测防护单元1023用于对超文本传输协议请求报文进行统计,当超过设定的阈值时,开启防护,向发起请求的网络协议地址发送特定的超文本传输协议响应报文,如302Redirect等,并在响应报文的内容中加入一定的可验证的字段,然后该网络协议地址后续发来的报文验证该字段。正常客户端在收到该请求后会跟随该响应,并且在新的请求报文中加入该响应中的验证字段,而攻击端则不会具有该行为。

传输控制协议防护子模块102还可以有其他对的检测和护单元,本发明不在此一一例举。

本发明将分布式拒绝服务防护功能与负载均衡功能集成到同一台设备上,解决了单独防护设备所带来的成本问题,同时防护设备与负载均衡设备可以较为高效的相互配合;减少了进行负载均衡时报文的拷贝量,避免影响设备性能。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

以上所描述的系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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