1.1 什么是防火墙
防火墙,顾名思义,阻挡的是火,这一名词起源于建筑领域,其作用是隔离火灾,阻止火势从一个区域蔓延到另一个区域。
引入到通信领域,防火墙也形象化地体现了这一特点:防火墙这一具体的网络设备,通常用于两个网络之间的隔离。当然,这种隔离是高明的,隔离的是“火”的蔓延,而又保证“人”能穿墙而过。这里的“火”是指网络中的各种攻击,而“人”是指正常的通信报文。
那么,用通信语言来定义,防火墙主要用于保护一个网络免受来自另一个网络的攻击和入侵行为。因其隔离、防守的属性,防火墙灵活应用于网络边界、子网隔离等位置,如企业网络出口、大型网络内部子网隔离、数据中心边界等,如图所示。
1.2 防火墙的发展历史
从防火墙的发展历史中我们可以看到以下3个最主要的特点。
- 第一点是防火墙的访问控制越来越精确。从最初的简单访问控制,到基于会话的访问控制,再到下一代防火墙上基于用户、应用和内容来进行访问控制,都是为了实现更有效更精确的管控。
- 第二点是防火墙的防护能力越来越强。从早期的隔离功能,到逐渐增加了入侵检测、防病毒、URL过滤、应用程序控制、邮件过滤等功能,防护手段越来越多,防护的范围也越来越广。
- 第三点是防火墙的处理性能越来越高。随着网络中业务流量爆炸式增长,对防火墙性能的需求也越来越高。各个厂商不断地对防火墙的硬件和软件架构进行改进和完善,使防火墙的处理性能不断提高。
1.3华为防火墙产品一览
华为防火墙产品主要包括USG2000,USG5000,USG6000和USG9000四大系列,涵盖低、中、高端设备,型号齐全、功能丰富,完全能够满足各种网络环境的需求。
其中,USG2000和USG5000系列定位于UTM产品,USG6000系列属于下一代防火墙产品,USG9000系列属于高端防火墙产品。
1.4安全区域
防火墙主要部署在网络边界起到隔离的作用,那么在防火墙上如何来区分不同的网络呢?
为此,我们在防火墙上引入了一个重要的概念:安全区域(Security Zone),简称为区域(Zone),安全区域是一个或多个接口的集合,防火墙通过安全区域来划分网络、标识报文流动的“路线”。一般来说,当报文在不同的安全区域之间流动时才会受到控制。
我们都知道,防火墙通过接口来连接网络,将接口划分到安全区域后,通过接口就能把安全区域和网络关联起来。通常说某个安全区域,也可以表示该安全区域中接口所连接的网络。接口、网络和安全区域的关系如图所示。
在华为防火墙上,一个接口只能加入到一个安全区域中。
华为防火墙上已经默认为大家提供三个安全区域,分别是Trust、DMZ和Untrust。
光从名字看就知道这三个安全区域很有内涵。
- Trust区域
该区域内网络的受信任程度高,通常用来定义内部用户所在的网络。
- DMZ区域
该区域内网络的受信任程度中等,通常用来定义内部服务器所在的网络。
- Untrust区
该区域代表的是不受信任的网络,通常用来定义Internet等不安全的网络。
防火墙上提供Local区域,代表防火墙本身。凡是由防火墙主动发出的报文均可认为是从Local区域中发出,凡是需要防火墙响应并处理(而不是转发)的报文均可认为是由Local区域接收。
关于Local区域,还要再提醒一句,Local区域中不能添加任何接口,但防火墙上所有接口本身都隐含属于Local区域。也就是说,报文通过接口去往某个网络时,目的安全区域是该接口所在的安全区域;报文通过接口到达防火墙本身时,目的安全区域是Local区域。这样既可以使每个接口连接的其他设备能够访问防火墙自身,也能更明确Local区域和各个安全区域的域间关系,可谓一举两得。
Local区域的安全级别是100,Trust区域的安全级别是85,DMZ区域的安全级别是50,Untrust区域的安全级别是5
报文从低级别的安全区域向高级别的安全区域流动时为入方向(Inbound),报文从由高级别的安全区域向低级别的安全区域流动时为出方向(Outbound)
新创建的安全区域是没有安全级别的,我们必须为其设置安全级别,然后才能将接口加入安全区域。当然,鉴于安全级别的唯一性,设置的安全级别不能和已经存在的安全区域的级别相同。
[FW]firewall zone name test //创建安全区域test
[FW-zone-test]set priority 10 //将安全级别设置为10
[FW-zone-test]add interface GigabitEthernet 0/0/1 //将接口GEO/0/1加入安全区域
除了物理接口,防火墙还支持逻辑接口,如子接口、VLANIF接口等,这些逻辑接口在使用时也需要加入安全区域。
1.5 状态检测和会话机制
PC和Web服务器位于不同的网络,分别与防火墙相连,PC与Web服务器之间的通信受到防火墙的控制。
在这条规则中,源端口处的ANY表示任意端口,这是因为PC在访问Web服务器时,它的操作系统决定了所使用的源端口。例如,对于Windows操作系统来说,这个值可能是1024~65535范围内任意的一个端口。这个值是不确定的,所以这里设定为任意端口。
配置了这条规则后,PC发出的报文就可以顺利通过防火墙,到达Web服务器。然后Web服务器将会向PC发送回应报文,这个报文也要穿过防火墙才能到达PC。在状态检测防火墙出现之前,包过滤防火墙上还必须配置表所示的编号为2的规则,允许反方向的报文通过。
在规则2中,目的端口也设定为任意端口,因为我们无法确定PC访问Web服务器时使用的源端口,要想使Web服务器回应的报文都能顺利穿过防火墙到达PC,只能将规则2中的目的端口设定为任意端口。
如果PC位于受保护的网络中,这样处理将会带来很大的安全问题。规则2将去往PC的目的端口全部开放,外部的恶意攻击者伪装成Web服务器,就可以畅通无阻地穿过防火墙,PC将会面临严重的安全风险。
接下来让我们看一下状态检测防火墙怎么解决这个问题。还是以上面的网络环境为例,首先我们还是需要在防火墙上设定规则1,允许PC访问Web服务器的报文通过。当报文到达防火墙后,防火墙允许报文通过,同时还会针对PC访问Web服务器的这个行为建立会话(Session),会话中包含PC发出的报文信息如地址和端口等。
当Web服务器回应给PC的报文到达防火墙后,防火墙会把报文中的信息与会话中的信息进行比对。如果发现报文中的信息与会话中的息相配,并且文符合HTTP协议规范的规定,则认为这个报文属于PC访问Web服务器行为的后续回应报文,直接允许这个报文通过,如图所示。
总结一下,在状态检测防火墙出现之前,包过滤防火墙只根据设定好的静态规则来判断是否允许报文通过,它认为报文都是无状态的孤立个体,不关注报文产生的前因后果。这就要求包过滤防火墙必须针对每一个方向上的报文都配置一条规则,转发效率低下而且容易带来安全风险。
而状态检测防火墙的出现正好弥补了包过滤防火墙的这个缺陷。状态检测防火墙使用基于连接状态的检测机制,将通信双方之间交互的属于同一连接的所有报文都作为整体的数据流来对待。在状态检测防火墙看来,同一个数据流内的报文不再是孤立的个体,而是存在联系的。例如,为数据流的第一个报文建立会话,数据流内的后续报文就会直接匹配会话转发,不需要再进行规则的检查,提高了转发效率。
会话是通信双方建立的连接在防火墙上的具体体现,代表两者的连接状态,一条会话就表示通信双方的一个连接。防火墙上多条会话的集合就叫作会话表(Session table)。
http VPN:public -> public 192.168.0.1:2049-->172.16.0.1:80
源地址、源端口、目的地址、目的端口和协议这5个元素是会话的重要信息,我们将这5个元素称之为“五元组”。只要这5个元素相同的报文即可认为属于同一条流,在防火墙上通过这5个元素就可以唯一确定一条连接。
还有一些协议,它们的报文中没有端口信息,防火墙处理这些协议的报文时,如何生成会话表呢?比如ICMP协议,报文中不带端口信息,那么防火墙会把ICMP报文头中ID字段值作为ICMP会话的源端口,会以固定值2048作为ICMP会话的目的端口。
又比如后面我们会讲到IPSec中的AH(Authentication Header,认证头)协议和ESP
(Encapsulating Security Payload,封装安全载荷)协议,也不带有端口信息,防火墙会直接将这两个协议的会话中的源和目的端口都记录为0。
在防火墙上使用display firewall session table 令查看会话表的信息。
1.6状态检测和会话机制补遗
- Zone:表示报文在安全区域之间流动的方向。
- TTL:表示该条会话的老化时间,这个时间到期后,这条会话也将会被清除。
- Left:表示该条会话剩余的生存时间。
- Interface:表示报文的出接口,报文从这个接口发出。
- NextHop:表示报文去往的下一跳的IP地址
- MAC:表示报文去往的下一跳的MAC地址。
首先是会话的老化时间,即TTL。会话是动态生成的,但不是永远存在的。如果长时间没有报文匹配,则说明通信双方已经断开了连接,不再需要该条会话了。此时,为了节约系统资源,防火墙会在一段时间后删除会话。该时间称为会话的老化时间。
老化时间的取值非常重要,某种业务的会话老化时间过长,就会一直占用系统资源,有可能导致其他业务的会话不能正常建立;会话老化时间过短,有可能导致该业务的连接被防火墙强行中断,影响业务运行。华为防火墙已经针对不同的协议设置了相应的会话默认老化时间,比如ICMP的会话老化时间是20s,DNS的会话老化时间是30s等。
通常情况下采用这些默认值就可以保证各个协议正常运行,如果需要调整默认值,可以通过firewall session aging-time命令来设置。例如,将DNS的会话老化时间调整为10s
firewall session aging-time service-set dns 10
判断一个TCP连接的主要标志就是SYN报文,我们也把SYN报文称为TCP连接的首包。对于TCP协议,防火墙只有收到SYN报文并且配置的规则允许SYN报文通过才会建立会话,后续的TCP报文匹配会话直接转发。如果防火墙没有收到SYN报文,只收到了SYN+ACK或ACK等后续报文,是不会创建会话的,并且会将这些报文丢弃。
如图所示,内部网络访问外部网络的请求报文直接通过路由器到达外部网络,而外部网络的回应报文,先经过路由器转发到防火墙,由防火墙处理后再转发到路由器,最后由路由器发送到内部网络。也就是说,防火墙无法收到SYN报文,只收到了SYN+ACK报文。
这种通信双方交互的报文不同时经过防火墙的情况,叫作报文来回路经不一致。
在这种网络环境中,防火墙收到SYN+ACK报文后,由于没有相应的话,就会丢弃SYN+ACK报文,导致内部网络和外部网络之间的通信中断。这种情况下该怎么办呢?
关闭状态检测功能后,防火墙就不会对连接的状态进行分析了,相当于回到了包过滤防火墙的时代,后续报文只要规则(安全策略)允许其通过,就可以转发并建立会话了,这样就不会导致通信中断。
1.7配置注意事项和故障排除指导
安全区域
在防火墙上创建一个新的安全区域后,必须为该安全区域配置安全级别,否则无法将接口加入到安全区域中。
为安全区域配置安全级别的操作如下,安全级别全局唯一,不能和已经存在的安全区域的级别相同。
我们在使用安全区域的时候,最容易出现的问题就是忘记把接口加入安全区域。由于接口没有加入安全区域,防火墙在转发报文的时候无法判断报文的路线,无法确定域间关系,最终导致防火墙将报文丢弃,业务不通。
此时,我们可以使用display zone命令来查看防火墙上安全区域的配置情况以及接口加入安全区域的情况,检查我们用到的接口是否加入安全区域。
另外,业务不通时,我们还可以从丢包这个角度来排除故障。使用display firewall statistic system discard命令查看防火墙的丢包统计信息,如果发现如下信息,说明防火墙因为无法确认域间关系而丢包。
发表评论