第一章:基础知识
1.1 什么是防火墙
防火墙,顾名思义阻挡的是火,这一名词起源于建筑领域,其作用是隔离火灾,阻止火势从一个区域蔓延到另一个区域。这种隔离是高明的,隔离的是“火”的蔓延,其中的“火”指的是各种攻击,而又保证了“人”能穿墙通过,其中的“人”指的是通信报文。用通信的语言来定义是:防火墙主要用于保护一个网络免受来自另一个网路的攻击和入侵。因其隔离,防守的属性,防火墙灵活应用于
网络边界,
子网隔离等位置。
路由器与交换机的本质是
转发,防火墙的本质是
控制和防护。
1.2 防火墙的发展历史
包过滤 应用代理 状态检测 UTM NGFW
| | | | | | |
1989 ---------------------------1994 | 1995-------------2004 | 2005------------2009--->
| | | | | | | |
访问控制 ----- 代理技术 ------会话机制 专用设备-------多功能叠加 DPI技术---基于用户+应用+内容进行管制
1.3 总结
从防火墙发展的历史主要看到3个特点:
*第一点访问控制越来越精确。简单访问控制-->基于会话的访问控制-->下一代防火墙基于用户,应用和内容来进行访问控制。
*第二点防范内里越来越强。隔离功能-->入侵检测-->防病毒-->URL过滤-->应用程序控制-->邮件过滤
*第三点防火墙的处理性能越来越高。
1.4 安全区域
安全区域(Security Zone)简称为区域(Zone),它是一个或多个接口的集合,防火墙通过安全区域来划分网络,标示报文的流动路线。一般来说,当报文在不同的安全区域之间流动时才会受到控制。
1.5 报文在安全区域之间的流动
报文从低级别的安全区域向高级别的安全区域流动时为入方向(Inbound),报文从高级别安全区域向低级别安全区域流动时为出方向(Outbound)。
防火墙如何判断报文在哪两个安全区域之间流动呢?首先,源安全区域很容易确定,防火墙从哪个接口接收报文,该接口所属的安全区域就是报文的源安全区域。
确定目的安全区域时分两种情况。三层模式下,防火墙通过查找路由表确定报文将要从哪个接口发出,该接口所属的安全区就是报文的目的安全区域;两层模式下,防火墙通过查找MAC地址转发表确定报文要从哪个接口发出,该接口所属的安全区域就是报文的目的安全区域。源安全区域和目的安全区域确定后,就可以知道报文从哪两个安全区域之间流动了。
另外还有一种情况,在VPN场景中,防火墙收到的是封装的报文,将报文解封装后得到原始报文,然后还是通过查找路由表来确定目的安全区域,报文从哪个接口发出,该接口所属的安全区域就是报文的目的安全区域。
而源安全区域不能简单地根据收到的接口来确定,此时防火墙会采用“反向查找路由表”的方式来确定原始报文的源安全区域。具体来说,防火墙把原始报文中的源地址假设成是目的地址,然后通过查找路由表确定这个目的的地址的报文将要从哪个接口发出,该接口所属的安全区域是报文将要去往的安全区域。反过来说,报文也就是从该区域发出的,所以反查路由表得到的这个安全区域就是报文的源安全区域。
1.6 安全区域的配置
安全区域的建立主要包括创建安全区域以及将接口加入安全区域。除了物理接口可以加入安全区域,防火墙还支持逻辑接口,如子接口,VLANIF接口等,这些逻辑接口使用时也需要加入安全区域。
1.7 检测之包过滤防火墙
包过滤防火墙只是根据设定好的静态规则来判断是否允许报文通过,它认为报文都是无状态的孤立个体,不关注报文产生的前因后果。这就要求包过滤防火墙必须针对每一个方向上的报文都配置一条规则,转发效率低下而且容易带来安全风险。
Trust
UnTrust
PC----------------------------防火墙--------------------------Web服务器
192.168.0.1 172.16.0.1
防火墙要配置表下表的规则:
PC访问Web:1, 原地址192.168.0.1,源端口ANY,目的地址172.16.0.1,端口号80,动作允许动过
Web回应PC:2, 原地址172.16.0.1,源端口80,目的地址192.168.0.1,端口号ANY,动作允许动过
在规则2中,去往PC的目的端口全部开放,外部的恶意攻击者伪装成Web服务器,就可以畅通无阻地穿过防火墙。
端口中处的ANY表示任意端口,这是因为PC访问Web服务器时,它的操作系统决定了所使用的源端口。
1.8 检测之状态检测防火墙
状态检测防火墙使用基于连接状态的检测机制,将通信双方之间交互的属于同一连接的所有报文都作为整体的数据流来对待。在状态检测防火墙看来,同一个数据流内的报文不再是孤立的个体,而是存在联系的。例如,为数据流的第一个报文建立会话,数据流内的后续报文就会直接匹配会话转发,不需要再进行规则的检查,提高了转发效率。
Trust
UnTrust
PC----------------------------防火墙--------------------------Web服务器
192.168.0.1
(1)PC访问Web服务器
---------------------------->
(2)允许通过建立会话
---------------------------->
(3)Web服务器回应PC
<-------------------------------------
(4)匹配会话允许通过
<--------------------------------------------------
防火墙要配置表下表的规则:
PC访问Web:1, 原地址192.168.0.1,源端口ANY,目的地址172.16.0.1,端口号80,动作允许动过
恶意攻击者即使伪装成Web服务器向PC发起访问,由于这类报文不属于PC访问Web服务器行为的后续报文,防火墙不会允许这些报文通过。这样即保证了PC可以正常访问Web,也避免了大范围开发端口带来的安全风险。
1.9 会话
会话是通信双方建立的连接在防火墙上的具体体现,代表两者的连接状态,一条会话就表示通信双方的一个;连接。防火墙上多条会话的集合就叫作会话表(Session table)。
会话表项:
http VPN:public-->public 192.168.0.1:2049-->172.16.0.1:80
以上的协议,源地址,源端口,目的地址,目的端口这5个元素是会话的重要信息,我们将称之为“五元组”。只要这5个元素相同的报文即可以认为同属于一条流。
还有些协议,它们的报文中没有端口信息,防火墙处理这些协议的报文时,如何生成会话表呢?
比如ICMP协议,报文中不带端口信息,那么防火墙会把ICMP报文头中的ID字段作为ICMP会话的源端口,会议固定值2048作为ICMP会话的目的端口。再比如IPSes
(
Internet 协议安全性
)中的AH(Authentication Header,认证头)协议和ESP(Encapsulating Security Payload, 封装安全载荷)协议,也不带有端口信息,防火墙会直接将这两个协议的会话中的源和目的端口都记录为0。
1.10 状态检测与会话机制
首先来看一下TCP协议。我们都知道,建立一个TCP连接,通信双方需要三次握手:
防火墙上的状态检测功能将属于同一个连接的报文都视为一个整体数据流,用会话来表示这条连接,具体实现是怎么样子的呢?
这就要防火墙能够分析各个协议的交互模式,以TCP为例。判断一个TCP连接的重要标志就是SYN报文,我们也把SYN报文称为TCP连接的首包。对于TCP协议,防火墙只有收到SYN报文并且配置的规则允许SYN报文通过才会建立会话,后续的TCP报文匹配会话直接转发。如果防火墙没有收到SYN报文,只收到了SYN+ACK或ACK等后续报文,是不会建立会话的,并且将这些报文丢弃。
PC访问Web服务器,然后在防火墙上使用display firewall session table verbose命令可以看到会话正常建立,这里我们使用了verbose参数,通过这个参数可以看到会话的更多信息:
除了我们上次介绍过的五元组信息之外,还有一些之前没见过的信息,我们简单介绍一下:
- Zone:表示报文在安全区域之间流动的方向,图中的信息表示报文是从Trust区域流向Untrust区域。
- TTL:表示该条会话的老化时间,这个时间到期后,这条会话也将会被清除。
- Left:表示该条会话剩余的生存时间。
- Interface:表示报文的出接口,报文从这个接口发出。
- NextHop:表示报文去往的下一跳的IP地址,本网络拓扑中是Web服务器的IP地址。
- MAC:表示报文去往的下一跳的MAC地址,本网络拓扑中是Web服务器的MAC地址。
- <--packets:4 bytes:465:表示会话反方向上的报文统计信息,即Web服务器向PC发送报文的个数和字节数。
- -->packets:7 bytes:452:表示会话正方向上的报文统计信息,即PC向Web服务器发送报文的个数和字节数。
前面我们说过,如果防火墙没有收到SYN报文,只收到了SYN+ACK或ACK等后续报文,是不会创建会话的,并且会将这些报文丢弃。在正常情况下这样处理是没有问题的,但是在报文来回路经不一致的环境中,就会出现问题。
如上图所示,内部网络访问外部网络的报文直接通过路由器到达外部网络,而外部网络的回应报文,先经过路由器转发到防火墙,由防火墙处理后再转发到路由器,最后由路由器发送到内部网络。也就是防火墙无法收到SYN报文,只收到了SYN+ACK报文。这种通信双方交互的报文不同时经过防火墙的情况,叫做报文来回路经不一致。在这种网络环境中,防火墙收到SYN+ACK报文后,由于没有相应的会话,就会丢弃SYN+ACK报文,导致内部网络和外部网络之间的通信中断。
最后总结一下防火墙对TCP、UDP和ICMP协议的报文创建会话的情况,如下表所示。当然,
前提还是这些报文要通过防火墙上包括安全策略在内的各项安全机制的检查
,然后才能执行这些动作。
协议 |
开启状态检测功能 |
关闭状态检测功能 |
TCP |
SYN报文 |
创建会话,转发报文 |
创建会话,转发报文 |
SYN+ACK、ACK报文 |
不创建会话,丢弃报文 |
创建会话,转发报文 |
UDP |
创建会话,转发报文 |
创建会话,转发报文 |
ICMP |
Ping回显请求报文 |
创建会话,转发报文 |
创建会话,转发报文 |
Ping回显应答报文 |
不创建会话,丢弃报文 |
创建会话,转发报文 |
其他ICMP报文 |
不创建会话,转发报文 |
不创建会话,转发报文 |
1.11 名词总结:
VPN——Virtual Private Network,虚拟专用网。
WAF——Web Application Firwall,Web应用防火墙。
UTM——United Threa Management,统一威胁管理,将传统的防火墙,入侵检测,防病毒,URL过滤,应用程序控制,邮件过滤等功能融合到一台防火墙上。
DPI——Deep Packet Inspection,深度报文检测。
Next-Generation Firewall,下一代防火墙。
TTL——Time To Live生存时间值。
ALC——Access Control List访问控制列表。
SYN——
synchronous同步信号用来发起一个连接。