状态防火墙是一种能够提供状态封包检查或状态检视功能的防火墙。
简介
状态防火墙(英语:Stateful firewall),一种能够提供状态数据包检查(stateful packet inspection,缩写为SPI)或状态查看(stateful inspection)功能的
防火墙,能够持续追踪穿过这个防火墙的各种网络连接(例如
TCP与
UDP连接)的状态。这种防火墙被设计来区分不同连接种类下的合法数据包。只有匹配主动连接的数据包才能够被允许穿过防火墙,其他的数据包都会被拒绝。
这种防火墙也可以提供动态数据包过滤(Dynamic Packet Filtering)的功能。
历史
Check Point软件公司于1994年引入了FireWall-1产品。
在开发状态防火墙之前,防火墙是无状态的。无状态防火墙分别处理每个网络帧或
数据包。这种数据包过滤器在OSI网络层(层3)上运行,并且更高效地工作,因为它们只查看
数据包的
报头部分。他们没有跟踪分组上下文,例如流量的性质。这样的防火墙无法知道任何给定的数据包是否是现有连接的一部分,是试图建立新的连接还是只是一个流氓数据包。现代防火墙具有连接感知能力(或状态感知能力),为网络管理员提供了对网络流量的更精细控制。
使用无状态防火墙的网络操作的典型例子是
文件传输协议(FTP)。按照设计,这些协议需要能够打开到任意高端口的连接才能正常工作。由于无状态防火墙无法知道发往受保护网络的数据包(例如,某些主机的目标端口4970)是合法FTP会话的一部分,因此它将丢弃该数据包。具有应用程序检查功能的状态防火墙通过维护一个打开的连接表,检查某些数据包的有效负载并智能地将新的连接请求与现有的合法连接相关联来解决此问题。
早期尝试生产防火墙的
应用层是7层OSI模型的最高层。这种方法需要大量的计算能力,并且在现代实现中不常用。
说明
状态防火墙会跟踪网络连接的状态(例如TCP流或UDP通信),并且可以保存内存中每个连接的重要属性。这些属性统称为连接状态,可能包括连接涉及的IP地址和端口以及穿过连接的数据包的序列号等详细信息。状态检查随着时间的推移监视传入和传出的数据包以及连接的状态,并将数据存储在动态状态表中。这种累积数据是经过评估的,所以过滤决策不仅基于管理员定义的规则,而且还取决于先前连接构建的上下文以及属于同一连接的先前分组。
在建立连接时执行大部分
CPU密集型检查。条目仅为满足定义的安全策略的TCP连接或UDP流创建。之后,所有数据包(用于该会话)都会被快速处理,因为它确定它是否属于现有的预筛选会话很简单快捷。与这些会话关联的数据包可以通过防火墙。与任何策略不匹配的会话均被拒绝,因为数据包与现有表项不匹配。
为了防止状态表被填满,如果在一段时间内没有流量通过,会话将超时。这些陈旧的连接将从状态表中删除。因此,许多应用程序会定期发送
Keepalive消息,以防止防火墙在没有用户活动期间断开连接,尽管可以指示某些防火墙将这些消息发送给应用程序。
根据连接协议,维护连接的状态对于防火墙来说或多或少是复杂的。例如,TCP本质上是一个有状态的协议,因为连接通过
三次握手(“SYN,SYN-ACK,ACK”)建立,并以“FIN,FIN-ACK,ACK”交换结束。这意味着所有
报头中都带有“SYN”的
数据包接收到的防火墙被解释为打开新的连接。如果客户端请求的服务在服务器上可用,它将使用防火墙也将跟踪的“SYN-ACK”数据包进行响应。一旦防火墙收到客户端的“ACK”响应,它将连接转移到“ESTABLISHED”状态,因为连接已被双向认证。这允许通过建立的连接跟踪未来的数据包。同时,防火墙将丢弃与其状态表中记录的现有连接无关的所有数据包(或“SYN”数据包),防止黑客入侵黑客攻击受保护机器。
其他连接协议,即
UDP和
ICMP,并不基于像
TCP这样的双向连接,使得状态防火墙的安全性稍差。为了在这些情况下跟踪连接状态,
防火墙必须在看到第一个有效数据包之后将会话转移到ESTABLISHED状态。然后,它只能通过以下数据包的源地址和目的地址的地址和端口来跟踪连接。与可以通过“FIN,ACK”交换关闭的TCP连接不同,这些无连接协议允许会话仅以超时结束。例如,这使得UDP打洞成为可能。
通过跟踪连接状态,状态防火墙在分组检查方面提供了更高的效率。这是因为对于现有的连接,防火墙只需检查状态表,而不是根据防火墙的规则集检查数据包,这可能非常广泛。另外,在与状态表匹配的情况下,防火墙不需要执行
深度包检测。
应用程序级别的过滤器
单独的
数据包过滤不被认为提供了足够的保护。为了有效阻止
点对点相关的
网络流量,需要做一个防火墙来进行应用程序过滤,这可以被看作是状态数据包检查的扩展。状态数据包检查可以确定通过每个端口发送的协议类型,但应用程序级别的过滤器会查看协议的使用情况。例如,应用程序级过滤器可能能够区分用于访问网页的HTTP流量与用于
文件共享的HTTP流量之间的差异,而仅执行数据包过滤的防火墙会平等对待所有HTTP流量。
应用层防火墙通常比状态检查慢。应用层防火墙有时使用应用代理来实现。建立两个TCP连接:一个在分组源和防火墙之间,另一个在防火墙和分组目的地之间。应用程序代理拦截代表目标的到达数据包,检查应用程序有效负载,然后将允许的数据包中继到目标。可疑数据被丢弃,
客户端和服务器从不直接相互通信。与在网络层检查数据包相比,代理服务器必然涉及更多的协议栈开销。此外,由于每个应用程序都需要一个独特的代理,因此代理防火墙的灵活性和状态检测防火墙的升级速度都较慢。尽管如此,由于应用程序级代理具有应用程序感知能力,因此代理可以更轻松地处理H.323或
SIP等复杂协议,用于
视频会议和
VoIP(IP语音)。
漏洞
单个协议解码器中的漏洞可能允许攻击者获得对
防火墙的控制权。这种担忧突出表明需要更新防火墙软件。
一些有状态的防火墙也增加了单个主机可能被诱骗进入外部连接的可能性。只有通过审核主机软件才能完全消除这种可能性。有些防火墙可以通过浏览网页(使用JavaScript或单击按钮后)以这种方式击败。