山石防火墙工作原理

防火墙作为一种网络安全产品,通过控制进出网络的流量,保护网络的安全。防火墙的基本原理是通过分析数据包,根据已有的策略规则,允许或阻断数据流量。除此之外,防火墙也具有连通网络的功能,实现安全可信区域(内部网络)和不信任区域(外部网络)之间的桥接。

应用负载网关是山石网科面向电信运营商、广电市场、院校和大中型企业开发的负载均衡产品,能够使负载分担、安全与网络深度融合。用户可以将其部署在多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系统的架构中,安全域、接口、虚拟路由器和虚拟交换机之间具有从属关系,也称为“绑定关系”。

null

各个元素之间的关系为:接口绑定到安全域,安全域绑定到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遵循以下转发规则:

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

对于ARP包,广播包和未知单播包转发到VSwitch中的其它所有接口,同时,复制一份由ARP模块进行处理。

三层转发域的转发规则

null
  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认证。
  1. 第一次应用类型识别。系统根据策略规则中配置的端口号和服务,尝试识别应用类型。
  2. 会话建立。
  3. 如果需要,进行第二次应用类型识别。根据数据包的内容和流量行为再次对应用类型进行精确识别。
  4. 应用层行为(ALG)控制。为特定的复杂协议实施自适应处理。
  5. 根据会话中记录的信息,例如NAT标记等,执行相应的处理操作。
  6. 将数据包转发到出接口。