华为大同:全系列状态检测防火墙报文处理流程
华为防火墙在处理报文时,其核心在于其状态检测与会话机制:当防火墙接收到报文后,它会在特定时间和条件下创建会话,并对那些与会话表匹配的报文进行特定的转发处理。基于这一关键点,可以将报文通过防火墙的处理过程划分为三个阶段:查询会话表之前、查询会话表过程中、以及查询会话表之后。
在整个报文转发的流程中,不通类型的报文会根据配置走入不同分支,被不同的特性处理。所以并非所有报文都会经过上述所有模块的处理。总体分为三个阶段。
- 接收报文,对报文进行基本处理
- 查询会话表,对首包和后续包做不同处理
- 对报文进行安全检测,发送报文
第一阶段:接收报文,对报文进行基本处理
这一阶段解析出报文的帧头部和IP头部,并根据报文头部中的信息进行一些基础的安全监测。
第二阶段:查询会话表,对首包和后续包做不同处理
这是防火墙的核心处理环节,主要包括会话建立、会话刷新等过程。防火墙根据报文是否存在匹配的会话表项,有两种处理方式,首包处理流程和后续包处理流程。
报文到此阶段,防火墙最先判断该报文是否需要创建会话。
- 对于OSPF、IGMP组播报文等一些协议报文是不创建会话的,这些报文会直接查路由和安全策略。
- 对于TCP首包、UDP等报文都需要创建会话,判断该报文需要创建会话后,在会话表中查询是否已存在该报文的会话。
- 对于会话表中不存在匹配任意一表项的报文被认定为一条流量的首包,进入首包处理流程。
- 对于会话表中存在匹配的表项的报文被认为是某一流量的后续包,进入后续包处理流程。
首包处理流程要点
此时,初始报文被认定是一条流量的首包,进入首包处理流程。
- 首先该报文与黑名单进行匹配,若报文命中黑名单源目地址或用户,则丢弃报文,不在处理后续流程。
- 查询正反向Server-map,若命中Server-map表项,则先记录Server-map表项记录。
-
Server-map
Server-map表项是一种用来记录多通道协议报文的数据连接状态或者NAT场景下的地址转换关系的表项。
Server-map是用于服务器映射、负载均衡和多通道协议转发的重要表项,如果首包命中Server-map表,FW根据Server-map对报文进行转发或地址转换。Server-map分为静态Server-map和动态Server-map。
- 服务器映射、负载均衡、NAT64生成的静态表项:FW根据Server-map中的地址映射关系在首包创建的会话中记录修改后的目的IP和端口信息。
- ASPF、NAT No-PAT、NAT Full-cone、DS-Lite服务器映射等生成的动态表项:FW根据Server-map的信息转发报文并生成会话,而且不对此报文进行安全策略检查。
-
- 查询路由表:根据Server-map表的记录结果查询命中那条路由,优先查询策略路由。若未命中策略路由则查询正向路由表,决定报文的下一跳和出接口。
- 此时报文源目地址并未进行转换,所以要根据server-map记录地址转换后的报文查询,确保经过防火墙的报文正常转发。
- 匹配安全策略,根据策略是否进入下一报文处理流程
- 源NAT策略匹配,只是做源地址的转换映射的匹配,不做具体的转换,记录NAT转换后的源IP地址和端口信息
- 检查连接会话数限制
- 创建会话条目:根据以上处理记录结果,创建会话。
后续包处理流程
判断会话是否需要刷新。当涉及到某一会话的各表项和策略(路由表、安全策略变化时)会话需要刷新,刷新会话继续查询路由、查询安全策略,若不需要直接进行后续阶段处理。
- 路由发生变化
- 安全策略发生变化
- 用户状态变化(上下线)
- 认证策略发生变化
第三阶段:对报文进行安全检测,发送报文
首包处理流程,创建会话后与后续包的处理流程一致
- 带宽策略:根据带宽策略,FW会判断一下当前流量的带宽占用情况,以判断是否需要丢弃这个报文以降低流量速率
- 安全策略里面的内容安全(UTM)
- 反病毒 IPS URL过滤 文件过滤 内容过滤 应用过滤 邮件过滤
- 报文地址转换:根据会话表中的地址转换信息修改报文中的源地址或目的地址。
- 报文在前面流程中是否命中了Server-map表,尤其是反向Server-map表,若已经命中,那么报文会根据反向Servermap表进行源地址转换,不会再往后匹配源NAT策略了
- VPN:根据VPN配置,FW会判断该报文是否需要进入VPN隧道,进入哪条隧道,并且对需要通过VPN传输的报文进行必要的加密,封装等操作。
- 出接口的阈值:根据出接口配置的带宽阈值限制,FW会再次控制流量的速率
会话原理与细节
硬件快转流程
通常情况下,防火墙接收到报文后,上送CPU处理,CPU处理完后送往指定出接口,为减轻CPU负担,同时提高业务处理性能,防火墙支持对某些业务进行快速转发,对于符合快转条件的后续报文,通过加速硬件进行快速转发,不上送CPU处理
- 防火墙收到报文后,首先判断是否匹配到相应的快转流表,快转流表可以看做是会话表的精简副本,作为报文的快速转发依据。
- 如果报文匹配到快转流表,则根据流表信息快速转发报文,不需要上送CPU,如果未匹配到快转流表,则需要上送到CPU进行常规的首包/后续包处理流程。
- 在CPU上判断是否符合快速过滤条件,如果符合快速过滤条件,则根据会话表向加速硬件下发相应的流表,并对报文进行常规的处理和转发,如果不符合快速过滤条件则对报文进行常规的处理和转发。
会话:
一般将五元组一样的报文称之为一条流,有时候也称之为会话
首包:
第一个到达设备的报文称之为首包,首包负责:
- 以报文五元组为KEY新建立一条流表。
- 根据查找路由结果、做各种业务汇总出业务结果和动作。
- 将结果和动作保存到流表DATA中,譬如下一跳IP、出接口、NAT转换结果、是否阻断;
- 首包转发出去或者丢弃。
后续包:
后续到达设备的报文称之为后续包,后续包负责:
1、以报文五元组为KEY命中流表。
2、 直接根据流表DATA中的业务结果执行动作。譬如NAT转换、阻断丢弃或者发送出去
会话刷新机制
- 当首包创建会话后,后续报文命中会话直接转发。当设备的配置等发生变化的时候,后续 报文命中会话之后,也需要重新走首包流程,对会话表进行刷新。
- 为什么要刷新会话
- 很好理解,如果没有会话刷新,你新配置的安全策略、nat策略等,岂不是没有办法实时 生效?一定要等会话老化之后,才能生效,这是不可以接受的,我们一般都需要立即生效。
- 触发会话刷新的变化
- 安全策略、NAT策略等配置变化;用户上下线;路由信息变化等等。
- 防火墙判断需要进行会话刷新时,设备上所有的会话都会进行刷新。如果刷新发现安全 策略已经不允许该报文转发,防火墙会将该会话删除。