
1.2.3 状态检测防火墙
状态检测防火墙采用基于连接的状态检测机制来过滤报文。防火墙将客户端和服务器之间交互的同一条TCP或UDP连接作为一个整体数据流来看待,这条交互的数据流也称为“会话”(Session)。每条会话都维护了交互双方的连接信息。一个标准的会话表至少包含策略ID、协议、源IP地址、目标IP地址、源端口、目标端口、持续时间、超时时间、连接类型(全连接/半连接),如表1-2所示。
表1-2 会话表

每当客户端主动向服务器发起连接请求,防火墙收到数据包后,首先检查是否存在对应五元组的会话信息。如果没有对应的会话表项,就会检查收到的报文是否可以创建新的会话,如果符合要求,就会创建一条新的会话表项,接着匹配安全访问规则(安全策略),然后转发给服务器。如果命中了已经存在的会话表项,则无须再次匹配安全策略,刷新会话的超时时间后直接转发给对端。状态检测防火墙工作原理如图1-7所示。

图1-7 状态检测防火墙工作原理
和包过滤防火墙不同,因为状态检测防火墙基于会话来过滤流量,所以只需要放行一个方向的流量(存在一条安全策略),就可以达到控制客户端和服务器双向通信的目的。在大型的网络中,状态检测防火墙安全规则的条目数相比包过滤防火墙大幅减少。另外,因为一条会话内的报文多次交互只需要匹配一次安全规则,也极大地提高了防火墙的转发效率。基于状态检测的防火墙作为当今市场的主流技术受到越来越多用户的认可。
状态检测防火墙的优点如下:
1)因为是基于状态的检测,所以每个报文不是孤立的个体,而是相互联系的,可以抵御各种逃避安全规则的攻击,如SYN flag攻击。
2)处理性能高。状态检测防火墙会针对每条连接维护一个会话表项,在整个会话报文交互的生命周期内只需要匹配一次策略,后续的报文只需要命中会话表就可以直接处理,此时唯一要做的就是刷新一下会话表的老化时间,避免重复检测。例如,用户通过网页下载一个1GB(1073741824B)的视频文件,使用包过滤防火墙需要重复检测大约715827次(按照每个报文1500B计算),而基于状态检测的防火墙,只需要在最初建立下载链接时匹配一次安全控制策略,后续的包命中会话后直接转发,极大地提高了匹配效率。
3)扩展性较好。状态检测防火墙不需要像代理防火墙一样,针对每种应用都开发一套协议栈。它几乎支持所有服务,只需要识别传输层的信息,提取出关键的字段并进行匹配,维护一条TCP或UDP连接即可。它也没有代理防火墙那么强的安全能力。
状态检测防火墙的缺点如下:
1)状态检测防火墙虽然解决了包过滤防火墙无法确认返回报文合法性的问题,但是因为其主要工作在传输层,因此无法识别上层的应用流量是否安全,如HTTP内容的过滤、应用控制。用户需要一种既能维护会话以保证传输层安全,又能检测上层攻击的防火墙,因此就有了下文介绍的下一代防火墙。
2)性能挑战。虽然相比包过滤防火墙匹配上的性能损耗低了很多,但是维护大量会话的同时还需要兼顾实时的业务转发,这就对防火墙的处理能力提出了更高的要求。随着硬件的升级(更快的CPU、更大的内存),这个缺点越来越不易察觉。
3)因为工作在传输层,并且安全规则只检查首次建立会话的包,因此容易受到针对性的攻击,比如伪造回应的报文来逃过安全规则的检查,还有一些针对内部的攻击,如控制内部主机主动发起连接,这样攻击者就可以用内部失陷主机搭建的“桥”攻击内部网络。