Hillstone 防火墙系统架构的一点总结

一、组成StoneOS应用负载网关系统架构的基本元素包括:

安全域:``
域是一个逻辑实体,将网络划分为不同部分,应用了安全策略的域称为“安全域”。例如,trust安全域通常为内网等可信任网络,untrust安全域通常为互联网等存在安全威胁的不可信任网络。

接口:`
接口是流量进出安全域的通道,接口必须绑定到某个安全域才能工作。默认情况下,接口都不能互相访问,只有通过策略规则,才能允许流量在接口之间传输。

虚拟交换机(VSwitch):
具有交换机功能。VSwitch工作在二层,将二层安全域绑定到VSwitch上后,绑定到安全域的接口也被绑定到该VSwitch上。一个VSwitch就是一个二层转发域,每个VSwitch都有自己独立的MAC地址表,因此设备的二层转发在VSwitch中实现。并且,流量可以通过VSwitch接口,实现二层与三层之间的转发。

虚拟路由器(VRouter):简称为VR。
VRouter具有路由器功能,不同VR拥有各自独立的路由表。
系统中有一个默认VR,名为trust-vr,默认情况下,所有三层安全域都将会自动绑定到trust-vr上。系统支持多VR功能且不同硬件平台支持的最大VR数不同。多VR将设备划分成多个虚拟路由器,每个虚拟路由器使用和维护各自完全独立的路由表,此时一台设备可以充当多台路由器使用。多VR使设备能够实现不同路由域的地址隔离与不同VR间的地址重叠,同时能够在一定程度上避免路由泄露,增加网络的路由安全。

策略

策略是设备的基本功能,控制安全域间/不同地址段间的流量转发。默认情况下,设备会拒绝设备上所有安全域/接口/地址段之间的信息传输。策略规则(Policy Rule)决定从安全域到另一个安全域,或从一个地址段到另一个地址段的哪些流量该被允许,哪些流量该被拒绝。

绑定关系:

StoneOS系统的架构中,安全域、接口、虚拟路由器和虚拟交换机之间具有从属关系,也称为“绑定关系”。 接口绑定到安全域,安全域绑定到VSwitch或VRouter,进而,接口也就绑定到了某个VSwitch或VRouter。一个接口只能绑定到一个安全域上,一个安全域可以绑定多个接口。二层安全域只能绑定到VSwitch上,三层安全域只能绑定到VRouter上。

安全策略规则

默认情况下,所有的接口之间的流量都是拒绝的。不同的安全域之间、相同的安全域之内的接口流量均不能互访。要实现接口的互访,只有通过创建策略规则,才能将流量放行。 如果既有从源到目的的访问,又有反方向的主动访问,那么就要创建两条策略规则,允许双方向的流量通过;如果只有单方向的主动访问,而反方向只回包即可,那么只需要创建源到目的的一条单方向的策略。

根据接口所属的安全域、VSwtich或VRouter的不同,要创建不同的策略才能允许接口互访,具体的规则如下:

1、属于同一个安全域的两个接口实现互访:
需要创建一条源和目的均为该安全域的策略。
例如,要实现上图中的eth0/0与eth0/1的互访,需要创建从L3-zone1到L3-zone1的允许流量通过的策略;或者,要实现eth0/3与eth0/4的互访,要创建源和目的均为L2-zone2的策略。

2、两个二层接口所在的安全域属于同一VSwitch,实现接口互访:
需要创建两条策略,第一条策略允许从一个安全域到另一个安全域流量放行,第二条策略允许反方向的流量通过。
例如,要实现上图中的eth0/2与eth0/3的互访,需要创建从L2-zone1到L2-zone2的策略和L2-zone2到L2-zone1这两条策略。

3、两个二层接口所在的安全域属于不同的VSwtich的,实现接口互访:
每个VSwtich都具有唯一的一个VSwtich接口(VSwitchIF),该VSwtichIF与某个三层安全域绑定。要实现互访,需要创建放行策略,源是一个VswichIF所属的三层安全域,目的是另一个VSwtichIF所属的三层安全域。同时,还需要创建反方向的策略。

4、两个三层接口所在的安全域属于同一VRouter,实现接口互访:
需要创建策略允许从一个安全域到另一个安全域的流量放行。例如,要实现eth0/0和eth0/5的互访,要创建从L3-zone1到L3-zone2的允许流量通过的策略,然后再创建反方向的策略。

5、两个三层接口所在的安全域从属于不同的VRouter的,实现接口互访:
若要实现接口互访,需要创建策略规则,允许从一个VRouter到另一个VRouter之间的流量放行。

6、同一VRouter下的二层接口和三层接口,实现互访
创建允许流量通过的策略,策略的源是二层接口的VSwtichIF所绑定的三层安全域,策略的目的是三层接口所属的三层安全域。然后,再创建反向策略。
例如,要实现eth0/0与eth0/2的互访,需要创建从L3-zone1到L2-zone1的策略,以及反向策略。

二、数据包处理流程

1、二层转发域中的转发规则

在一个VSwitch,即一个二层转发域中,应用负载网关StoneOS通过源地址学习建立MAC地址转发表。每个VSwitch都有自己的MAC地址转发表。StoneOS根据数据包的类型(IP数据包、ARP包和非IP且非ARP包),分别进行不同的处理。

2、对于IP数据包,StoneOS遵循以下转发规则:
1)收到数据包。
2)学习源地址,更新MAC地址转发表。
3)如果目的MAC地址是单播地址,则根据目的MAC地址查找出接口。这时又有以下两种情况:
a)如果目的MAC地址为VSwitch接口的MAC地址,并且VSwitch接口有IP地址,则按照路由转发规则进行转发;
b)若VSwitch接口没有IP地址,则丢弃。
4)根据目的MAC地址找到出接口。如果找到的出接口是数据包的源接口,则丢弃该数据报,否则从出接口继续转发数据包。
5)如果在MAC地址表中没有找到出接口(未知单播),直接跳到第6步。
6)根据入接口和出接口确定源域和目的安全域。
7)查找策略规则。如果策略规则允许则转发数据包;如果策略规则不允许,则丢弃数据包。
8)如果在MAC地址转发表中没有找到出接口(未知单播),StoneOS则尝试将数据包发给VSwitch中的所有其它二层接口,此时的操作流程为:把其它的每一个二层接口做为出接口,二层接口所在的二层安全域作为目的域,查询策略规则,如果策略允许,则在该二层接口转发数据包,如果策略不允许,则丢弃数据包。概括地说,对未知单播的转发即为策略限制下的广播。对于广播和多播IP包的处理类似于对未知单播的处理,不同的是广播和多播IP包会被同时拷贝一份进行三层处理。
9)对于ARP包,广播包和未知单播包转发到VSwitch中的其它所有接口,同时,复制一份由ARP模块进行处理。

3、三层转发域的转发规则

1)识别数据包的逻辑入接口,可能是一般无标签接口,也可能是子接口。从而确定数据包的源安全域。
2)StoneOS对数据包进行合法性检查。如果源安全域配置了防护功能,系统会在这一步同时进行防护功能检查。
3)会话查询。如果该数据包属于某个已建立会话,则跳过4到10,直接进行第11步。
4)目的NAT(DNAT)操作。如果能够查找到相匹配的DNAT规则,则为包做DNAT标记。因为路由查询需要DNAT转换的IP地址,所以先进行DNAT操作。
说明:如果系统配置静态一对一BNAT规则,那么先查找匹配的BNAT规则。数据包匹配了BNAT规则之后,按照BNAT的设定进行处理,不再查找普通的DNAT规则。
5)路由查询。系统的路由查询顺序从前到后依次为:策略路由(PBR)> 源接口路由(SIBR)> 源路由(SBR)> 目的路由(DBR)> ISP路由。此时,系统得到了数据包的逻辑出接口和目的安全域。
6)源NAT(SNAT)操作。如果能够查找到相匹配的SNAT规则,则为包做SNAT标记。
说明:如果系统配置静态一对一BNAT规则,那么先查找匹配的BNAT规则。数据包匹配了BNAT规则之后,按照BNAT的设定进行处理,不再查找普通的DNAT规则。
7)下一跳VR查询。如果下一跳为VR,则继续查看指定的下一跳VR是否超出最大VR数限制(当前版本系统仅允许数据包最多通过3个VR),如果超过则丢弃数据包,如果未超过,返回4;如果下一跳不是VR,则继续进行下一步策略查询。
8)策略查询。系统根据数据包的源安全域、目的安全域、源IP地址和端口号、目的IP地址和端口号以及协议,查找策略规则。如果找不到匹配的策略规则,则丢弃数据包;如果找到匹配的策略规则,则根据规则指定的行为进行处理,分别是:

允许(Permit):允许数据包通过。
拒绝(Deny):拒绝数据包通过。
隧道(Tunnel):将数据包转发到指定的隧道。
是否来自隧道(Fromtunnel):检查数据包是否来自指定的隧道,如果是,则允许通过,如果不是,则丢弃。
Web认证(WebAuth):对符合条件的流量进行Web认证。
9)第一次应用类型识别。系统根据策略规则中配置的端口号和服务,尝试识别应用类型。
10)会话建立。
如果需要,进行第二次应用类型识别。根据数据包的内容和流量行为再次对应用类型进行精确识别。
11)应用层行为(ALG)控制。为特定的复杂协议实施自适应处理。
12)根据会话中记录的信息,例如NAT标记等,执行相应的处理操作。
13)将数据包转发到出接口。