CN117081990B - 一种mpls流量代理方法、系统、设备及存储介质 - Google Patents
一种mpls流量代理方法、系统、设备及存储介质 Download PDFInfo
- Publication number
- CN117081990B CN117081990B CN202311331665.6A CN202311331665A CN117081990B CN 117081990 B CN117081990 B CN 117081990B CN 202311331665 A CN202311331665 A CN 202311331665A CN 117081990 B CN117081990 B CN 117081990B
- Authority
- CN
- China
- Prior art keywords
- mpls
- label
- traffic
- syn
- user
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 69
- 238000001514 detection method Methods 0.000 claims description 23
- 238000012545 processing Methods 0.000 claims description 21
- 230000004044 response Effects 0.000 claims description 21
- 238000013507 mapping Methods 0.000 claims description 14
- 238000004590 computer program Methods 0.000 claims description 5
- 238000012790 confirmation Methods 0.000 claims description 3
- 238000005538 encapsulation Methods 0.000 claims description 3
- 238000004321 preservation Methods 0.000 claims description 3
- 230000008569 process Effects 0.000 description 13
- 238000004891 communication Methods 0.000 description 8
- 238000010586 diagram Methods 0.000 description 8
- 230000003993 interaction Effects 0.000 description 5
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 230000008859 change Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000011144 upstream manufacturing Methods 0.000 description 2
- 230000032683 aging Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/50—Routing or path finding of packets in data switching networks using label swapping, e.g. multi-protocol label switch [MPLS]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/02—Network architectures or network communication protocols for network security for separating internal from external traffic, e.g. firewalls
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/02—Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/40—Network security protocols
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L2212/00—Encapsulation of packets
Abstract
本发明实施例提供了一种MPLS流量代理方法、系统、设备及存储介质,将WAF以透明代理模式部署于第一MPLS路由网络和第二MPLS路由网络之间,无论在从服务端接收到第一入向MPLS流量之后,还是从服务端接收到第二入向MPLS流量之后,均进行解析;将得到的与服务端对应的第一目的IP以及第一MPLS标签、与用户端对应的第二目的IP以及第二MPLS标签,以标签转发项保存至MPLS标签转发表;在第一入向MPLS流量为SYN报文数据包,并且当前MPLS标签转发表中不存在与第一源IP对应的第二MPLS标签时,直接将SYN报文数据包透传至服务端。本申请在WAF中实现了MPLS标签的自学习。
Description
技术领域
本发明实施例涉及网络安全技术领域,具体涉及一种MPLS流量代理方法、系统、设备及存储介质。
背景技术
Web应用防护墙(Web Application Firewall,缩写为WAF)是为Web应用提供安全防护的一种产品,为了满足不同用户网络拓扑的需求,WAF主要支持以下几种部署模式:
反向代理模式:WAF需要加入到用户的三层网络中,它是所有HTTP请求的入口。WAF收到HTTP请求后,将请求转发给上游真实的业务服务器。该部署模式需要对现有三层网络进行改动,让HTTP请求能够首先到达WAF。
透明代理模式:WAF仍然代理了用户端和服务器之间的HTTP会话,但是对于用户端和服务器而言,WAF都是透明的,不需要对现有网络进行改动。
流量镜像模式:WAF通过旁路部署在网络中,用于对HTTP流量进项旁路检测。
不管采用上述哪种部署模式,WAF通常只能对IP流量进行处理。
多协议标签交换(Multi-Protocol Label Switching,缩写为MPLS)是一种IP骨干网技术,它位于TCP/IP协议栈中的数据链路层和网络层之间。MPLS协议以标签交换代替IP转发,用于提高报文的转发速度。由于MPLS支持多层标签、面向连接等特性,使得其在VPN(Virtual Private Network,虚拟专用网络)、流量工程等领域也得到广泛应用。
MPLS协议作为一种工作在链路层和网络层之间的协议,通常只有网络转发设备需要处理该协议。WAF作为一种HTTP流量防护设备,主要工作在应用层,一般不需要处理MPLS流量,也不感知MPLS协议的存在。但是用户也的确存在如下部署场景:在两个MPLS路由器之间以透明代理模式部署WAF。此时既可以满足用户的HTTP流量检测需求,又无需对现有MPLS网络进行任何改造,极大地减轻了用户的WAF部署负担。但是,WAF作为一种工作在应用层的安全设备,不参与MPLS标签交换过程,难以实现对MPLS流量进行代理及检测,对于上述部署需求也就束手无策。
发明内容
为此,本发明实施例提供一种MPLS流量代理方法、系统、设备及存储介质,以解决在两个MPLS路由器之间以透明代理模式部署的WAF难以实现对MPLS流量进行代理及检测的技术问题。
为了实现上述目的,本发明实施例提供如下技术方案:
根据本发明实施例的第一方面,本申请实施例提供了一种MPLS流量代理方法,所述方法应用于Web应用防护墙,所述Web应用防护墙以透明代理模式布置于第一MPLS路由网络和第二MPLS路由网络之间,实现对MPLS流量进行检测及代理,所述方法包括:
经由所述第一MPLS路由网络从所述用户端接收第一入向MPLS流量;以及经由所述第二MPLS路由网络从所述服务端接收第二入向MPLS流量;
对所述第一入向MPLS流量进行解析,得到第一MPLS报文中的与服务端对应的第一目的IP以及第一MPLS标签、与用户端对应的第一源IP;以及对所述第二入向MPLS流量进行解析,得到第二MPLS报文中的与用户端对应的第二目的IP以及第二MPLS标签;
将所述第一目的IP、所述第一MPLS标签以及两者之间的第一映射关系作为标签转发项保存至MPLS标签转发表;以及将所述第二目的IP、所述第二MPLS标签以及两者之间的第二映射关系作为标签转发项保存至所述MPLS标签转发表;
判断所述第一入向MPLS流量是否为SYN报文数据包;
如果所述第一入向MPLS流量为SYN报文数据包,则判断当前MPLS标签转发表中是否存在与所述第一源IP对应的第二MPLS标签;
如果当前MPLS标签转发表中不存在与所述第一源IP对应的第二MPLS标签,则直接将所述SYN报文数据包作为第一服务端出向MPLS流量,经由所述第二MPLS路由网络透传至服务端。
进一步地,所述方法还包括:
如果当前MPLS标签转发表中存在与所述第一源IP对应的第二MPLS标签,则将所述SYN报文数据包的MPLS头部移除,得到第一用户端入向IP流量;
将所述第一用户端入向IP流量经第一Linux协议栈上送至用户态程序处理,确定为一个有效的TCP握手报文,生成SYN/ACK返回报文,作为第一用户端出向IP流量经第一Linux协议栈传出;
利用所述第二MPLS标签构造第一用户端出向MPLS头部,并将所述第一用户端出向MPLS头部添加至所述第一用户端出向IP流量,生成第一用户端出向MPLS流量;
经由所述第一MPLS路由网络将所述第一用户端出向MPLS流量发送至所述用户端;
如果所述第一入向MPLS流量不为SYN报文数据包,则判断所述第一入向MPLS流量是否为SYN/ACK返回报文;
如果所述第一入向MPLS流量为SYN/ACK返回报文,则将所述SYN/ACK返回报文的MPLS头部移除,得到第二用户端入向IP流量;
将所述第二用户端入向IP流量经第一Linux协议栈上送至用户态程序,确定与所述用户端之间TCP握手成功,与所述用户端之间建立TCP连接。
进一步地,所述方法还包括:
如果所述第一入向MPLS流量不为SYN/ACK返回报文,则判断所述第一入向MPLS流量是否为HTTP访问请求;
如果所述第一入向MPLS流量不为HTTP访问请求,则对所述第一入向MPLS流量拦截;
如果所述第一入向MPLS流量为HTTP访问请求,则判断与所述用户端之间是否建立TCP连接;
如果与所述用户端之间未建立TCP连接,则返回TCP连接建立通知;
如果与所述用户端之间已建立TCP连接,则将所述HTTP访问请求的MPLS头部移除,得到第三用户端入向IP流量;
将所述第三用户端入向IP流量经第一Linux协议栈上送至用户态程序处理,得到第二服务端出向IP流量;
判断与所述服务端之间是否建立TCP连接;
如果与所述服务端之间未建立TCP连接,则生成SYN报文数据包,作为第三服务端出向IP流量经由第二Linux协议栈传出;
从当前MPLS标签转发表中查询与所述服务端对应的第一MPLS标签;
利用所述第一MPLS标签构造第三服务端出向MPLS头部,并将所述第三服务端出向MPLS头部添加至所述第三服务端出向IP流量,生成第三服务端出向MPLS流量;
经由所述第二MPLS路由网络将所述第三服务端出向MPLS流量发送至所述服务端;
如果与所述服务端之间已建立TCP连接,则从当前MPLS标签转发表中查询与所述服务端对应的第一MPLS标签;
利用所述第一MPLS标签构造第二服务端出向MPLS头部,并将所述第二服务端出向MPLS头部添加至所述第二服务端出向IP流量,生成第二服务端出向MPLS流量;
经由所述第二MPLS路由网络将所述第二服务端出向MPLS流量发送至所述服务端。
进一步地,所述方法还包括:
判断所述第二入向MPLS流量是否为SYN/ACK返回报文;
如果所述第二入向MPLS流量为SYN/ACK返回报文,则判断针对所述SYN/ACK返回报文是否已主动发起TCP连接请求;
如果针对所述SYN/ACK返回报文已主动发起TCP连接请求,则向对应服务端回复SYN/ACK返回报文,与所述服务端之间建立TCP连接;
如果针对所述SYN/ACK返回报文未主动发起TCP连接请求,则将所述SYN/ACK返回报文的MPLS头部移除,得到第一服务端入向IP流量;
将所述第一服务端入向IP流量经第二Linux协议栈上送至用户态程序处理,确定为一个无效的TCP握手报文。
进一步地,所述方法还包括:
如果所述第二入向MPLS流量不为SYN/ACK返回报文,则判断所述第二入向MPLS流量是否为HTTP响应;
如果所述第二入向MPLS流量不为HTTP响应,则对所述第二入向MPLS流量拦截;
如果所述第二入向MPLS流量为HTTP响应,则将所述HTTP响应的MPLS头部移除,得到第三服务端入向IP流量;
将所述第三服务端入向IP流量经第二Linux协议栈上送至用户态程序处理,生成第二用户端出向IP流量并经第一Linux协议栈传出;
从当前MPLS标签转发表中查询与所述用户端对应的第二MPLS标签;
利用所述第二MPLS标签构造第二用户端出向MPLS头部,并将所述第二用户端出向MPLS头部添加至所述第二用户端出向IP流量,生成第二用户端出向MPLS流量;
经由所述第一MPLS路由网络将所述第二用户端出向MPLS流量发送至所述用户端。
进一步地,所述方法还包括:
根据预先配置的时间间隔,逐一利用当前MPLS标签转发表中各个标签转发项对应的第一MPLS标签/第二MPLS标签生成MPLS封装的第一TCP syn报文数据包/第二TCP syn报文数据包;
将所述第一TCP syn报文数据包/所述第二TCP syn报文数据包发送至第一目的IP对应的服务端/第二目的IP对应的用户端;
判断是否收到对应服务端回复的第一TCP syn/ack报文/对应用户端回复的第二TCP syn/ack报文;
如果收到对应服务端回复的第一TCP syn/ack报文/对应用户端回复的第二TCPsyn/ack报文,则当前MPLS标签转发表中所述第一MPLS标签/所述第二MPLS标签有效;
如果未收到对应服务端回复的第一TCP syn/ack报文/对应用户端回复的第二TCPsyn/ack报文,则将所述第一MPLS标签/所述第二MPLS标签对应的失败值增加1;
判断所述第一MPLS标签/所述第二MPLS标签对应的失败值是否达到预设阈值;
如果所述第一MPLS标签/所述第二MPLS标签对应的失败值未达到预设阈值,则当前MPLS标签转发表中所述第一MPLS标签/所述第二MPLS标签有效;
如果所述第一MPLS标签/所述第二MPLS标签对应的失败值达到预设阈值,则当前MPLS标签转发表中所述第一MPLS标签/所述第二MPLS标签无效;
将确认无效的所述第一MPLS标签/所述第二MPLS标签对应的作为标签转发项从所述MPLS标签转发表中删除。
进一步地,所述方法还包括:
将所述MPLS标签转发表中每个标签转发表项关联了一个last_check_time字段,用于记录该标签转发表项的最近一次保存时间;
每次使用所述MPLS标签转发表中某个标签转发表项时,检查该标签转发表项对应的last_check_time字段;
判断当前时间与该标签转发表项的最近一次保存时间之间的时间差是否超过预设时间阈值;
如果所述时间差未超过预设时间阈值,则该标签转发表项有效;
如果所述时间差超过预设时间阈值,则该标签转发表项无效;
将确认无效的标签转发项从所述MPLS标签转发表中删除。
根据本发明实施例的第二方面,本申请实施例提供了一种MPLS流量代理系统,所述系统应用于Web应用防护墙,所述Web应用防护墙以透明代理模式布置于第一MPLS路由网络和第二MPLS路由网络之间,实现对MPLS流量进行检测及代理,所述系统包括:
第一接收模块,用于经由所述第一MPLS路由网络从所述用户端接收第一入向MPLS流量;
第二接收模块,用于经由所述第二MPLS路由网络从所述服务端接收第二入向MPLS流量;
解析模块,用于对所述第一入向MPLS流量进行解析,得到第一MPLS报文中的与服务端对应的第一目的IP以及第一MPLS标签、与用户端对应的第一源IP;以及对所述第二入向MPLS流量进行解析,得到第二MPLS报文中的与用户端对应的第二目的IP以及第二MPLS标签;
保存模块,用于将所述第一目的IP、所述第一MPLS标签以及两者之间的第一映射关系保存至MPLS标签转发表;以及将所述第二目的IP、所述第二MPLS标签以及两者之间的第二映射关系保存至所述MPLS标签转发表;
检测模块,用于判断所述第一入向MPLS流量是否为SYN报文数据包;如果所述第一入向MPLS流量为SYN报文数据包,则判断当前MPLS标签转发表中是否存在与所述第一源IP对应的第二MPLS标签;
发送模块,用于如果当前MPLS标签转发表中不存在与所述第一源IP对应的第二MPLS标签,则直接将所述SYN报文数据包作为第一服务端出向MPLS流量,经由所述第二MPLS路由网络透传至服务端。
根据本发明实施例的第三方面,提供了一种MPLS流量代理系统,所述设备包括:处理器和存储器;
所述存储器用于存储一个或多个程序指令;
所述处理器,用于运行一个或多个程序指令,用以执行如上任一项所述的一种MPLS流量代理方法的步骤。
根据本发明实施例的第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上任一项所述的一种MPLS流量代理方法的步骤。
与现有技术相比,本申请实施例提供的一种MPLS流量代理方法、系统、设备及存储介质,将WAF以透明代理模式部署于第一MPLS路由网络和第二MPLS路由网络之间,无论在从服务端接收到第一入向MPLS流量之后,还是从服务端接收到第二入向MPLS流量之后,均进行解析;将得到的与服务端对应的第一目的IP以及第一MPLS标签、与用户端对应的第二目的IP以及第二MPLS标签,以标签转发项保存至MPLS标签转发表;在第一入向MPLS流量为SYN报文数据包,并且当前MPLS标签转发表中不存在与第一源IP对应的第二MPLS标签时,直接将SYN报文数据包透传至服务端。这样,本申请实施例在WAF中实现了MPLS标签的自学习,从而支持WAF对MPLS封装的HTTP流量进行代理,而且用户端的MPLS网络不需要做任何改动,完全不感知WAF的存在。
附图说明
为了更清楚地说明本发明的实施方式或现有技术中的技术方案,下面将对实施方式或现有技术描述中所需要使用的附图作简单地介绍。显而易见地,下面描述中的附图仅仅是示例性的,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图引伸获得其它的实施附图。
本说明书所绘示的结构、比例、大小等,均仅用以配合说明书所揭示的内容,以供熟悉此技术的人士了解与阅读,并非用以限定本发明可实施的限定条件,故不具技术上的实质意义,任何结构的修饰、比例关系的改变或大小的调整,在不影响本发明所能产生的功效及所能达成的目的下,均应仍落在本发明所揭示的技术内容得能涵盖的范围内。
图1为用户端的IP骨干网采用MPLS协议时传统WAF的部署示意图;
图2为本发明实施例提供的直接将WAF部署在MPLS网络内部的示意图;
图3为本发明实施例提供的一种MPLS流量代理系统的逻辑结构示意图;
图4为本发明实施例提供的MPLS流量的MPLS头部的字段示意图;
图5为本发明实施例提供的在MPLS流量转发路径建立中各个转发设备根据报文里MPLS头部中的标签值进行转发的示意图;
图6为本发明实施例提供的在MPLS流量转发中各个转发设备在MPLS头部对标签值进行设置的示意图;
图7为Web应用防护墙运行在透明代理模式下通过MPLS标签被动学习的用户端和服务端的通信交互流程示意图;
图8为Web应用防护墙运行在透明代理模式下通过MPLS标签主动学习的用户端和服务端的通信交互流程示意图;
图9为本发明实施例提供的一种MPLS流量代理方法中从用户端接收第一入向MPLS流量时的流程示意图;
图10为本发明实施例提供的一种MPLS流量代理方法中第一入向MPLS流量不为SYN报文数据包时的流程示意图;
图11为本发明实施例提供的一种MPLS流量代理方法中从所述服务端接收第二入向MPLS流量时的流程示意图;
图12为本发明实施例提供的一种MPLS流量代理方法中对MPLS标签转发表中的各个第一MPLS标签进行主动验证的流程示意图;
图13为本发明实施例提供的一种MPLS流量代理方法中对MPLS标签转发表中的各个第二MPLS标签进行主动验证的流程示意图;
图14为本发明实施例提供的一种MPLS流量代理方法中对MPLS标签转发表中的各个标签进行老化验证的流程示意图。
具体实施方式
以下由特定的具体实施例说明本发明的实施方式,熟悉此技术的人士可由本说明书所揭露的内容轻易地了解本发明的其他优点及功效,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
当用户的IP骨干网采用MPLS协议时,由于传统WAF不支持对MPLS流量的透明代理,此时传统WAF只能部署在MPLS网络边缘之后,处理非MPLS流量。参考图1,展示了上述WAF部署在MPLS网络边缘之后的一个典型应用场景。具体地,上述应用场景中具体包括:用户端1、服务端2、Web应用防护墙3、第一MPLS路由网络4、第二MPLS路由网络5。第一MPLS路由网络4包括第一MPLS边缘路由器41和第一MPLS路由器42,第二MPLS路由网络5包括第二MPLS边缘路由器51和第二MPLS路由器52。用户端1通过用户端IP网络11对外实现IP流量交互,经由第一MPLS边缘路由器41和第一MPLS路由器42将与用户端1相关的IP流量转化为MPLS流量,服务端2通过服务端IP网络21对外实现IP流量交互,经由Web应用防护墙3、第二MPLS边缘路由器51和第二MPLS路由器52将与服务端2相关的IP流量转化为MPLS流量,第一MPLS路由网络4和第二MPLS路由网络5之间进行MPLS流量的交互,此时Web应用防护墙3部署在服务端2与第二MPLS边缘路由器51之间。
本申请的目的在于:提供了一套完整的技术方案,用于实现在透明代理模式下,在两个MPLS路由器之间对MPLS封装的HTTP流量进行代理及检测,满足了用户的灵活组网需求,减轻了用户在MPLS网络中部署WAF的负担。
为了解决上述技术问题,如图2所示,本申请实施例提供了一种MPLS流量代理系统,应用于Web应用防护墙3,Web应用防护墙3以透明代理模式布置于第一MPLS路由网络4和第二MPLS路由网络5之间,实现对MPLS流量进行检测及代理。
具体地,本申请实施例公开的上述WAF部署应用场景中具体包括:用户端1、服务端2、Web应用防护墙3、第一MPLS路由网络4、第二MPLS路由网络5。第一MPLS路由网络4包括第一MPLS边缘路由器41和第一MPLS路由器42,第二MPLS路由网络5包括第二MPLS边缘路由器51和第二MPLS路由器52。用户端1通过用户端IP网络11对外实现IP流量交互,经由第一MPLS边缘路由器41和第一MPLS路由器42将与用户端1相关的IP流量转化为MPLS流量,服务端2通过服务端IP网络21对外实现IP流量交互,经由第二MPLS边缘路由器51和第二MPLS路由器52将与服务端2相关的IP流量转化为MPLS流量,第一MPLS路由网络4和第二MPLS路由网络5之间经由Web应用防护墙3进行MPLS流量的交互,此时Web应用防护墙3部署在第一MPLS路由器42和第二MPLS路由器52之间。
如图3所示,本申请实施例提供的一种MPLS流量代理系统具体包括:第一接收模块31、第二接收模块32、解析模块33、保存模块34、检测模块35、发送模块36。
具体地,第一接收模块31用于经由第一MPLS路由网络4从用户端1接收第一入向MPLS流量。第二接收模块32用于经由第二MPLS路由网络5从服务端2接收第二入向MPLS流量。解析模块33用于对第一入向MPLS流量进行解析,得到第一MPLS报文中的与服务端2对应的第一目的IP以及第一MPLS标签、与用户端1对应的第一源IP;以及对第二入向MPLS流量进行解析,得到第二MPLS报文中的与用户端1对应的第二目的IP以及第二MPLS标签。保存模块34,用于将第一目的IP、第一MPLS标签以及两者之间的第一映射关系保存至MPLS标签转发表;以及将第二目的IP、第二MPLS标签以及两者之间的第二映射关系保存至MPLS标签转发表。检测模块35用于判断第一入向MPLS流量是否为SYN报文数据包;如果第一入向MPLS流量为SYN报文数据包,则判断当前MPLS标签转发表中是否存在与第一源IP对应的第二MPLS标签。发送模块36用于如果当前MPLS标签转发表中不存在与第一源IP对应的第二MPLS标签,则直接将SYN报文数据包作为第一服务端出向MPLS流量,经由第二MPLS路由网络5透传至服务端2。
与现有技术相比,本申请实施例提供的一种MPLS流量代理系统,将WAF以透明代理模式部署于第一MPLS路由网络和第二MPLS路由网络之间,无论在从服务端接收到第一入向MPLS流量之后,还是从服务端接收到第二入向MPLS流量之后,均进行解析;将得到的与服务端对应的第一目的IP以及第一MPLS标签、与用户端对应的第二目的IP以及第二MPLS标签,以标签转发项保存至MPLS标签转发表;在第一入向MPLS流量为SYN报文数据包,并且当前MPLS标签转发表中不存在与第一源IP对应的第二MPLS标签时,直接将SYN报文数据包透传至服务端。这样,本申请实施例在WAF中实现了MPLS标签的自学习,从而支持WAF对MPLS封装的HTTP流量进行代理,而且用户端的MPLS网络不需要做任何改动,完全不感知WAF的存在。
与上述公开的一种MPLS流量代理系统相对应,本发明实施例还公开了一种MPLS流量代理方法。以下结合上述描述的一种MPLS流量代理系统详细介绍本发明实施例中公开的一种MPLS流量代理方法。
如图2所示,本申请实施例提供的一种MPLS流量代理方法,应用于Web应用防护墙3,Web应用防护墙3以透明代理模式布置于第一MPLS路由网络4和第二MPLS路由网络5之间,实现对MPLS流量进行检测及代理。
本发明基于Linux最新的XDP/ebpf技术,同时结合一种MPLS标签自学习方案,可以实现在透明代理模式下对MPLS封装的HTTP流量进行代理并检测,满足用户的上述部署需求。
具体地,首先以对HTTP请求的处理为例,用户端1发送HTTP请求,经过第一MPLS路由网络4后,将HTTP流量将以MPLS协议进行封装。Web应用防护墙3接收收到MPLS流量后,首先移除其链路层头部和网络层头部之间的MPLS头部,这样流量就成为了标准的IP流量。之后Linux网络协议栈、用户态程序处理的都是标准IP流量。在Web应用防护墙3完成该HTTP请求检测之后,需要将该HTTP请求代理到真实的业务服务端。即需要重新生成一个HTTP代理请求,并发送给业务服务端。发出的HTTP请求在真正离开Web应用防护墙3网络接口之前,会重新添加上MPLS头部。这样才能保证该HTTP请求能够继续在第二MPLS路由网络5中正确转发,并最终达到业务服务端。由于Web应用防护墙3发出的代理HTTP请求仍然是标准的MPLS流量,且MPLS头部的标签值和原始HTTP请求的标签值是相同的,因此该代理HTTP请求能够最终到达业务服务端。
与对HTTP请求的处理类似,以下以对HTTP响应的处理为例,服务端2发送HTTP响应,经过第二MPLS路由网络5后,将HTTP流量将以MPLS协议进行封装。Web应用防护墙3接收收到MPLS流量后,首先移除其链路层头部和网络层头部之间的MPLS头部,这样流量就成为了标准的IP流量。之后Linux网络协议栈、用户态程序处理的都是标准IP流量。在Web应用防护墙3完成该HTTP请求检测之后,需要将该HTTP请求代理到真实的用户端1。即需要重新生成一个HTTP代理响应,并发送给用户端1。发出的HTTP响应在真正离开Web应用防护墙3网络接口之前,会重新添加上MPLS头部。这样才能保证该HTTP响应能够继续在第一MPLS路由网络4中正确转发,并最终达到用户端1。由于Web应用防护墙3发出的代理HTTP响应仍然是标准的MPLS流量,且MPLS头部的标签值和原始HTTP响应的标签值是相同的,因此该代理HTTP响应能够最终到达用户端1。
如上所述,在入向MPLS流量的处理流程中,最重要的步骤就是对MPLS报文中的MPLS头部进行剥除。这里将使用到Linux XDP技术。XDP(eXpress Data Path)是Linux内核提供的一种可编程包处理方式,它在Linux网络数据包处理流程中提供一个hook点,可以挂载ebpf程序,实现对数据包的额外处理。由于XDP挂载点是在网络数据包到达网卡驱动后,还未进入Linux网络协议栈之前被执行,因此其给应用程序提供了更灵活的包处理能力。
在本发明实施例中,会在网络接口上安装Linux XDP程序,以完成以下两个功能:(1)对流量中的MPLS头部进行移除;(2)完成MPLS标签学习过程,为后续的流量代理打下基础。
经过Linux XDP程序处理后,入向MPLS报文中的MPLS头部就被移除了,这样进入Linux网络协议栈的流量就和普通的IP流量没有区别,此时Linux网络协议栈就可以按照正常方式对该IP流量进行处理。
在Web应用防护墙3完成对HTTP请求的检测之后,需要将该HTTP请求代理到真实的业务服务端。此时Web应用防护墙3会重新发送一个HTTP请求,该HTTP请求与原始的HTTP请求内容是一致的,这也就要求Web应用防护墙3发出的HTTP请求也必须是MPLS流量,且MPLS头部中的标签值需要和原始HTTP请求中的MPLS标签值是一样的,这样才能保证该代理HTTP请求能够在MPLS网络中被正确转发到最终的业务服务端。
为了实现这一目标,将使用Linux tc技术在网络接口的发包流程中插入ebpf程序,该ebpf程序负责对出向的IP流量重新添加MPLS头部,这样这些流量能够在MPLS网络中被正确转发并到达最终的目标主机。
如上所述,描述了如何实现Web应用防护墙3对MPLS流量透明代理的方法,即对入向MPLS流量剥除MPLS头部,对出向的IP流量重新添加MPLS头部。以下将详细说明如何实现MPLS头部的移除/添加操作,才能保证经过Web应用防护墙3处理后的MPLS流量能够正确被MPLS网络转发并到达最终目的地。
在本发明实施例中,利用Web应用防护墙3对MPLS流量的代理过程中,MPLS流量会在数据链路层头部和网络层头部之间添加一个MPLS头部,参考图4,MPLS头部长度为4个字节,具体包括以下内容:Label、Exp、BoS、TTL,其中,Label为标签值;Exp为扩展字段;BoS为栈底标识,MPLS支持多层标签,该位设置为1时,表示当前标签为最底层标签;TTL为生存时间字段。
在MPLS网络中,所有转发设备是根据报文里MPLS头部中的标签值进行转发的。转发设备需要为报文提前分配好标签,建立MPLS转发路径,这样MPLS流量才能正确在MPLS网络中转发。标签的分发可以通过静态方式配置,也可以通过标签分发协议(例如LSP协议)动态分配。
参考图5,简要地展示了MPLS转发原理。首先各个MPLS转发设备会对目标IP分配对应的标签值,并将该标签值分发到自己的上游设备。参考图6,之后在对流量进行转发时,MPLS转发设备会在MPLS头部中设置对应的MPLS标签值。
由于透明代理模式要求Web应用防护墙3透明地部署在MPLS网络中,此时WAF设备并不是真正意义上的路由转发设备,也就无法通过静态配置标签或者实现标签分发协议的方式来参与MPLS流量的代理。这带来一个难题,当Web应用防护墙3需要对IP流量重新添加MPLS头部时,无法知道该IP所对应的转发标签。
本发明实施例通过一种MPLS标签自学习的方式在Web应用防护墙3中构造动态标签转发表,从而实现MPLS流量的代理。
如上所述,网络接口上安装的Linux XDP程序除了会将入向MPLS流量的MPLS头部移除,还会完成MPLS标签学习的过程。此时该Linux XDP程序会对MPLS报文进行解析,得到报文中的目的IP以及MPLS标签,并将目的IP与MPLS标签的映射关系保存到一个ebpf MAP中。这些映射关系就构成了MPLS标签转发表。
如下表表1所示,是上述MPLS标签转发表的一个简单示例:
表1:MPLS标签转发表
目的IP | MPLS标签 |
1.1.1.1 | 100 |
1.1.1.2 | 200 |
1.1.1.3 | 300 |
当需要对出向流量添加MPLS头部时,发包流程中的ebpf程序就可以根据目的IP查询MPLS标签转发表,得到该目的IP所对应的MPLS标签。然后使用该标签值构造MPLS头部,并将MPLS头部插入到到出向流量中,最终将IP流量重新封装为MPLS流量。
通过直接解析流经Web应用防护墙3的MPLS流量,可以构造出MPLS标签转发表,为MPLS流量代理打下基础。这一过程可以称为MPLS标签的被动学习过程。
仍然存在一个问题,当标签转发表中还没有某个目的IP对应的MPLS标签时,此时就无法向该目的IP发送MPLS流量。对于WAF代理模式,这个问题是真实存在的。因此仅仅依靠MPLS标签的被动学习是不足以完成整个HTTP会话代理流程的。
参考图7,当Web应用防护墙3运行在透明代理模式下,以下对通过MPLS标签被动学习用户端和服务端的HTTP通信步骤进行详细描述。
首先,用户端1和Web应用防护墙3建立TCP连接,之后用户端1在该TCP连接上发送HTTP请求。之后,Web应用防护墙3和服务端2建立TCP连接,Web应用防护墙3在该TCP连接上发送代理HTTP请求,并接收服务端2返回的HTTP响应,Web应用防护墙3将该HTTP响应返回给用户端1。
如上所述,初始状态下,Web应用防护墙3还没有处理任何MPLS流量,此时Web应用防护墙3中的标签转发表为空。用户端1和Web应用防护墙3建立TCP连接时,Web应用防护墙3首先收到用户端1的SYN包,该SYN包的目的IP为服务端2的IP,即1.1.1.2,假设其MPLS头部中的标签值为200。此时通过MPLS标签被动学习流程,将在MPLS标签转发表中添加一条“1.1.1.2->200”的转发表项。
Web应用防护墙3为了完成和用户端1的TCP连接建立,需要回复一个SYN/ACK报文,该报文的目的IP是用户端的IP,即1.1.1.1。Web应用防护墙3在发送该SYN/ACK报文时,需要查询目的IP 1.1.1.1对应的MPLS标签,但此时Web应用防护墙3的标签转发表中还没有该目的IP对应的标签,因此该SYN/ACK报文发送失败,TCP连接无法建立,HTTP通信失败。
因此,仅仅依靠MPLS标签的被动学习无法完成整个HTTP通信过程。而MPLS标签主动学习就是为了解决上述该问题的。
参考图8,当Web应用防护墙3运行在透明代理模式下,以下对通过MPLS标签主动学习用户端和服务端的HTTP通信步骤进行详细描述。
初始状态下,Web应用防护墙3还没有处理任何MPLS流量,此时Web应用防护墙3中的标签转发表为空。用户端1和Web应用防护墙3建立TCP连接时,Web应用防护墙3首先收到用户端1的SYN包,该SYN包的目的IP为服务端2的IP,即1.1.1.2,假设其MPLS头部中的标签值为200。此时通过MPLS标签被动学习流程,将在MPLS标签转发表中添加一条`1.1.1.2->200`的转发表项。
Web应用防护墙3在处理该SYN包时,将继续判断MPLS标签转发表是否有去往用户端1(IP为1.1.1.1)的MPLS标签。如果不存在,会直接将该SYN包透传给服务端2,该SYN包不会进入Web应用防护墙3的协议栈处理。在本发明十四例中,由于标签转发表中还没有IP为1.1.1.1对应的标签,因此该SYN包会被透传给服务端2。透传的SYN包到达业务服务端后,服务端2认为其是一个合法的TCP握手报文,将返回一个SYN/ACK报文。
Web应用防护墙3在收到该SYN/ACK报文后,首先进行的仍然是MPLS标签被动学习流程。该SYN/ACK报文的目的IP是用户端的IP(1.1.1.1),假设其MPLS头部中的标签值为100,此时将在WAF中的标签转发表中添加一条“1.1.1.1->100”的转发表项。至此在Web应用防护墙3的标签转发表中,用户端IP和服务端IP所对应的MPLS标签都学习成功。
之后该SYN/ACK报文将上送Linux协议栈继续处理,由于此时该Web应用防护墙3并没有主动发起TCP连接,因此该SYN/ACK报文将是一个无效的TCP握手报文,Web应用防护墙3会直接向服务端2回复RST报文,根据协议栈的行为不同,也有可能什么也不回复。
由于用户端1发送的第一个SYN报文没有得到回复,用户端1会继续重传SYN包。在收到用户端1重传的SYN报文后,由于此时Web应用防护墙3已经完成用户端IP的标签学习,因此该重传的SYN报文会送到Web应用防护墙3协议栈处理,Web应用防护墙3回复的SYN/ACK报文也能够正确添加MPLS标签并发送到用户端1上。
通过上述过程。由于Web应用防护墙3已经完成用户端IP和服务端IP的标签学习过程,之后对于所有的报文通信,Web应用防护墙3都可以正确添加MPLS头部,从而完成整个HTTP会话代理流程。
参考图9至图11,以下对本申请实施例提供的一种MPLS流量代理方法具体步骤进行详细描述。
通过第一接收模块31经由第一MPLS路由网络4从用户端1接收第一入向MPLS流量。通过解析模块33对第一入向MPLS流量进行解析,得到第一MPLS报文中的与服务端2对应的第一目的IP以及第一MPLS标签、与用户端1对应的第一源IP。通过保存模块34将第一目的IP、第一MPLS标签以及两者之间的第一映射关系保存至MPLS标签转发表。
通过检测模块35判断第一入向MPLS流量是否为SYN报文数据包。如果第一入向MPLS流量为SYN报文数据包,则判断当前MPLS标签转发表中是否存在与第一源IP对应的第二MPLS标签。如果当前MPLS标签转发表中不存在与第一源IP对应的第二MPLS标签,则通过发送模块36直接将SYN报文数据包作为第一服务端出向MPLS流量,经由第二MPLS路由网络5透传至服务端2。
如果当前MPLS标签转发表中存在与所述第一源IP对应的第二MPLS标签,则将所述SYN报文数据包的MPLS头部移除,得到第一用户端入向IP流量;将所述第一用户端入向IP流量经第一Linux协议栈上送至用户态程序处理,确定为一个有效的TCP握手报文,生成SYN/ACK返回报文,作为第一用户端出向IP流量经第一Linux协议栈传出;利用所述第二MPLS标签构造第一用户端出向MPLS头部,并将所述第一用户端出向MPLS头部添加至所述第一用户端出向IP流量,生成第一用户端出向MPLS流量;经由所述第一MPLS路由网络将所述第一用户端出向MPLS流量发送至所述用户端。
如果所述第一入向MPLS流量不为SYN报文数据包,则判断所述第一入向MPLS流量是否为SYN/ACK返回报文;如果所述第一入向MPLS流量为SYN/ACK返回报文,则将所述SYN/ACK返回报文的MPLS头部移除,得到第二用户端入向IP流量;将所述第二用户端入向IP流量经第一Linux协议栈上送至用户态程序,确定与所述用户端之间TCP握手成功,与所述用户端之间建立TCP连接。
如果所述第一入向MPLS流量不为SYN/ACK返回报文,则判断所述第一入向MPLS流量是否为HTTP访问请求;如果所述第一入向MPLS流量不为HTTP访问请求,则对所述第一入向MPLS流量拦截。如果所述第一入向MPLS流量为HTTP访问请求,则判断与所述用户端之间是否建立TCP连接;如果与所述用户端之间未建立TCP连接,则返回TCP连接建立通知;如果与所述用户端之间已建立TCP连接,则将所述HTTP访问请求的MPLS头部移除,得到第三用户端入向IP流量;将所述第三用户端入向IP流量经第一Linux协议栈上送至用户态程序处理,得到第二服务端出向IP流量。
通过检测模块35判断与所述服务端之间是否建立TCP连接。如果与所述服务端之间未建立TCP连接,则生成SYN报文数据包,作为第三服务端出向IP流量经由第二Linux协议栈传出;从当前MPLS标签转发表中查询与所述服务端对应的第一MPLS标签;利用所述第一MPLS标签构造第三服务端出向MPLS头部,并将所述第三服务端出向MPLS头部添加至所述第三服务端出向IP流量,生成第三服务端出向MPLS流量;经由所述第二MPLS路由网络将所述第三服务端出向MPLS流量发送至所述服务端。
如果与所述服务端之间已建立TCP连接,则从当前MPLS标签转发表中查询与所述服务端对应的第一MPLS标签;利用所述第一MPLS标签构造第二服务端出向MPLS头部,并将所述第二服务端出向MPLS头部添加至所述第二服务端出向IP流量,生成第二服务端出向MPLS流量;经由所述第二MPLS路由网络将所述第二服务端出向MPLS流量发送至所述服务端。
通过第二接收模块32经由第二MPLS路由网络5从服务端2接收第二入向MPLS流量。通过解析模块33对第二入向MPLS流量进行解析,得到第二MPLS报文中的与用户端1对应的第二目的IP以及第二MPLS标签。通过保存模块34将第二目的IP、第二MPLS标签以及两者之间的第二映射关系保存至MPLS标签转发表。
通过检测模块35判断所述第二入向MPLS流量是否为SYN/ACK返回报文。如果所述第二入向MPLS流量为SYN/ACK返回报文,则判断针对所述SYN/ACK返回报文是否已主动发起TCP连接请求;如果针对所述SYN/ACK返回报文已主动发起TCP连接请求,则向对应服务端回复SYN/ACK返回报文,与所述服务端之间建立TCP连接。如果针对所述SYN/ACK返回报文未主动发起TCP连接请求,则将所述SYN/ACK返回报文的MPLS头部移除,得到第一服务端入向IP流量;将所述第一服务端入向IP流量经第二Linux协议栈上送至用户态程序处理,确定为一个无效的TCP握手报文。
在本发明实施例中,将所述第一服务端入向IP流量经第二Linux协议栈上送至用户态程序处理,确定为一个无效的TCP握手报文之后,一种MPLS流量代理方法还包括:针对所述第一服务端入向IP流量生成RST回复报文,作为第一服务端出向IP流量并经所述第二Linux协议栈传出;从当前MPLS标签转发表中查询与所述服务端对应的第一MPLS标签;利用所述第一MPLS标签构造所述第一服务端出向MPLS头部,并将所述第一服务端出向MPLS头部添加至所述RST回复报文,生成第一服务端出向MPLS流量;经由所述第二MPLS路由网络将所述第一服务端出向MPLS流量发送至所述服务端。
如果所述第二入向MPLS流量不为SYN/ACK返回报文,则判断所述第二入向MPLS流量是否为HTTP响应。如果所述第二入向MPLS流量不为HTTP响应,则对所述第二入向MPLS流量拦截。如果所述第二入向MPLS流量为HTTP响应,则将所述HTTP响应的MPLS头部移除,得到第三服务端入向IP流量;将所述第三服务端入向IP流量经第二Linux协议栈上送至用户态程序处理,生成第二用户端出向IP流量并经第一Linux协议栈传出;从当前MPLS标签转发表中查询与所述用户端对应的第二MPLS标签;利用所述第二MPLS标签构造第二用户端出向MPLS头部,并将所述第二用户端出向MPLS头部添加至所述第二用户端出向IP流量,生成第二用户端出向MPLS流量;经由所述第一MPLS路由网络将所述第二用户端出向MPLS流量发送至所述用户端。
参考图12,在本发明实施例中,一种MPLS流量代理方法还包括通过检测模块35执行以下步骤:根据预先配置的时间间隔,逐一利用当前MPLS标签转发表中各个标签转发项对应的第一MPLS标签生成MPLS封装的第一TCP syn报文数据包;将所述第一TCP syn报文数据包发送至第一目的IP对应的服务端;判断是否收到对应服务端回复的第一TCP syn/ack报文;如果收到对应服务端回复的第一TCP syn/ack报文,则当前MPLS标签转发表中所述第一MPLS标签有效;如果未收到对应服务端回复的第一TCP syn/ack报文,则将所述第一MPLS标签对应的失败值增加1;判断所述第一MPLS标签对应的失败值是否达到预设阈值;如果所述第一MPLS标签对应的失败值未达到预设阈值,则当前MPLS标签转发表中所述第一MPLS标签有效;如果所述第一MPLS标签对应的失败值达到预设阈值,则当前MPLS标签转发表中所述第一MPLS标签无效;将确认无效的所述第一MPLS标签对应的作为标签转发项从所述MPLS标签转发表中删除。
参考图13,在本发明实施例中,一种MPLS流量代理方法还包括通过检测模块35执行以下步骤:根据预先配置的时间间隔,逐一利用当前MPLS标签转发表中各个标签转发项对应的第二MPLS标签生成MPLS封装的第二TCP syn报文数据包;将所述第二TCP syn报文数据包发送至第二目的IP对应的用户端;判断是否收到对应用户端回复的第二TCP syn/ack报文;如果收到对应用户端回复的第二TCP syn/ack报文,则当前MPLS标签转发表中所述第二MPLS标签有效;如果未收到对应用户端回复的第二TCP syn/ack报文,则将所述第二MPLS标签对应的失败值增加1;判断所述第二MPLS标签对应的失败值是否达到预设阈值;如果所述第二MPLS标签对应的失败值未达到预设阈值,则当前MPLS标签转发表中所述第二MPLS标签有效;如果所述第二MPLS标签对应的失败值达到预设阈值,则当前MPLS标签转发表中所述第二MPLS标签无效;将确认无效的所述第二MPLS标签对应的作为标签转发项从所述MPLS标签转发表中删除。
参考图14,在本发明实施例中,一种MPLS流量代理方法通过还包括检测模块35执行以下步骤:将所述MPLS标签转发表中每个标签转发表项关联了一个last_check_time字段,用于记录该标签转发表项的最近一次保存时间;每次使用所述MPLS标签转发表中某个标签转发表项时,检查该标签转发表项对应的last_check_time字段;判断当前时间与该标签转发表项的最近一次保存时间之间的时间差是否超过预设时间阈值;如果所述时间差未超过预设时间阈值,则该标签转发表项有效;如果所述时间差超过预设时间阈值,则该标签转发表项无效;将确认无效的标签转发项从所述MPLS标签转发表中删除。
与现有技术相比,本申请实施例提供的一种MPLS流量代理方法,将WAF以透明代理模式部署于第一MPLS路由网络和第二MPLS路由网络之间,无论在从服务端接收到第一入向MPLS流量之后,还是从服务端接收到第二入向MPLS流量之后,均进行解析;将得到的与服务端对应的第一目的IP以及第一MPLS标签、与用户端对应的第二目的IP以及第二MPLS标签,以标签转发项保存至MPLS标签转发表;在第一入向MPLS流量为SYN报文数据包,并且当前MPLS标签转发表中不存在与第一源IP对应的第二MPLS标签时,直接将SYN报文数据包透传至服务端。这样,本申请实施例在WAF中实现了MPLS标签的自学习,从而支持WAF对MPLS封装的HTTP流量进行代理,而且用户端的MPLS网络不需要做任何改动,完全不感知WAF的存在。
另外,本发明实施例还提供了一种MPLS流量代理设备,所述设备包括:处理器和存储器;所述存储器用于存储一个或多个程序指令;所述处理器,用于运行一个或多个程序指令,用以执行如上任一项所述的一种MPLS流量代理方法的步骤。
另外,本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上任一项所述一种MPLS流量代理方法的步骤。
在本发明实施例中,处理器可以是一种集成电路芯片,具有信号的处理能力。处理器可以是通用处理器、数字信号处理器(Digital Signal Processor,简称DSP)、专用集成电路(Application Specific Integrated Circuit,简称ASIC)、现场可编程门阵列(FieldProgrammable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。处理器读取存储介质中的信息,结合其硬件完成上述方法的步骤。
存储介质可以是存储器,例如可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。
其中,非易失性存储器可以是只读存储器(Read-Only Memory,简称ROM)、可编程只读存储器(Programmable ROM,简称PROM)、可擦除可编程只读存储器(Erasable PROM,简称EPROM)、电可擦除可编程只读存储器(Electrically EPROM,简称EEPROM)或闪存。
易失性存储器可以是随机存取存储器(Random Access Memory,简称RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(Static RAM,简称SRAM)、动态随机存取存储器(Dynamic RAM,简称DRAM)、同步动态随机存取存储器(Synchronous DRAM,简称SDRAM)、双倍数据速率同步动态随机存取存储器(Double Data RateSDRAM,简称DDRSDRAM)、增强型同步动态随机存取存储器(EnhancedSDRAM,简称ESDRAM)、同步连接动态随机存取存储器(Synchlink DRAM,简称SLDRAM)和直接内存总线随机存取存储器(DirectRambus RAM,简称DRRAM)。
本发明实施例描述的存储介质旨在包括但不限于这些和任意其它适合类型的存储器。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明所描述的功能可以用硬件与软件组合来实现。当应用软件时,可以将相应功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。
虽然,上文中已经用一般性说明及具体实施例对本发明作了详尽的描述,但在本发明基础上,可以对之作一些修改或改进,这对本领域技术人员而言是显而易见的。因此,在不偏离本发明精神的基础上所做的这些修改或改进,均属于本发明要求保护的范围。
Claims (10)
1.一种MPLS流量代理方法,其特征在于,所述方法应用于Web应用防护墙,所述Web应用防护墙以透明代理模式布置于第一MPLS路由网络和第二MPLS路由网络之间,实现对MPLS流量进行检测及代理,所述方法包括:
经由所述第一MPLS路由网络从用户端接收第一入向MPLS流量;以及经由所述第二MPLS路由网络从服务端接收第二入向MPLS流量;
对所述第一入向MPLS流量进行解析,得到第一MPLS报文中的与服务端对应的第一目的IP以及第一MPLS标签、与用户端对应的第一源IP;以及对所述第二入向MPLS流量进行解析,得到第二MPLS报文中的与用户端对应的第二目的IP以及第二MPLS标签;
将所述第一目的IP、所述第一MPLS标签以及两者之间的第一映射关系作为标签转发项保存至MPLS标签转发表;以及将所述第二目的IP、所述第二MPLS标签以及两者之间的第二映射关系作为标签转发项保存至所述MPLS标签转发表;
判断所述第一入向MPLS流量是否为SYN报文数据包;
如果所述第一入向MPLS流量为SYN报文数据包,则判断当前MPLS标签转发表中是否存在与所述第一源IP对应的第二MPLS标签;
如果当前MPLS标签转发表中不存在与所述第一源IP对应的第二MPLS标签,则直接将所述SYN报文数据包作为第一服务端出向MPLS流量,经由所述第二MPLS路由网络透传至服务端。
2.如权利要求1所述的一种MPLS流量代理方法,其特征在于,所述方法还包括:
如果当前MPLS标签转发表中存在与所述第一源IP对应的第二MPLS标签,则将所述SYN报文数据包的MPLS头部移除,得到第一用户端入向IP流量;
将所述第一用户端入向IP流量经第一Linux协议栈上送至用户态程序处理,确定为一个有效的TCP握手报文,生成SYN/ACK返回报文,作为第一用户端出向IP流量经第一Linux协议栈传出;
利用所述第二MPLS标签构造第一用户端出向MPLS头部,并将所述第一用户端出向MPLS头部添加至所述第一用户端出向IP流量,生成第一用户端出向MPLS流量;
经由所述第一MPLS路由网络将所述第一用户端出向MPLS流量发送至所述用户端;
如果所述第一入向MPLS流量不为SYN报文数据包,则判断所述第一入向MPLS流量是否为SYN/ACK返回报文;
如果所述第一入向MPLS流量为SYN/ACK返回报文,则将所述SYN/ACK返回报文的MPLS头部移除,得到第二用户端入向IP流量;
将所述第二用户端入向IP流量经第一Linux协议栈上送至用户态程序,确定与所述用户端之间TCP握手成功,与所述用户端之间建立TCP连接。
3.如权利要求2所述的一种MPLS流量代理方法,其特征在于,所述方法还包括:
如果所述第一入向MPLS流量不为SYN/ACK返回报文,则判断所述第一入向MPLS流量是否为HTTP访问请求;
如果所述第一入向MPLS流量不为HTTP访问请求,则对所述第一入向MPLS流量拦截;
如果所述第一入向MPLS流量为HTTP访问请求,则判断与所述用户端之间是否建立TCP连接;
如果与所述用户端之间未建立TCP连接,则返回TCP连接建立通知;
如果与所述用户端之间已建立TCP连接,则将所述HTTP访问请求的MPLS头部移除,得到第三用户端入向IP流量;
将所述第三用户端入向IP流量经第一Linux协议栈上送至用户态程序处理,得到第二服务端出向IP流量;
判断与所述服务端之间是否建立TCP连接;
如果与所述服务端之间未建立TCP连接,则生成SYN报文数据包,作为第三服务端出向IP流量经由第二Linux协议栈传出;
从当前MPLS标签转发表中查询与所述服务端对应的第一MPLS标签;
利用所述第一MPLS标签构造第三服务端出向MPLS头部,并将所述第三服务端出向MPLS头部添加至所述第三服务端出向IP流量,生成第三服务端出向MPLS流量;
经由所述第二MPLS路由网络将所述第三服务端出向MPLS流量发送至所述服务端;
如果与所述服务端之间已建立TCP连接,则从当前MPLS标签转发表中查询与所述服务端对应的第一MPLS标签;
利用所述第一MPLS标签构造第二服务端出向MPLS头部,并将所述第二服务端出向MPLS头部添加至所述第二服务端出向IP流量,生成第二服务端出向MPLS流量;
经由所述第二MPLS路由网络将所述第二服务端出向MPLS流量发送至所述服务端。
4.如权利要求3中所述的一种MPLS流量代理方法,其特征在于,所述方法还包括:
判断所述第二入向MPLS流量是否为SYN/ACK返回报文;
如果所述第二入向MPLS流量为SYN/ACK返回报文,则判断针对所述SYN/ACK返回报文是否已主动发起TCP连接请求;
如果针对所述SYN/ACK返回报文已主动发起TCP连接请求,则向对应服务端回复SYN/ACK返回报文,与所述服务端之间建立TCP连接;
如果针对所述SYN/ACK返回报文未主动发起TCP连接请求,则将所述SYN/ACK返回报文的MPLS头部移除,得到第一服务端入向IP流量;
将所述第一服务端入向IP流量经第二Linux协议栈上送至用户态程序处理,确定为一个无效的TCP握手报文。
5.如权利要求4所述的一种MPLS流量代理方法,其特征在于,所述方法还包括:
如果所述第二入向MPLS流量不为SYN/ACK返回报文,则判断所述第二入向MPLS流量是否为HTTP响应;
如果所述第二入向MPLS流量不为HTTP响应,则对所述第二入向MPLS流量拦截;
如果所述第二入向MPLS流量为HTTP响应,则将所述HTTP响应的MPLS头部移除,得到第三服务端入向IP流量;
将所述第三服务端入向IP流量经第二Linux协议栈上送至用户态程序处理,生成第二用户端出向IP流量并经第一Linux协议栈传出;
从当前MPLS标签转发表中查询与所述用户端对应的第二MPLS标签;
利用所述第二MPLS标签构造第二用户端出向MPLS头部,并将所述第二用户端出向MPLS头部添加至所述第二用户端出向IP流量,生成第二用户端出向MPLS流量;
经由所述第一MPLS路由网络将所述第二用户端出向MPLS流量发送至所述用户端。
6.如权利要求1至5中任一项所述的一种MPLS流量代理方法,其特征在于,所述方法还包括:
根据预先配置的时间间隔,逐一利用当前MPLS标签转发表中各个标签转发项对应的第一MPLS标签/第二MPLS标签生成MPLS封装的第一TCP syn报文数据包/第二TCP syn报文数据包;
将所述第一TCP syn报文数据包/所述第二TCP syn报文数据包发送至第一目的IP对应的服务端/第二目的IP对应的用户端;
判断是否收到对应服务端回复的第一TCP syn/ack报文/对应用户端回复的第二TCPsyn/ack报文;
如果收到对应服务端回复的第一TCP syn/ack报文/对应用户端回复的第二TCP syn/ack报文,则当前MPLS标签转发表中所述第一MPLS标签/所述第二MPLS标签有效;
如果未收到对应服务端回复的第一TCP syn/ack报文/对应用户端回复的第二TCPsyn/ack报文,则将所述第一MPLS标签/所述第二MPLS标签对应的失败值增加1;
判断所述第一MPLS标签/所述第二MPLS标签对应的失败值是否达到预设阈值;
如果所述第一MPLS标签/所述第二MPLS标签对应的失败值未达到预设阈值,则当前MPLS标签转发表中所述第一MPLS标签/所述第二MPLS标签有效;
如果所述第一MPLS标签/所述第二MPLS标签对应的失败值达到预设阈值,则当前MPLS标签转发表中所述第一MPLS标签/所述第二MPLS标签无效;
将确认无效的所述第一MPLS标签/所述第二MPLS标签对应的标签转发项从所述MPLS标签转发表中删除。
7.如权利要求1至5中任一项所述的一种MPLS流量代理方法,其特征在于,所述方法还包括:
将所述MPLS标签转发表中每个标签转发表项关联了一个last_check_time字段,用于记录该标签转发表项的最近一次保存时间;
每次使用所述MPLS标签转发表中某个标签转发表项时,检查该标签转发表项对应的last_check_time字段;
判断当前时间与该标签转发表项的最近一次保存时间之间的时间差是否超过预设时间阈值;
如果所述时间差未超过预设时间阈值,则该标签转发表项有效;
如果所述时间差超过预设时间阈值,则该标签转发表项无效;
将确认无效的标签转发项从所述MPLS标签转发表中删除。
8.一种MPLS流量代理系统,其特征在于,所述系统应用于Web应用防护墙,所述Web应用防护墙以透明代理模式布置于第一MPLS路由网络和第二MPLS路由网络之间,实现对MPLS流量进行检测及代理,所述系统包括:
第一接收模块,用于经由所述第一MPLS路由网络从用户端接收第一入向MPLS流量;
第二接收模块,用于经由所述第二MPLS路由网络从服务端接收第二入向MPLS流量;
解析模块,用于对所述第一入向MPLS流量进行解析,得到第一MPLS报文中的与服务端对应的第一目的IP以及第一MPLS标签、与用户端对应的第一源IP;以及对所述第二入向MPLS流量进行解析,得到第二MPLS报文中的与用户端对应的第二目的IP以及第二MPLS标签;
保存模块,用于将所述第一目的IP、所述第一MPLS标签以及两者之间的第一映射关系保存至MPLS标签转发表;以及将所述第二目的IP、所述第二MPLS标签以及两者之间的第二映射关系保存至所述MPLS标签转发表;
检测模块,用于判断所述第一入向MPLS流量是否为SYN报文数据包;如果所述第一入向MPLS流量为SYN报文数据包,则判断当前MPLS标签转发表中是否存在与所述第一源IP对应的第二MPLS标签;
发送模块,用于如果当前MPLS标签转发表中不存在与所述第一源IP对应的第二MPLS标签,则直接将所述SYN报文数据包作为第一服务端出向MPLS流量,经由所述第二MPLS路由网络透传至服务端。
9.一种MPLS流量代理设备,其特征在于,所述设备包括:处理器和存储器;
所述存储器用于存储一个或多个程序指令;
所述处理器,用于运行一个或多个程序指令,用以执行如权利要求1至7任一项所述的一种MPLS流量代理方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述一种MPLS流量代理方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311331665.6A CN117081990B (zh) | 2023-10-16 | 2023-10-16 | 一种mpls流量代理方法、系统、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311331665.6A CN117081990B (zh) | 2023-10-16 | 2023-10-16 | 一种mpls流量代理方法、系统、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117081990A CN117081990A (zh) | 2023-11-17 |
CN117081990B true CN117081990B (zh) | 2024-01-26 |
Family
ID=88708353
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311331665.6A Active CN117081990B (zh) | 2023-10-16 | 2023-10-16 | 一种mpls流量代理方法、系统、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117081990B (zh) |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101656670A (zh) * | 2008-08-14 | 2010-02-24 | 丛林网络公司 | 具有集成mpls-感知防火墙的路由装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
LT3805958T (lt) * | 2017-08-28 | 2024-03-12 | Bright Data Ltd. | Būdas pagerinti turinio parsisiuntimą, pasirenkant tunelinius įrenginius |
US10785190B2 (en) * | 2017-12-13 | 2020-09-22 | Adaptiv Networks Inc. | System, apparatus and method for providing a unified firewall manager |
-
2023
- 2023-10-16 CN CN202311331665.6A patent/CN117081990B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101656670A (zh) * | 2008-08-14 | 2010-02-24 | 丛林网络公司 | 具有集成mpls-感知防火墙的路由装置 |
Also Published As
Publication number | Publication date |
---|---|
CN117081990A (zh) | 2023-11-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
McCann et al. | Path MTU Discovery for IP version 6 | |
US7853714B1 (en) | Providing services for multiple virtual private networks | |
US8111692B2 (en) | System and method for modifying network traffic | |
US9154512B2 (en) | Transparently proxying transport protocol connections using an external server | |
EP2364543B1 (en) | Broadband network access | |
CN1938982B (zh) | 通过认证因特网控制消息协议分组来防止网络攻击的方法和装置 | |
US7107609B2 (en) | Stateful packet forwarding in a firewall cluster | |
US7509435B2 (en) | Network Address Translation and Port Mapping | |
US7664855B1 (en) | Port scanning mitigation within a network through establishment of an a prior network connection | |
US20070283429A1 (en) | Sequence number based TCP session proxy | |
KR100811890B1 (ko) | 인터넷 시스템에서 서비스 플로우를 보장하는 애니캐스트라우팅 방법 및 장치 | |
EP2357570A1 (en) | System and method for network access without reconfiguration | |
CN109412946B (zh) | 一种确定回源路径的方法、装置、服务器及可读存储介质 | |
EP1760971A2 (en) | Processing communication flows in asymmetrically routed networks | |
US20020023152A1 (en) | Communication data relay system | |
US10530644B2 (en) | Techniques for establishing a communication connection between two network entities via different network flows | |
US10298616B2 (en) | Apparatus and method of securing network communications | |
JP2018528679A (ja) | 負荷平衡システムにおいて接続を確立するデバイス及び方法 | |
US20080101382A1 (en) | Efficient method for discovering path mtu for tcp connections | |
CN110191066B (zh) | 一种确定最大传输单元pmtu的方法、设备及系统 | |
US20130223337A1 (en) | Mobile device to generate multiple maximum transfer units and data transfer method | |
EP3534587B1 (en) | Techniques for packet data conversion | |
US20100023620A1 (en) | Access controller | |
CN108064441B (zh) | 一种加速网络传输优化方法以及系统 | |
CN117081990B (zh) | 一种mpls流量代理方法、系统、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |