发明内容
本申请实施例的目的在于提供一种容器环境下的入侵防御方法及装置、电子设备、计算机可读存储介质,用于实现IPS快速检测。
一方面,本申请提供了一种容器环境下的入侵防御方法,应用于宿主机,包括:
指定网卡驱动接收到数据包;其中,所述指定网卡驱动包括所述宿主机的容器内虚拟网卡的网卡驱动、以及所述宿主机的物理网卡的网卡驱动;
所述指定网卡驱动调用XDP网络钩子上的eBPF程序,通过所述eBPF程序从所述数据包中提取出数据包特征值,并在快速路径流表中,查找与所述数据包特征值对应的快速路径流表项;
基于查找结果对所述数据包进行处理。
在一实施例中,所述基于查找结果对所述数据包进行处理,包括:
若查找结果为查到对应的快速路径流表项,所述指定网卡驱动依据所述快速路径流表项中的处理动作,对所述数据包进行处理;
若查找结果为未查到对应的快速路径流表项,所述指定网卡驱动将所述数据包交由容器命名空间的nfqueue,使得所述nfqueue依据所述容器命名空间的引流规则、将所述数据包重定向至入侵防御系统。
在一实施例中,所述指定网卡驱动依据所述快速路径流表项中的处理动作,对所述数据包进行处理,包括:
如果处理动作为放行,所述指定网卡驱动发送所述数据包;
如果处理动作为丢弃,所述指定网卡驱动丢弃所述数据包。
在一实施例中,所述指定网卡驱动发送所述数据包,包括:
通过所述eBPF程序以所述数据包的目的MAC,查找转发表;
如果查到对应于所述目的MAC的转发表项,所述指定网卡驱动将数据包发送至所述转发表项指示的网卡;
如果未查到对应于所述目的MAC的转发表项,所述指定网卡驱动广播所述数据包。
在一实施例中,所述方法还包括:
所述入侵防御系统对所述数据包进行检测,获得检测结果;
所述入侵防御系统基于所述检测结果对应的处理动作、所述数据包的数据包特征值构建快速路径流表项,并将所述快速路径流表项写入所述快速路径流表。
在一实施例中,所述方法还包括:
若查找结果为未查到对应的快速路径流表项,所述eBPF程序依据所述指定网卡驱动的类型信息确定所述指定网卡驱动对应于物理网卡时,基于所述数据包的源MAC和所述物理网卡的网卡名称构建转发表项,并写入转发表。
在一实施例中,在所述指定网卡驱动接收到数据包之前,所述方法还包括:
所述宿主机的入侵防御系统获取所述宿主机上已运行的容器信息;
所述入侵防御系统在所述指定网卡驱动的XDP网络钩子上,下发eBPF程序;
所述入侵防御系统基于每一容器的容器信息,构建转发表项,并将所述转发表项写入所述eBPF程序的转发表;
所述入侵防御系统为每一容器的网络命名空间下发nfqueue的引流规则;其中,所述引流规则指示将与容器相关的数据包重定向至所述入侵防御系统。
在一实施例中,所述方法还包括:
若任一容器停止运行,删除停止运行的容器的网络命名空间下的引流规则,并在所述转发表删除停止运行的容器对应的转发表项。
进一步的,本申请还提供了一种电子设备,所述电子设备包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为执行上述容器环境下的入侵防御方法。
另外,本申请还提供了一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序可由处理器执行以完成上述容器环境下的入侵防御方法。
本申请方案,宿主机上指定网卡驱动接收到数据包之后,调用XDP网络钩子上的eBPF程序,通过eBPF程序从所述数据包中提取出数据包特征值,然后在快速路径流表进行查找,并以查找结果对数据包进行处理;
由于指定网卡驱动的XDP网络钩子上绑定了eBPF程序,该eBPF程序可以通过快速路径流表对已经过检测的连接的数据包进行快速处理,避免了流量全部被Linux网络协议栈处理所占用的巨大开销,提升了系统性能。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。
相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本申请的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
图1为本申请实施例提供的容器环境下的入侵防御方法的应用场景示意图。如图1所示,该应用场景包括宿主机和外部网络;宿主机可以是服务器、服务器集群或云计算中心,宿主机上启动多个容器,并搭载有入侵防御系统,可以通过入侵防御系统和eBPF(Extend Berkeley Packet Filter)程序实现容器环境下的快速IPS检测。
如图2所示,本实施例提供一种电子设备1,包括:至少一个处理器11和存储器12,图2中以一个处理器11为例。处理器11和存储器12通过总线10连接,存储器12存储有可被处理器11执行的指令,指令被处理器11执行,以使电子设备1可执行下述的实施例中方法的全部或部分流程。在一实施例中,电子设备1可以是上述宿主机,用于执行容器环境下的入侵防御方法。
存储器12可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(Static Random Access Memory,简称SRAM),电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,简称EEPROM),可擦除可编程只读存储器(Erasable Programmable Read Only Memory,简称EPROM),可编程只读存储器(Programmable Red-Only Memory,简称PROM),只读存储器(Read-Only Memory,简称ROM),磁存储器,快闪存储器,磁盘或光盘。
本申请还提供了一种计算机可读存储介质,存储介质存储有计算机程序,计算机程序可由处理器11执行以完成本申请提供的容器环境下的入侵防御方法。
参见图3,为本申请一实施例提供的容器环境下的入侵防御方法的流程示意图,如图3所示,该方法可以包括以下步骤310-步骤330。
步骤310:指定网卡驱动接收到数据包;其中,指定网卡驱动包括宿主机的容器内虚拟网卡的网卡驱动、以及宿主机的物理网卡的网卡驱动。
参见图4,为本申请一实施例提供的宿主机的架构示意图,如图4所示,每一虚线框内为一个宿主机,宿主机与外部物理交换机连接;宿主机内包括与物理交换机对接的物理网卡、与物理网卡对接的虚拟交换机、以及多个容器。虚拟交换机和容器内均存在虚拟网卡。本申请方案中,容器内虚拟网卡和宿主机的物理网卡为指定网卡;容器内虚拟网卡的网卡驱动、以及物理网卡的网卡驱动,为指定网卡驱动。以图4为例,每一宿主机的物理网卡的网卡驱动为指定网卡驱动;第一个宿主机上容器A的虚拟网卡vnetA1、容器B的虚拟网卡vnetB1的网卡驱动,以及第二个宿主机上容器C的虚拟网卡vnetC1、容器D的虚拟网卡vnetD1的网卡驱动均为指定网卡驱动。
容器相关的流量可分为容器往外发送的流量,以及外部网络发给容器的流量。对于容器往外发送的流量,容器内虚拟网卡的指定网卡驱动可以在接收数据包后,执行步骤320;对于外部网络发给容器的流量,宿主机物理网卡的指定网卡驱动可以在接收数据包后,执行步骤320。
步骤320:指定网卡驱动调用XDP网络钩子上的eBPF程序,通过eBPF程序从数据包中提取出数据包特征值,并在快速路径流表中,查找与数据包特征值对应的快速路径流表项。
步骤330:基于查找结果对数据包进行处理。
其中,快速路径流表可以包括多个快速路径流表项;每一快速路径流表项对应于一个连接,包含数据包特征值与处理动作的映射关系。数据包特征值可以包括数据包的五元组等信息。
指定网卡驱动的XDP(eXpress Data Path)网络钩子均被绑定eBPF程序。在接收到数据包之后,指定网卡驱动调用eBPF程序处理该数据包。此时,eBPF程序从数据包中解析出数据包特征值,并在快速路径流表中进行查找,获得查找结果。这里,查找结果可以包括查到与数据包特征值对应的快速路径流表项和未查到快速路径流表项。
在获得查找结果之后,可以依据查找结果对数据包直接进行处理。
通过上述措施,在指定网卡驱动的XDP网络钩子下发XDP类型的eBPF程序,可以通过eBPF程序对容器相关的流量进行快速处理,从而避免了流量全部被Linux网络协议栈处理所占用的巨大开销,提升了系统性能。
在一实施例中,在依据查找结果处理数据包时,一方面,若查找结果为查到对应的快速路径流表项,eBPF程序可以依据快速路径流表项中的处理动作,对数据包进行处理。这种情况下,快速路径流表项已经指示数据包所属连接安全或存在攻击行为,无需再对数据包进行额外的IPS检测,从而节省了大量开销。
另一方面,若查找结果为未查到对应的快速路径流表项,说明数据包所属连接尚未经过IPS检测或者还没有检测出结果。eBPF程序可以向指定网卡驱动返回处理结果“Pass”。此时,指定网卡驱动可以将数据包交由容器命名空间的nfqueue,使得nfqueue依据容器命名空间的引流规则,将数据包重定向至宿主机的入侵防御系统。这里,引流规则指示将与容器相关的数据包重定向至入侵防御系统。
在一实施例中,在依据查到的快速路径流表项中的处理动作,处理数据包时,一方面,如果处理动作是放行,eBPF程序可以向指定网卡驱动返回处理结果“Redirect”,表示可以发送数据包。指定网卡驱动可以对数据包进行发送处理。
另一方面,如果处理动作是丢弃,eBPF程序可以向指定网卡驱动返回处理结果“Drop”,表示需要丢弃数据包。指定网卡驱动接收到处理结果之后,可以丢弃数据包。
在一实施例中,指定网卡驱动在发送数据包之前,可以通过eBPF程序以数据包的目的MAC,查找转发表。其中,转发表包括多条转发表项,每一转发表项包括MAC地址、网卡名称之间的映射关系。这里,一种情况下,如果转发表项对应于容器,转发表项中的MAC地址为容器内网卡的MAC地址、网卡名称为容器内网卡对应的虚拟交换机上网卡的名称。以图4为例,容器A对应的转发表项,记录容器内网卡vnetA1的MAC地址与虚拟交换机上网卡vnetA2的名称之间的映射关系。另一种情况下,如果转发表项对应于宿主机外部设备,转发表项中的MAC地址为外部设备的MAC地址、网卡名称为宿主机上物理网卡的名称。
一种情况下,如果查到对应于目的MAC的转发表项,eBPF程序可以将转发表项中网卡名称指示的目标网卡返回给指定网卡驱动。指定网卡驱动可以将数据包发送至转发表项指示的目标网卡。示例性的,在图4场景中,目标网卡为vnetB2,指定网卡驱动将数据包发送至vnetB2之后,数据包会被发送至容器B。
另一种情况下,如果未查到对应于目的MAC的转发表项,eBPF程序可以向指定网卡驱动返回查找结果为空。这种情况下,指定网卡驱动可以对数据包进行广播。示例性的,数据包发往容器,指定网卡驱动可以向指定网卡对应的虚拟交换机上多个网卡进行广播,使得数据包被发送至宿主机内多个容器。
在一实施例中,nfqueue依据引流规则将数据包重定向至入侵防御系统之后,入侵防御系统可以对数据包进行检测,从而获得检测结果。其中,检测结果可以指示数据包所属连接为安全或存在攻击行为。
如果检测结果指示连接为安全,该连接下数据包的处理动作可以为放行;如果检测结果指示连接存在攻击行为,该连接下的数据包的处理动作可以为丢弃。
入侵防御系统可以基于检测结果对应的处理动作、数据包的数据包特征值构建该连接对应的快速路径流表项,并将快速路径流表项写入快速路径流表。
这种情况下,后续接收到已经过检测的连接的数据包时,可以通过eBPF程序依据快速路径流表项直接进行处理,无需占用Linux网络协议栈,节省了系统开销。
在一实施例中,在通过eBPF程序查找快速路径流表之后,若查找结果为查到对应的快速路径流表项,eBPF程序可以检查作为调用方的指定网卡驱动的类型信息。这里,类型信息可以指示指定网卡驱动所驱动的网卡是物理网卡或虚拟网卡。
一方面,如果该类型信息指示指定网卡驱动所驱动的网卡为虚拟网卡,可以不作处理。另一方面,如果该类型信息指示指定网卡驱动所驱动的网卡为物理网卡,说明数据包来自宿主机的外部网络,这种情况下转发表缺乏数据包发送者对应的转发表项。此时,eBPF程序可以基于数据包的源MAC和物理网卡的网卡名称,构建转发表项,并写入转发表。
通过该措施,可以对转发表进行更新,以便于后续依据转发表实现数据包的精确转发。
在一实施例中,在指定网卡驱动接收到数据包之前,需对宿主机进行配置。参见图5,为本申请一实施例提供的宿主机的配置方法的流程示意图,如图5所示,该方法可以包括如下步骤510-步骤540。
步骤510:宿主机的入侵防御系统获取宿主机上已运行的容器信息。
宿主机的入侵防御系统启动之后,可以扫描宿主机上所有已运行的容器的容器信息。这里,容器信息可以包括容器内虚拟网卡的MAC地址、容器的网络命名空间、容器内虚拟网卡对接的虚拟交换机的交换机名称、虚拟交换机上与容器内虚拟网卡对接的虚拟网卡的名称等。
另一种情况下,入侵防御系统可以启动容器事件监控线程,该线程负责监控容器启动、停止等事件。当容器事件监控线程监控到容器启动事件时,确定有新的容器开始运行,这种情况下,入侵防御系统可以获取该容器的容器信息。
步骤520:入侵防御系统在指定网卡驱动的XDP网络钩子上,下发eBPF程序。
入侵防御系统可以在宿主机物理网卡的网卡驱动的XDP网络钩子上,以及,在各容器的容器内虚拟网卡的网卡驱动的XDP网络钩子上,下发eBPF程序。
另一种情况下,在入侵防御系统运行过程中,如果通过容器事件监控线程监控到新的容器开始运行,入侵防御系统可以在该容器内的虚拟网卡的网卡驱动的XDP网络钩子上,下发eBPF程序。
步骤530:入侵防御系统基于每一容器的容器信息,构建转发表项,并将转发表项写入eBPF程序的转发表。
针对每一容器,入侵防御系统可以基于该容器的容器信息,构建该容器对应的转发表项,该转发表项可以包括容器内虚拟网卡的MAC地址、虚拟交换机上与容器内虚拟网卡对接的虚拟网卡的名称之间的映射关系。入侵防御系统可以将每一容器对应的转发表项,写入eBPF程序的转发表。
步骤540:入侵防御系统为每一容器的网络命名空间下发nfqueue的引流规则;其中,引流规则指示将与容器相关的数据包重定向至入侵防御系统。
针对每一容器,入侵防御系统可以为每一容器的网络命名空间,下发nfqueue的引流规则。这种情况下,后续容器发出的数据包,或者,发往容器的数据包,会首先被发送至入侵防御系统进行IPS检测。
在一实施例中,入侵防御系统所启动的容器事件监控线程,在监控到任一容器的容器停止事件时,可以确定该容器停止运行。在任一容器停止运行的情况下,入侵防御系统可以删除停止运行的容器的网络命名空间下的引流规则,并在转发表删除停止运行的容器对应的转发表项。
这种情况下,任一容器停止运行时,可以删除该容器的相关配置,从而避免无效的配置信息对系统运行带来的干扰。
参见图6,为本申请一实施例提供的网卡的数据包接收路径的架构示意图,如图6所示,网卡驱动从网卡接收到数据包之后,首先可以在数据包接收路径的XDP网络钩子上进行处理。由于XDP网络钩子上已绑定eBPF程序,因此,可以对与快速路径流表项匹配的数据包进行快速转发,从而实现了网络性能优化。
参见图7,为本申请一实施例提供的入侵防御方案的对比示意图,如图7a所示,为相关技术的入侵防御方案,在该方案中,网卡接收到数据包之后,直接交由Linux网络协议栈,由Linux网络协议栈处理之后再发送给入侵防御系统进行检测。如果检测出来存在攻击行为,由入侵防御系统丢弃数据包,否则,入侵防御系统将数据包返回Linux网络协议栈,Linux网络协议栈再将数据包发送给容器。
如图7b所示,为本申请的入侵防御方案,在该方案中,网卡接收到数据包之后,首先由eBPF程序进行处理。从而可以在指定网卡驱动的位置将已确定不存在攻击行为的数据包的快速转发,以及对已确定存在攻击行为的数据包的快速丢弃,避免了此类数据包被Linux网络协议栈和入侵防御系统处理而带来的额外开销,提高系统性能。
图8是本发明一实施例的一种容器环境下的入侵防御装置的框图,如图8所示,该装置可以包括:
接收模块810,用于接收到数据包;其中,指定网卡驱动包括宿主机的容器内虚拟网卡的网卡驱动、以及所述宿主机的物理网卡的网卡驱动;
调用模块820,用于调用XDP网络钩子上的eBPF程序,通过所述eBPF程序从所述数据包中提取出数据包特征值,并在快速路径流表中,查找与所述数据包特征值对应的快速路径流表项;
处理模块830,用于基于查找结果对所述数据包进行处理。
上述装置中各个模块的功能和作用的实现过程具体详见上述容器环境下的入侵防御方法中对应步骤的实现过程,在此不再赘述。
在本申请所提供的几个实施例中,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。