1.1 安全策略基础知识
本节首先介绍安全策略的组成和配置方式;然后说明安全策略的匹配规则,同时引出默认策略的概念,澄清本地安全策略与接口访问控制的关系;最后,给出安全策略的基本配置原则。
1.1.1 安全策略的组成
每一条安全策略都是由匹配条件和动作组成的,安全策略的组成如图1-1所示。防火墙接收到报文以后,将报文的属性与安全策略的匹配条件进行匹配。如果所有条件都匹配,则此报文成功匹配安全策略,防火墙按照该安全策略的动作处理这个报文及其后续双向流量。因此,安全策略的核心元素是匹配条件和动作。

图1-1 安全策略的组成
1. 匹配条件
安全策略的匹配条件描述了流量的特征,用于筛选出符合条件的流量。安全策略的匹配条件包括以下要素。
Who: 谁发出的流量,即用户。在Agile Controller单点登录场景下,还可以指定用户的接入方式、用户使用的终端设备类型。
Where: 流量的来源和目的。包括源/目的安全区域、源/目的IP(Internet Protocol,互联网协议)地址、源/目的地区和VLAN(Virtual Local Area Network,虚拟专用网)。
What: 访问的服务、应用或者URL(Uniform Resource Locator,统一资源定位符)分类。
When: 即时间段。在安全策略中指定时间段,可以控制安全策略的生效时间,进而根据时间指定不同的动作。
以上匹配条件,在一条安全策略中都是可选配置;但是一旦配置了,就必须全部符合才认为匹配,即这些匹配条件之间是“与”的关系。一个匹配条件中如果配置了多个值,多个值之间是“或”的关系,只要流量匹配了其中任意一个值,就认为匹配了这个条件。
一条安全策略中的匹配条件越具体,其所描述的流量越精确。用户可以只使用五元组(源/目的IP地址、源/目的端口、协议)作为匹配条件,也可以利用防火墙的应用识别、用户识别能力,更精确、更方便地配置安全策略。防火墙使用“对象”来定义各种匹配条件,关于如何在安全策略中使用对象, 请参考第1.3节 。
2. 动作
安全策略的基本动作有两个:允许和禁止,即是否允许流量通过。
如果动作为允许,可以对符合此策略的流量执行进一步的内容安全检查。华为防火墙的内容安全检查功能包括反病毒、入侵防御、URL过滤、文件过滤、内容过滤、应用行为控制、邮件过滤、APT(Advanced Persistent Threat,高级持续性威胁)防御、DNS(Domain Name Service,域名服务)过滤等。每项内容安全检查都有各自的适用场景和处理动作。防火墙如何处理流量,由所有内容安全检查的结果共同决定。
如果动作为禁止,可以选择向服务器或客户端发送反馈报文,快速结束会话,减少系统资源消耗。
用户、终端设备、时间段、源/目的IP地址、源/目的地区、服务、应用、URL分类等匹配条件,在防火墙上都以对象的形式存在。用户可以先创建对象,然后在多个安全策略中引用, 具体方法请参考第1.3节 。
3. 策略标识
为了便于管理,安全策略还提供了如下属性。
名称: 用于唯一标识一条安全策略,不可重复。为每一条安全策略指定一个有意义的名称(如安全策略的目的),能提高维护工作效率。
描述: 用于记录安全策略的其他相关信息。例如,可以在这个字段记录触发此安全策略的申请流程序号。这样,在例行审计时可以快速了解安全策略的背景,比如什么时间引入此安全策略,谁提出的申请,其有效期为多久,等等。
策略组: 把相同目的的多条安全策略加入一个策略组中,从而简化管理。可以移动策略组,启用/禁用策略组等。
标签: 标签是安全策略的另一种标识方式,用户可以给一条安全策略添加多个标签,通过标签可以筛选出具有相同特征的策略。例如,用户可以根据安全策略适用的应用类型,添加高风险应用、公司应用等标签。在为安全策略设置标签时,建议使用固定的前缀,如用“SP_”代表安全策略,并用颜色区分不同的动作。这会使标签更容易理解。
1.1.2 安全策略的配置方式
华为防火墙提供了多种配置方式,用户可以选择命令行、Web界面或者北向接口来配置安全策略。接下来,本书将以一个实例来展示最常用的Web界面和命令行配置。
如图1-2所示,为了保证trust区域内的192.168.1.0/24和192.168.2.0/24网段的设备能够正常上网,需要创建一条表1-1所示的安全策略。

图1-2 安全策略的配置示例
表1-1 安全策略示例

使用Web界面配置安全策略如图1-3所示。

图1-3 配置安全策略的界面
使用命令行配置安全策略如下。
<sysname> system-view [sysname] security-policy [sysname-policy-security] rule name "Allow access to the Internet" [sysname-policy-security-rule-Allow access to the Internet] source-zone trust [sysname-policy-security-rule-Allow access to the Internet] destination zone untrust [sysname-policy-security-rule-Allow access to the Internet] source-address 192.168.1.0 mask 24 [sysname-policy-security-rule-Allow access to the Internet] source-address 192.168.2.0 mask 24 [sysname-policy-security-rule-Allow access to the Internet] service http https [sysname-policy-security-rule-Allow access to the Internet] action permit [sysname-policy-security-rule-Allow access to the Internet] quit [sysname-policy-security]
1.1.3 状态检测与会话机制
前面介绍了安全策略的组成和配置方式,那么到达防火墙的流量是如何跟安全策略匹配的呢?在介绍匹配规则之前,我们首先介绍一下防火墙的状态检测和会话机制。
早期包过滤防火墙产品采取的是“逐包检测”机制,即对防火墙收到的所有报文都根据包过滤规则逐一检查,以决定是否放行该报文。如图1-4所示,PC(Personal Computer,个人计算机)和Web服务器分别位于防火墙的两侧,其通信由防火墙控制。我们希望PC可以访问Web服务器。

图1-4 PC访问Web服务器组网图
当PC向Web服务器发起访问时,防火墙上必须已经配置了序号为1的安全策略,允许符合此条件的报文通过防火墙。PC在访问Web服务器时使用的源端口可能是1024~65535范围内的任意一个端口。这个值是不确定的,所以这里设定为任意端口(any)。有了这条安全策略,PC发出的报文才能顺利通过防火墙,成功到达Web服务器。然后,Web服务器返回的响应报文也要穿过防火墙,才能到达PC。在包过滤防火墙上,用户还需要配置序号为2的安全策略,允许响应报文通过。同样的,由于PC的端口号是不确定的,这里的目的端口只能设置为任意端口。
这就意味着,序号为2的安全策略开放了PC的所有端口。攻击者只要伪装成Web服务器,就可以畅通无阻地穿过防火墙,访问PC上的任意服务。这必然带来极大的安全风险。此外,采用包过滤机制,防火墙要逐个检查每一个通过防火墙的报文,也严重影响了防火墙的转发效率。
为了解决这个问题,“状态检测防火墙”应运而生。我们仍以图1-4所示的组网为例,来看一下何谓“状态检测”。首先,我们还是要在防火墙上配置序号为1的安全策略,允许PC访问Web服务器,当PC访问Web服务器的报文到达防火墙时,防火墙检测安全策略,允许该报文通过。其次,防火墙为本次访问建立一个会话,会话中包含了本次访问的源/目的IP地址和源/目的端口等信息。会话是通信双方建立的连接在防火墙上的具体体现,代表双方的连接状态,一个会话就表示通信双方的一个连接。防火墙上多个会话的集合就是 会话表 (session table)。
[sysname] display firewall session table
Current Total Sessions : 1
http VPN:public --> public 10.1.1.10:2049-->10.1.2.10:80
从上面的会话表中,我们可以清楚地看到,防火墙上有一条HTTP(Hypertext Transfer Protocol,超文本传送协议)会话,会话的源IP地址为10.1.1.10,源端口为2049,目的IP地址为10.1.2.10,目的端口为80。源地址、源端口、目的地址、目的端口和协议这5个元素是会话的重要信息,我们将这5个元素称为“ 五元组 ”。这5个元素相同的报文即可被认为属于同一条流,在防火墙上通过这5个元素就可以唯一确定一条连接。
当Web服务器回复给PC的响应报文到达防火墙时,防火墙会把响应报文中的信息与会话中的信息进行比对。如果响应报文中的信息与会话中的信息相匹配,并且该报文符合HTTP规范的规定,就认为这个报文属于PC访问Web服务器行为的后续报文,直接允许这个报文通过。PC和Web服务器之间的后续报文都将匹配会话表转发,不再匹配安全策略。
采用状态检测机制以后,我们只需要为业务请求的发起方向配置安全策略,就不需要图1-4中序号为2的安全策略了。当攻击者伪装成Web服务器向PC发起访问时,攻击者发出的报文不属于PC访问Web服务器行为的响应报文,无法匹配会话表。同时防火墙上也没有开放Web服务器访问PC方向的安全策略,防火墙不会允许这些报文通过。这样,既保证了PC可以正常访问Web服务器,也避免了大范围开放端口带来的安全风险。
状态检测防火墙使用基于连接状态的检测机制,将通信双方之间交互的属于同一连接的所有报文都作为整体的数据流来对待。 在状态检测防火墙看来,同一个数据流内的报文不再是孤立的个体,而是存在联系的。为数据流的第一个报文建立会话,数据流内的后续报文直接匹配会话转发,不需要再检查安全策略。这种机制极大地提升了安全性和防火墙的转发效率。
会话表是防火墙转发报文的重要依据,会话表中记录的信息也是定位防火墙转发问题的重要参考。在查看会话表的命令中使用verbose参数,可以看到会话的更多信息。
<sysname> display firewall session table verbose Current total sessions: 1 HTTP VPN: public --> public ID: a387f35dc86d0ca3624361940b0 Zone: trust --> untrust Slot: 11 CPU: 0 TTL: 00:15:00 Left: 00:14:51 Recv Interface: XGigabitEthernet0/0/3 Rev Slot: 12 CPU: 0 Interface: XGigabitEthernet0/0/4 NextHop: 10.1.2.1 <--packets: 30003 bytes: 4,488,438 --> packets: 15098 bytes: 3,113,948 10.1.1.10:2049 --> 10.1.2.10:80 PolicyName: No1 TCP State: fin-1
会话表中记录的关键信息如表1-2所示。
表1-2 会话表信息详解

上述信息中有两个重点信息需要说明一下,首先是会话的老化时间,即TTL。会话是动态生成的,但不是永远存在的。如果长时间没有报文匹配,就说明通信双方已经断开了连接,不再需要这个会话了。此时,为了节约系统资源,防火墙会在一段时间后删除会话,该时间被称为会话的老化时间。
老化时间的取值非常重要。如果某种业务会话的老化时间过长,就会一直占用系统资源,有可能导致其他业务的会话不能正常建立;会话的老化时间过短,有可能导致该业务的连接被防火墙强行中断,影响业务运行。华为防火墙已经针对不同的协议,设置了默认的老化时间,如ICMP(Internet Control Message Protocol,互联网控制报文协议)会话的老化时间是20秒,DNS会话的老化时间是30秒等。通常情况下采用这些默认值就可以保证各个协议正常运行。如果需要调整默认值,可以通过 firewall session aging-time 命令来设置。例如,将DNS会话的老化时间调整为20秒。
[sysname] firewall session aging-time service-set dns 20
其次是报文统计信息,会话中“←”和“→”这两个方向上的报文统计信息非常重要,可以帮助我们定位网络故障。通常情况下,如果我们查看会话时发现只有“→”方向有报文的统计信息,“←”方向上的统计信息都是0,那就说明PC发往Web服务器的报文顺利通过了防火墙,而Web服务器回应给PC的报文没有通过防火墙,双方的通信是不正常的。有可能是防火墙丢弃了Web服务器回应给PC的报文,防火墙与Web服务器之间的网络出现故障,或者Web服务器本身出现故障。这样我们就缩小了故障的范围,有利于快速定位故障。
1.1.4 匹配规则与默认策略
通常,防火墙上会配置大量的安全策略。那么,防火墙收到报文时是如何匹配的呢?防火墙接收到业务发起方的第一个报文后,按照安全策略列表的顺序,从上向下依次匹配。一旦某一条安全策略匹配成功,则停止匹配。防火墙按照该安全策略指定的动作处理流量,并使用会话表记录该条流量的连接状态。该流量的后续报文直接根据会话表来处理。
假设客户端访问服务器的首包到达防火墙时,按照安全策略列表顺序匹配,命中ID为3的安全策略,如图1-5所示。防火墙停止策略匹配流程,根据该安全策略指定的动作,放行首包,同时建立会话表,记录会话状态。服务器收到首包以后,返回给客户端的响应报文到达防火墙,首先查找和匹配会话表,根据会话表转发。

图1-5 安全策略的匹配规则
防火墙出厂时就存在一条显式的默认策略“default”,默认禁止所有的域间流量。默认策略永远位于策略列表的最底端,且不可删除。用户创建的安全策略,按照创建顺序从上往下排列,新创建的安全策略默认位于策略列表底部,默认策略之前。如果流量跟所有手工创建的安全策略都不匹配,必将命中默认策略,防火墙根据默认策略阻断流量。
基于防火墙的安全策略匹配规则以及默认策略的设计,我们知道:安全策略的顺序至关重要,在创建安全策略之后,还要根据业务需要手动调整安全策略的顺序,以保证策略匹配结果符合预期;建议保持默认策略的动作为禁止,不要修改,默认策略的目的是保证所有未明确允许的流量都被禁止,这是防火墙作为一个安全产品所遵循的基本设计理念。
例如,安全策略列表中已经有一条名为“Block high-risk ports”的101号安全策略,阻断了所有高风险服务。现在,用户要为来自trust区域的管理终端访问位于DMZ(Demilitarized Zone,非军事区)的服务器开放RDP(Remote Desktop Protocol,远程桌面协议)的远程桌面服务,新增了一条名为“Allow RDP for admin”的201号安全策略,如表1-3所示。
表1-3 安全策略的顺序——新增配置后

因为101号安全策略完全包含了201号安全策略的匹配条件,按照安全策略的匹配规则,201号安全策略永远也不会被命中。来自trust区域的远程桌面访问命中101号安全策略,就按照其动作被阻断了。因此,新增201号安全策略之后,用户需要手动调整其顺序,把它放到101号安全策略前面,如表1-4所示。调整后安全策略的序号自动变化。
表1-4 安全策略的顺序——调整顺序后

1.1.5 本地安全策略和接口访问控制
防火墙作为一种安全产品,其基本设计理念就是管理网络中的业务,决定哪些流量可以通过,哪些不能通过。这里说的业务,也包括从防火墙发出的流量、访问防火墙的流量。针对这些流量的安全策略,其源安全区域或目的安全区域为local区域(代表防火墙自身),因此也叫本地安全策略。
如图1-6所示,从管理终端ping防火墙的接口地址,是访问防火墙的流量。从防火墙ping服务器的地址,属于从防火墙发出的流量。为它们开放的安全策略即为本地安全策略(表1-5中101号、102号策略)。为了对比,这里也提供了从管理终端ping服务器的安全策略(103号策略)。

图1-6 本地安全策略——以ping为例
表1-5 本地安全策略

为了使用ping功能定位网络问题,用户需要在防火墙上专门开放安全策略。这确实有一点复杂,但是安全。
为了简化管理,防火墙提供了常见管理协议的接口访问控制功能,用来替代101号安全策略这样的访问防火墙设备自身的安全策略。如果用户想ping防火墙的GE0/0/1接口,只需要在这个接口下启用接口访问控制功能,并指定允许的协议(ping)即可。
interface GigabitEthernet 0/0/1 ip address 10.1.1.1 255.255.255.0 service-manage enable //开启接口的访问控制功能 service-manage ping permit //允许通过ping访问此接口
默认情况下,防火墙带外管理的MGMT接口已经启用接口访问控制功能,并且允许通过HTTP、HTTPS(Hypertext Transfer Protocol Secure,超文本传送安全协议)、ping、SSH(Secure Shell,安全外壳)、Telnet、NETCONF(Network Configuration Protocol,网络配置协议)和SNMP(Simple Network Management Protocol,简单网络管理协议)访问防火墙。其他接口也启用了接口访问控制功能,但是未允许任何协议。
需要注意的是,接口访问控制功能优先于安全策略。举例来说,如果只启用了接口访问控制功能,而未允许通过ping访问此接口,即使配置了101号安全策略,也无法访问防火墙。如果启用了接口下的ping访问功能,不需要配置101号安全策略就可以访问防火墙了。因此,如果需要通过上述协议访问防火墙,用户有两个选择:选择接口访问控制,启用接口访问控制功能,并允许指定的协议;选择安全策略,关闭接口访问控制功能,为访问指定协议的流量开放精细的安全策略。
另外,如果想要从管理终端ping防火墙的GE0/0/2接口,也需要开启GE0/0/1接口的访问控制功能,因为流量是从GE0/0/1接口进入防火墙的。
1.1.6 安全策略的配置原则
在华为防火墙的实现中,并不是所有业务都需要开放安全策略。了解这些配置原则,有助于规避可能的问题。
安全策略仅控制单播报文,用户需要为所有合法的单播报文开放安全策略。 默认情况下,组播报文和广播报文不受防火墙的安全策略控制。防火墙直接转发组播报文和广播报文,不需要开放安全策略。
特别值得提醒的是,这个规则同样适用于常见的网络互连互通协议,包括BGP(Border Gateway Protocol,边界网关协议)、BFD(Bidirectional Forwarding Detection,双向转发检测)、DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)、DHCPv6、LDP(Label Distribution Protocol,标签分发协议)、OSPF(Open Shortest Path First,开放最短路径优先)。用户需要为它们的单播报文配置安全策略。这是防火墙与路由器和交换机最大的不同。如果想要快速接入网络,用户也可以使用 undo firewall packet-filter basic-protocol enable 命令取消这个策略。取消以后,上述协议的单播报文不受安全策略控制。
对于二层组播报文,用户也可以启用安全策略控制功能。 使用 firewall l2_multicast packet-filter enable 命令启用此功能以后,用户需要为二层组播报文(二层邻居发现组播报文除外)配置安全策略。
对于访问防火墙的管理协议,如果启用了接口访问控制,不需要配置安全策略。 接口访问控制适用于常见的管理协议,优先级高于安全策略, 具体请参阅第1.1.5节 。
对于多通道协议,比如FTP(File Transfer Protocol,文件传送协议),只需要为控制通道配置安全策略。 众所周知,多通道协议需要在控制通道中动态协商出数据通道的地址和端口,然后根据协商结果建立数据通道连接。用户需要为多通道协议启用ASPF(Application Specific Packet Filter,应用层包过滤)功能,防火墙从协商报文中记录地址和端口信息,生成Server-map表,并根据Server-map表转发报文。Server-map表相当于一个动态创建的安全策略。
华为防火墙是状态检测防火墙,用户只需要为报文发起方配置安全策略。 防火墙收到发起方的首包报文以后,执行安全策略检查,记录会话表。后续报文和回程报文只需要命中会话表即可通过,不再检查安全策略。如果通信双方都可能发起连接,用户需要为双向报文分别配置安全策略。
源地址和目的地址在同一个安全区域内的域内流量,默认不需要配置安全策略。 按照安全区域的设计理念,域内的设备具有相同的安全等级,域内流量默认直接转发,不需要安全检查。用户可以为某些域内(源/目的安全区域为同一个)流量配置安全策略,阻断特定的流量,或者为某些放行的流量添加内容安全检查。如果用户有更高的安全需求,也可以使用 default packet-filter intrazone enable 命令,让域内流量受默认安全策略控制。在这种情况下,需要为所有域内流量配置安全策略。
防火墙转发流程中跳过安全策略检查的业务,不需要配置安全策略。 例如,当防火墙配置了认证策略,且用户访问请求触发Portal认证时,不需要为Portal认证开放安全策略。再如,防火墙双机热备组网中,不用为两台防火墙之间的HRP(Huawei Redundancy Protocol,华为冗余协议)报文配置安全策略。
毋庸置疑的是,防火墙的安全性带来了一定的复杂性,而配置和管理的复杂性也会破坏安全性。用户需要熟悉并理解这些规则和配置开关,并根据自己的业务需求和安全需求,找到中间的平衡点。