学习防火墙之前,对路由交换应要有一定的认识
- 1、什么是防火墙
- 2、防火墙的发展史
- 3、安全区域
- 3.1.接口、网络和安全区域的关系
- 3.2.报文在安全区域之间流动方向
- 3.3.安全区域的配置
- 安全区域小实验
- 3.4.状态检测和会话机制
- 3.4.1.状态检测
- 3.4.2.会话
- 3.5.状态检测和会话机制补遗
- 3.5.1.再谈会话
- 3.5.2.状态检测和会话创建
- 来回路径不一致解析
- 3.6.注意事项
——————————————————————————————————————————————————
1、什么是防火墙
2013年9月,华为在企业网络大会发布了下一代防火墙USG6600,标志着华为进入新的历史发展阶段。
防火墙主要用户保护一个网络免受来自另一个网络的攻击和入侵行为,因其隔离、防守的属性,防火墙灵活用于网络边界、子网隔离等位置。路由器用来连接不同的网络,通过路由协议来保证互联互通,确保将报文转发到目的地。交换机通常用于组建局域网,作为局域网的重要枢纽,通过二三层交换机快速转发报文。防火墙主要部署在网络边界,对进出网络的访问行为进行控制,安全防护是其核心特性。
路由器和交换机本质是转发,防火墙本质是控制。
——————————————————————————————————————————————————
2、防火墙的发展史
第一代:1989年产生包过滤防火墙,实现简单的访问控制。
第二代:出现了代理防火墙,在应用层代理内部网络和外部网络之间的通信。安全性高,处理速度慢,对于每一种应用都要开发一个对应的应用代理服务,因此只能提供少量的代理支持。
第三代:1994年,Check Point公司发布了第一台基于状态检测技术的防火墙,通过动态分析报文状态决定对报文采取的动作。状态检测防火墙称为第三代防火墙。
在这个阶段,状态检测防火墙1995年-2004年,增加了一些如VPN等功能,同时专用设备出现了皱型,如WEB防火墙等设备。
2004年提出了UTM统一威胁管理概念,将防火墙、入侵检测、防病毒、URL过滤、应用程序控制、邮件过滤等功能融合在一台防火墙上,实现安全防护。
2004年UTM快速发展,但面临新问题,针对应用层的检测程度受到限制。如允许男人通过,拒绝女人通过,那么外星人如何通过?就需要更高级的检测手段,DPI深度报文检测技术得到了广泛应用。多个安全功能同时运行,性能严重下降。
2008年,Palo Alto Network发布下一代防火墙解决了同时运行性能下降问题,同时还基于用户、应用和内容来管控。
2009年后,Gartner对下一代防火墙进行了明确的定义,明确应具备的功能特性。
————————————————————
总结:
1、从最初的简单控制到基于会话控制,再到基于用户、应用和内容来控制,实现更精确的管控。
2、从早期的隔离,逐渐增加入侵检测、防病毒、URL过滤、应用程序控制、邮件过滤等,防护手段越来越多,范围越来越广。
3、处理性能越来越高。
——————————————————————————————————————————————————
3、安全区域
前面介绍了概念和发展史, 接下来说下最基本的防火墙安全区域。
——————————————————————————————————————————————————
3.1.接口、网络和安全区域的关系
前面提到过,防火墙部署在网络边界起到隔离作用,如何在防火墙区分不同网络?
为此在防火墙上引入了重要的概念:安全区域(Security Zone)。安全区域是一个或多个接口的集合。
防火墙通过安全区域来划分网络、标识报文流动的路线,一般来说,当报文在不同的安全区域之间流动时才会受到控制。
默认情况下,华为防火墙报文在不同的安全区域之间流动时受到控制,在同一安全区域内流动不受控制。同时也支持同一安全区域内流动的报文控制。
我们都知道,防火墙通过接口来连接网络,将接口划分到安全区域后,通过接口就能把安全区域和网络关联起来。通常说某个安全区域,也可以表示该安全区域中接口所连接的网络。
下图:接口、网络和安全区域的关系
在华为防火墙上,一个接口只能加入到一个安全区域中。
通过接口划分到不同的安全区域中,就可以在防火墙划分不同网络。下图中,G1/0/0、G1/0/1和G1/0/2接口划分为不同的安全区域,划分出3个安全区域,对应3个网络。
华为防火墙默认提供3个安全区域:Trust、Untrust、DMZ。
Trust区域: 网络的受信任程度高,通常用来定义内部用户所在的网络。
Untrust区域: 不受信任的网络。通常用来定义Internet等不安全的网络。
DMZ区域: 网络的受信任程度中,通常用来定义内部服务器所在的网络。
在网络数量少,简单环境中,默认提供的区域就可以满足网络划分。下图例如:内部网络用户访问Internet时,报文在防火墙的路线从Trust区域到Untrust区域;当Internet用户访问内部服务器时,报文在防火墙的路线为Untrust到DMZ区域。
除了在不同网络之间流动的报文之外,还存在从某个网络到达防火墙本身的报文,例如登录防火墙进行配置,以及防火墙本身发出的报文。如何标识这类报文的路线??
华为防火墙提供Local区域。代表防火墙本身,凡是由防火墙主动发出的报文均可认为是从Local区域发出。凡是需要防火墙进行响应并处理(而不是转发)的报文均可认为是从Local区域接收。
关于Local区域,该区域不能添加任何接口,但防火墙所有接口本身都隐含属于Local区域,也就是说,报文通过接口去往某个网络时,目的安全区域是该接口所在的安全区域;报文通过接口到达防火墙本身时,目的区域是Local区域。
——————————————————————————————————————————————————
3.2.报文在安全区域之间流动方向
用安全区域来表示网络后,怎么判断一个安全区域的受信程度?
在华为防火墙上,每个安全区域都必须有1个安全级别,唯一ID,用1-100数字表示,数字越大,越可信。默认的安全区域,安全级别是固定的。
Local安全级别100,Trust区域安全级别:85,DMZ:50,Untrust:5。
级别确定后,报文就被分成三六九等,高低有别。
华为防火墙规定:报文从低级别的安全区域向高级别的安全区域流动时为入方向(Inbound),报文从高级别区域向低级别区域流动时为出方向(Outbound)。
设置了安全级别,各个安全区域之间有了等级明确的域间关系,不同的安全区域代表不同的网络。为此基础防火墙就有了对各个网络之间流动的报文实施管控。
防火墙如何判断哪两个安全区域之间流动呢??
确定源安全区域很容易,防火墙从哪个接口接收报文,该接口所属的安全区域就是源安全区域。
路由模式下,防火墙通过查找路由表确定报文从哪个接口转发,该接口所属区域就是目的安全区域。
交换模式下,防火墙通过查找MAC地址表转发确定报文从哪个接口发出,该接口所属区域就是目的安全区域。
VPN场景中,防火墙收到封装报文,解封装后得到原始报文,通过查找路由表确定报文从哪个接口转发,该接口所属区域就是目的安全区域。
确定报文源和目的安全区域是精确配置安全策略的前提条件。
——————————————————————————————————————————————————
3.3.安全区域的配置
安全区域的配置主要包括:创建安全区域及接口加入到安全区域。
创建一个安全区域Ser01,将接口G1/0/0加入该安全区域。可以工作在路由模式也可以工作在交换模式。
命令很简单,注意新创建的安全区域没有安全级别,必须为其设置安全级别,然后才能加入端口。
[USG6000]firewall zone name Ser01 创建安全区域Ser01
[USG6000-zone-Ser01]set priority 10 将安全级别设置为10
[USG6000-zone-Ser01]add interface GigabitEthernet 1/0/0 将接口G1/0/0加入安全区域
华为防火墙支持物理接口加入安全区域,还支持逻辑接口,如:子接口、VLANIF接口等。
——————————————————————————————————————————————————
安全区域小实验
如图:PCA和PCB属于不同的子网,交换机通过创建两个VLAN将PCA和PCB所属子网隔离,交换机连接到防火墙G1/0/0接口。这种组网是典型的单臂环境。
这种情况,防火墙的一个接口连接两个子网,前面提到防火墙一个接口只能加入到一个安全区域。所以不能简单的把G1/0/0接口加入到某个区域,此时通过子接口或VLANIF接口来实现这个需求。
子接口实现:
在接口G1/0/0创建两个子接口G1/0/0.1和G1/0/0.2,分别对应VLAN10和VLAN20,然后将两个子接口划分到不同安全区域。
[USG6000]interface GigabitEthernet 1/0/0.1
[USG6000-GigabitEthernet1/0/0.1]vlan-type dot1q 10
[USG6000-GigabitEthernet1/0/0.1]ip address 192.168.10.254 24
[USG6000]interface GigabitEthernet 1/0/0.2
[USG6000-GigabitEthernet1/0/0.1]vlan-type dot1q 20
[USG6000-GigabitEthernet1/0/0.1]ip address 192.168.20.254 24
[USG6000]firewall zone name trust1
[USG6000-zone-trust1]set priority 10
[USG6000-zone-trust1]add interface GigabitEthernet 1/0/0.1
[USG6000]firewall zone name trust2
[USG6000-zone-trust1]set priority 20
[USG6000-zone-trust1]add interface GigabitEthernet 1/0/0.2
完成上述配置,PCA被划分到trust1区域,PCB划分到2区域,此时就可以对PCA和PCB报文进行控制。
VLANIF实现:
防火墙创建两个VLAN,配置VLANIF接口IP,配置G1/0/0接口工作在交换模式下(透明模式)。允许10和20VLAN报文通过。将VLAN10和VLAN20划分到不同的安全区域。
这里就不举例了,配置完,直接加入区域即可。。
——————————————————————————————————————————————————
3.4.状态检测和会话机制
前面提到的第三代防火墙,状态检测防火墙所使用的状态检测和会话机制,目前已经成为防火墙的基本功能,也是实现安全防护的基础技术。
——————————————————————————————————————————————————
3.4.1.状态检测
先从状态检测防火墙产生的背景说起。
看一个简单的环境。PC和Web位于不同的网络,分别与防火墙相连。PC和WEB通信受防火墙控制。
当PC需要访问Web服务器浏览网页,在防火墙上必须配置一条规则,允许PC访问Web服务器的报文通过,这里说的规则,指的是防火墙的安全策略。这条规则中,源端口any表示任意端口,这是操作系统决定了所使用端口,Windows来说的话,值可能是1024-65535范围任何一个端口。值不确定,所以设定为任意端口。配置了这条规则后,PC发出的报文可以顺利通过防火墙,到达Web服务器。
然后呢,Web服务器将会向PC发送回应报文,这个报文也要穿过防火墙到达PC。在状态检测防火墙出现之前,包过滤防火墙上还必须配置一条反方向的编号为2的规则,允许反方向通过。规则2中,目的端口设定为ANY端口,因为无法确定PC访问WEB所用的端口。
如果PC位于受保护的网络,这样处理会带来很大风险,去往PC的目的端口全开放,外部恶意攻击者伪装成WEB服务器,就可以畅通无阻的穿过防火墙,PC将会面临严重安全风险。
在状态检测防火墙中,还是需要设置规则1,当报文到达防火墙后,防火墙允许通过,同时针对PC访问Web服务器行为建立会话Session,会话中包含发出报文信息如地址和端口等。当Web服务器回应给PC到达防火墙后,防火墙会把报文中信息与会话信息对比。如果匹配,并且符合HTTP协议规范的规定,认为这个报文属于PC访问Web行为的后续报文,直接允许通过。
恶意攻击者,即使伪装成Web服务器向PC发起访问,由于这类报文不属于PC访问WEB服务器的行为的后续回应报文,防火墙不允许这些报文通过。这样既保证PC可以正常访问WEB,也避免大面积端口开放的带来的风险。
总结:
包过滤防火墙:报文都是孤立的个体,不关注报文的前因后果,根据设定的静态规则判断是否允许。这就要求必须针对每一个方向报文配置规则。转发效率低且安全风险大。
状态检测防火墙:基于连接状态检测机制,通信双方交互属于同一连接的所有报文都作为整体的数据流来对待。
——————————————————————————————————————————————————
3.4.2.会话
会话是通信双方建立的连接在防火墙的具体体现,代表两者的连接状态,一条会话表示通信双方的一个连接。多条会话的集合就叫会话表。
ICMP:表示协议
192.168.1.1:表示源地址,43377等等:表示源端口
192.168.1.254:表示目的地址,2048:表示目的端口
源地址、源端口、目的地址、目的端口和协议这5个元素组成会话的重要信息,称为:五元组。只要这5个元素相同的报文即可认为同一条流。
有一些协议,报文中没有端口信息,防火墙处理这些协议报文时,如何生成会话表?如上图,ICMP报文中不带端口信息的。防火墙会把ICMP报文头ID字段值作为ICMP会话源端口,以固定2048作为ICMP的会话目的端口。还有IPSec中的AH和ESP协议也不带端口信息。防火墙会直接把这两个协议会话中的源端口和目的端口都记录为0。
——————————————————————————————————————————————————
3.5.状态检测和会话机制补遗
上面说了状态检测工作原理,看过之后,防火墙的会话只包含五元组信息?会为哪些协议建立会话?状态检测功能在所有的网络环境都适用吗?
——————————————————————————————————————————————————
3.5.1.再谈会话
还是如图:PC、Web服务器与防火墙直连,接口加入区域,并且配置了PC允许WEB规则。
PC访问Web业务,这里用的ICMP。在防火墙dis firewall session table verbose命令可以看到会话建立正常,使用了Verbose参数,可以看到更多会话信息。
除了五元组信息以外,还有一些没见过的信息。
Zone:表示报文在安全区域之间流动的方向。显示Trust--->Trust
TTL:表示该会话的老化时间,到期后,会话被清除
Left:表示会话剩余的生存时间
Interface:表示报文出接口
NextHop:去往下一跳IP地址
MAC:吓一跳MAC地址
<--packets:1 bytes:84 :反方向的报文统计信息,个数和字节数,WEB-PC方向
<--packets:1 bytes:84 :正方向的报文统计信息,个数和字节数,PC-WEB方向
上述信息会话时间TTL,是动态生成的,长时间没有匹配报文,会话自动清除。该时间成为会话的老化时间。
老化时间取值非常重要,某些业务的会话老化时间过长,就会一直占用资源,有可能导致其他业务不能正常建立会话。会话时间过短,可能导致该业务连接被防火墙强行中断,影响业务运行。华为防火墙为不同的协议设置了相应的会话默认老化时间。ICMP老化时间20S,DNS老化时间30S等。
如果需要调整:
firewall session aging-time service-set dns 10
还有一种类型的业务,一条连接上的两个连续报文可能间隔时间很长。最具代表的SQL数据库业务,用户查询SQL数据库服务器上的数据时,查询操作的时间间隔可能远大于SQL数据库业务的会话老化时间,防火墙上该业务的会话老化之后,会出现用户访问SQL数据库变慢或无法继续查询等问题。如果只靠延长老化时间延长这些业务的所属协议,会导致一些同样属于该协议的业务出现问题。
华为为此提供了长连接功能,通过ACL报文识别。匹配ACL规则的特定报文的会话老化时间被延长。默认情况,应用长连接功能的报文会话老化时间是168H。
对于长连接功能在安全区域的配置。针对PC访问SQL数据库报文匹配长连接示例:
[USG6000-acl]acl number 3000
[USG6000-acl-adv-3000]rule permit tcp source 192.168.1.100 0 destination 172.16.1.100 0 destination-port eq sqlnet
[USG6000-interzone-trust-untrust]long-link 3000 outbound
报文统计信息非常重要,可以帮助定位网络故障。通常情况,如果查看会话只有–>方向的报文有统计信息,<–方向统计信息为0,说明PC发往Web服务器的报文顺利通过了防火墙,而没有回应。有可能是防火墙丢弃了WEB服务器回应给PC的报文,或者是防火墙与WEB服务器之间网络故障,或者Web服务器本身故障。通过查看会话信息,可以缩小故障范围。
凡是都有例外,特殊网络环境中,其中一个方向统计信息为0,也有可能是正常的。后续会介绍。
——————————————————————————————————————————————————
3.5.2.状态检测和会话创建
防火墙上状态检测功能将属于同一个连接的报文视为一个整体数据流,用会话表示这条连接,具体如何实现?这就要求防火墙能够分析每个协议的交互模式。以TCP为例,建立需要三次握手。
判断一个TCP连接主要标志就是SYN报文,SYN报文称为TCP的首包,对于TCP协议,防火墙只有收到SYN报文并且配置允许SYN报文通过才会建立会话,后续的TCP报文匹配会话直接转发。如果只收到SYN+ACK等后续报文,是不会创建会话的,并且丢弃。
正常情况这样处理是没有问题的。但是在如图:
内部网络访问外部的请求报文直接通过路由器到达外部,而外部回应报文先经过路由器转发到防火墙,由防火墙处理后再转发到路由器,最后又路由器转发回内部网络。也就是防火墙无法收到SYN报文,只收到SYN+ACK报文,这种通信双方交互的报文不同时经过防火墙的情况,叫报文来回路径不一致。
由于防火墙收到SYN+ACK报文后,没有相应的会话,就会丢弃报文。导致通信中断。防火墙早已考虑到这个问题,可以关闭状态检测功能。关闭后,不会在对连接的状态进行分析。相当于回到了包过滤防火墙的时代,后续报文只要匹配规则允许通过,就可以转发并建立会话。
关闭状态检测功能将彻底改变防火墙工作模式,默认开启,除非有特殊需求。
——————————————————————————————————————————————————
来回路径不一致解析
使用模拟器来模拟报文来回路径不一致的网络,PC访问WEB通过路由器直接到达WEB服务器,让WEB服务器回应给PC的报文先转发到防火墙,然后在发送到PC。 NET模拟用户PC终端。
为了构造来回不一致路径,需要在路由器上配置策略路由,将WEB服务器回应给PC的报文重定向到防火墙。
配置省略。策略路由可以看之前的文档。
去往172.16.0.1服务器的路由是经过路由器直接到WEB服务器的。
用户终端访问WEB服务器是通的。
回程的话,配置了策略路由后,直接跟踪后走防火墙了。
配置策略后,PC访问WEB服务器无法访问。
在防火墙上也无法看到会话信息
在防火墙上使用dis firewall statistics system discard查看丢包信息
表示防火墙因为无法收到会话而将报文丢弃,因为防火墙只收到了服务器回应的SYN+ACK报文,没有收到SYN报文,也就没有相应的会话。所以SYN+ACK报文被丢弃。
在路由器G0/0/2抓包,看看TCP的SYN报文。
192.168.10.2用户PC,发送SYN。一直收不到SYN,ACK的会话。一直发送重传。
172.16.0.1发送的SYN,ACK会话被标记为重传。已经发出给防火墙了,但是一直建立不了会话,然后重传。
最后TCP报出RST中断会话。
————————————————————
在看看防火墙接口
172.16.0.1收到192.168.10.2的TCP请求后,发送SYS,ACK回应包,送给防火墙,防火墙收到SYS,ACK,但是没有192.168.10.2的SYN请求。过来的SYS,ACK直接丢弃。。。。。172.16.0.1回应的SYN,ACK,一直得不到192.168.10.2的确认。开启TCP的重传机制,重传无响应后,中断会话。
此时已经验证了上面所说的来回路径不一致导致的问题。
接下来在防火墙上关闭状态检测功能。
再次访问WEB服务器,发现可以正常访问。
在防火墙可以看到会话信息
在会话信息中,<-----方向统计信息为0,只有---->方向存在统计信息。这说明只有服务器回应的SYN+ACK报文经过了防火墙,由此可以得出结论,关闭状态检测功能后,防火墙收到SYN+ACK报文后也会建立会话,PC和WEB服务器之间通信不会中断。
这就是上面说的特殊网络环境。实际中具体情况还要具体分析。
总结:
包过滤防火墙:报文都是孤立的个体,不关注报文的前因后果,根据设定的静态规则判断是否允许。这就要求必须针对每一个方向报文配置规则。转发效率低且安全风险大。
状态检测防火墙:基于连接状态检测机制,通信双方交互属于同一连接的所有报文都作为整体的数据流来对待。
说说UDP:
UDP协议不同TCP,没有连接状态的协议,防火墙收到UDP报文后,无论状态检测功能处于开启还是关闭,只要防火墙配置的规则允许UDP报文通过,防火墙就会建立会话。
说说ICMP:
执行Ping命令的操作一方会发送Ping回显请求报文(Echo request),收到该请求后,响应一方会发送Ping回显应答报文(Echo reply)。
在开启状态检测功能后,防火墙只有收到PING的回显请求报文,并且防火墙上配置的规则允许ICMP回显请求报文通过,才会建立会话。如果防火墙没有收到PING回显请求报文,只收到回显应答报文,是不会创建会话。
——————————————————————————————————————————————————
3.6.注意事项
1、创建新的安全区域后,必须为该区域配置安全级别,否则无法将接口加入区域中。
2、安全区域配置安全级别,不能和已存在的级别相同。
3、配置安全区域后,最容易忘记端口加入区域,导致防火墙转发报文无法判断报文的路线,导致业务不通。dis zone查看区域接口情况。
4、业务不通还可以通过dis fir stat sys dis来查看丢包统计信息。
无效的区域报文报错,无法确定域间关系。。接口没有加入安全区域。
无法找到ARP表项丢包,可能是防火墙无法从上下行设备获得ARP表项。
<font 无法找到路由而丢包,可能是防火墙配置的路由出现问题。
无法找到会话而丢包。可能是防火墙只收到了后续报文,没有收到首包。
如出现Session Create fail packets discarded: XX数字 ,创建会话失败而丢包。可能是会话数量已经达到了限制,无法创建新的会话。应该查询会话列表。是否存在大量无用的会话。可用缩短老化时间来加速老化。