防火墙作为一种网络安全产品,通过控制进出网络的流量,保护网络的安全。防火墙的基本原理是通过分析数据包,根据已有的策略规则,允许或阻断数据流量。除此之外,防火墙也具有连通网络的功能,实现安全可信区域(内部网络)和不信任区域(外部网络)之间的桥接。
应用负载网关是山石网科面向电信运营商、广电市场、院校和大中型企业开发的负载均衡产品,能够使负载分担、安全与网络深度融合。用户可以将其部署在多ISP链路的出口,通过对链路状态的检测,采用对应的调度算法将数据合理、动态的分发到不同链路上,以提高链路利用率。
StoneOS 应用负载网关系统架构
组成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的不同,要创建不同的策略才能允许接口互访,具体的规则如下:
- 属于同一个安全域的两个接口实现互访:
需要创建一条源和目的均为该安全域的策略。
例如,要实现上图中的eth0/0与eth0/1的互访,需要创建从L3-zone1到L3-zone1的允许流量通过的策略;或者,要实现eth0/3与eth0/4的互访,要创建源和目的均为L2-zone2的策略。 - 两个二层接口所在的安全域属于同一VSwitch,实现接口互访:
需要创建两条策略,第一条策略允许从一个安全域到另一个安全域流量放行,第二条策略允许反方向的流量通过。
例如,要实现上图中的eth0/2与eth0/3的互访,需要创建从L2-zone1到L2-zone2的策略和L2-zone2到L2-zone1这两条策略。 - 两个二层接口所在的安全域属于不同的VSwtich的,实现接口互访:
每个VSwtich都具有唯一的一个VSwtich接口(VSwitchIF),该VSwtichIF与某个三层安全域绑定。要实现互访,需要创建放行策略,源是一个VswichIF所属的三层安全域,目的是另一个VSwtichIF所属的三层安全域。同时,还需要创建反方向的策略。 - 两个三层接口所在的安全域属于同一VRouter,实现接口互访:
需要创建策略允许从一个安全域到另一个安全域的流量放行。例如,要实现eth0/0和eth0/5的互访,要创建从L3-zone1到L3-zone2的允许流量通过的策略,然后再创建反方向的策略。 - 两个三层接口所在的安全域从属于不同的VRouter的,实现接口互访:
若要实现接口互访,需要创建策略规则,允许从一个VRouter到另一个VRouter之间的流量放行。 - 同一VRouter下的二层接口和三层接口,实现互访:
创建允许流量通过的策略,策略的源是二层接口的VSwtichIF所绑定的三层安全域,策略的目的是三层接口所属的三层安全域。然后,再创建反向策略。
例如,要实现eth0/0与eth0/2的互访,需要创建从L3-zone1到L2-zone1的策略,以及反向策略。
数据包处理流程
二层转发域中的转发规则
在一个VSwitch,即一个二层转发域中,应用负载网关StoneOS通过源地址学习建立MAC地址转发表。每个VSwitch都有自己的MAC地址转发表。StoneOS根据数据包的类型(IP数据包、ARP包和非IP且非ARP包),分别进行不同的处理。
对于IP数据包,StoneOS遵循以下转发规则:
- 收到数据包。
- 学习源地址,更新MAC地址转发表。
- 如果目的MAC地址是单播地址,则根据目的MAC地址查找出接口。这时又有以下两种情况:
- 如果目的MAC地址为VSwitch接口的MAC地址,并且VSwitch接口有IP地址,则按照路由转发规则进行转发;若VSwitch接口没有IP地址,则丢弃。
- 根据目的MAC地址找到出接口。如果找到的出接口是数据包的源接口,则丢弃该数据报,否则从出接口继续转发数据包。
- 如果在MAC地址表中没有找到出接口(未知单播),直接跳到第6步。
- 根据入接口和出接口确定源域和目的安全域。
- 查找策略规则。如果策略规则允许则转发数据包;如果策略规则不允许,则丢弃数据包。
- 如果在MAC地址转发表中没有找到出接口(未知单播),StoneOS则尝试将数据包发给VSwitch中的所有其它二层接口,此时的操作流程为:把其它的每一个二层接口做为出接口,二层接口所在的二层安全域作为目的域,查询策略规则,如果策略允许,则在该二层接口转发数据包,如果策略不允许,则丢弃数据包。概括地说,对未知单播的转发即为策略限制下的广播。对于广播和多播IP包的处理类似于对未知单播的处理,不同的是广播和多播IP包会被同时拷贝一份进行三层处理。
对于ARP包,广播包和未知单播包转发到VSwitch中的其它所有接口,同时,复制一份由ARP模块进行处理。
三层转发域的转发规则
- 识别数据包的逻辑入接口,可能是一般无标签接口,也可能是子接口。从而确定数据包的源安全域。
- StoneOS对数据包进行合法性检查。如果源安全域配置了攻击防护功能,系统会在这一步同时进行攻击防护功能检查。
- 会话查询。如果该数据包属于某个已建立会话,则跳过4到10,直接进行第11步。
- 目的NAT(DNAT)操作。如果能够查找到相匹配的DNAT规则,则为包做DNAT标记。因为路由查询需要DNAT转换的IP地址,所以先进行DNAT操作。
*说明:如果系统配置静态一对一BNAT规则,那么先查找匹配的BNAT规则。数据包匹配了BNAT规则之后,按照BNAT的设定进行处理,不再查找普通的DNAT规则。 - 路由查询。系统的路由查询顺序从前到后依次为:策略路由(PBR)> 源接口路由(SIBR)> 源路由(SBR)> 目的路由(DBR)> ISP路由。此时,系统得到了数据包的逻辑出接口和目的安全域。
- 源NAT(SNAT)操作。如果能够查找到相匹配的SNAT规则,则为包做SNAT标记。
*说明:如果系统配置静态一对一BNAT规则,那么先查找匹配的BNAT规则。数据包匹配了BNAT规则之后,按照BNAT的设定进行处理,不再查找普通的DNAT规则。 - 下一跳VR查询。如果下一跳为VR,则继续查看指定的下一跳VR是否超出最大VR数限制(当前版本系统仅允许数据包最多通过3个VR),如果超过则丢弃数据包,如果未超过,返回4;如果下一跳不是VR,则继续进行下一步策略查询。
- 策略查询。系统根据数据包的源安全域、目的安全域、源IP地址和端口号、目的IP地址和端口号以及协议,查找策略规则。如果找不到匹配的策略规则,则丢弃数据包;如果找到匹配的策略规则,则根据规则指定的行为进行处理,分别是:
- 允许(Permit):允许数据包通过。
- 拒绝(Deny):拒绝数据包通过。
- 隧道(Tunnel):将数据包转发到指定的隧道。
- 是否来自隧道(Fromtunnel):检查数据包是否来自指定的隧道,如果是,则允许通过,如果不是,则丢弃。
- Web认证(WebAuth):对符合条件的流量进行Web认证。
- 第一次应用类型识别。系统根据策略规则中配置的端口号和服务,尝试识别应用类型。
- 会话建立。
- 如果需要,进行第二次应用类型识别。根据数据包的内容和流量行为再次对应用类型进行精确识别。
- 应用层行为(ALG)控制。为特定的复杂协议实施自适应处理。
- 根据会话中记录的信息,例如NAT标记等,执行相应的处理操作。
- 将数据包转发到出接口。