在状态监测中,数据包的字段会与已知可信的数据包做比较。例如,如果您接入一些外部服务,代理服务器就会记忆一些关于您的原始请求的东西,象端口号、源/目的ip地址等等。这些记忆叫做存储状态。当外部系统回应您的请求时,防火墙就会将收到的数据包和存储的状态比较,以判断是否可以进入。zywall使用数据包状态监测来保护私有局域网免受intemet上的黑客攻击。在缺省设置下,zywall的状态监测允许所有局域网到外部的通信而阻塞所有的外部到内部的通信。总之,状态监测就是:
1、允许所有从lan发起的到wan的通信:
2、拒绝所有从wan发起的到lan的通信。
图73 状态监测

上图显示了zywall的缺省防火墙规则,说明了状态监测是如何工作的。user a可以从lan发起一个telnet的任务,这个请求的回应也是允许的。但是其它的从wan发起的telnet就会被拒绝。
9.5.1状态监测的步骤
在这个范例中,当一个tcp数据包离开lan网络,穿过防火墙的wan接口的时候,下列事件会依次生。tcp的数据包是会话的第一步,数据包的应用层协议被配置成防火墙的监测规则。 1. 数据包从防火墙的lan口到wan口。
2.数据包被接口的已知外部访问名单所评估,数据包被允许离开(一个被拒绝的数据包在这个地点会被简单地扔掉)。
3.防火墙会监测该数据包,以判断和记录该数据包的连接状态信息。这些信息会被记录在一个新的为新连接而创建的状态列表里面。如果没有一条防火墙规则对应这个数据包,并且它不具备攻击特征,那么firewall default rule界面中的设置将会决定处理这个数据包的动作。
4.根据已获得的状态信息,防火墙规则就会创建一个临时的访问列表项,该列表项会被插放在wan口内部扩展访问列表的开始部分。这个临时的访问列表被设计用来允许同一个连接的由外网到内网的数据包就像由内网到外网的数据包一样被检测通过。
5.数据包从该接口发送出去。
6.随后,一个由外网到内网的数据包会发送到该接口。这个数据包是先前由内网向外网建立连接的一部分。由外网向内网发送的数据包会经过内部访问列表的评估,然后才有可能被先前创建的临时访问列表允许进入。
7.数据包会根据防火墙的规则进行检测,连接的状态列表会根据需要进行更新。根据更新的状态信息,内部扩展访问列表临时项会被修改,这样可以只允许当前连接状态有效的数据包进入。
8.任何附加的属于连接的由外网向内网或由内网向外网发送的数据包会被检测,以更新状态列表,并按要求修改临时内部访问列表,随后通过该接口进行发送。
9.当连接终止或超时时,连接状态列表就被删除了,同时连接的临时内部访问列表也会被删除。
9.5.2状态检测和zywall
您可以定义附加的防火墙规则来延伸和超越缺省设置。例如,可以创建一条规则:
1.拒绝一类特定的通信,如从lan到intemet的irc(intemetrelaychat)。
2.允许特定的从intemet到lan内特定主机的通信。
3.允许除了竞争者以外的所有人访问一台web服务器。
4.除了lan内的授权用户以外,限制特定协议的使用,如telnet。
这些用户自定义的规则会通过网络通信的源ip地址、目的ip地址、ip协议类型来实现,并且会和管理员制定的规则进行比较。
可以进行定义的防火墙规则是一个非常强大的工具。利用自定义的规则,您也可以禁用所有的防火墙保护,或阻止所有到intemet的访问。当创建或删除防火墙规则的时候请千万小心。在创建规则以后,请先测试以确保这些规则能够正确工作。
下面是关于连接如何进行的简要技术描述。连接既可以被更高层的协议(例如,tcp)定义,也可以由zywall本身(例如为udp和icmp创建的虚拟连接)定义。
9.5.3tcp安全
zywall使用内嵌在tcp数据包中的状态信息。任何连接的第一个数据包都有syn标记,并且清除掉了ack标记,这叫做“初始数据包”。所有不包含这个标记结构的数据包叫做“后续数据包”,因为它们代表tcp数据流中随后出现的数据。
如果一个“初始数据包”来自wan,这就表明有人试图从intemet建立一个进入lan的连接。除了一些少数的特殊情况(请参见下面所述的“高层协议”),这些数据包会被记录下来并扔掉。
如果一个“初始数据包”来自lan,这就表明有人试图从lan建立一个进入intemet的连接。假定这是可以被安全策略(如缺省策略)所接受的部分,连接就被允许。随后会添加一个包含ip地址,tcp端口和序列号等连接信息的缓存项。
当zywall收到任何“后续数据包”(来自intemet或lan)的时候,它的连接信息就会被取出来并和缓存比较。只有当它是一个有效连接(换句话说,就是对源自lan的连接的回应)的时候,数据包才能被允许穿越。
9.5.4udp/icmp安全
udp/icmp本身并不包含任何连接信息(例如序列号)。但是,在最小的时候,它们包含了一个ip地址(源和目的)对。udp还包含了端口对,而icmp含有类型和编码信息。为了在缓存中建立虚拟连接,所有的数据都能够被分析。
例如,任何从lan发起的udp的数据包都会建立一个缓存项。它的ip地址和端口对都会被存储下来。在一个很短的时间内,来自wan的符合ip和udp信息的udp数据包都会被防火墙允许进入。
除了zywall会有更多限制以外,icmp的情况相似。特别的是,只有外出响应会允许进入响应回应,外出地址掩码请求会允许进入地址掩码回应,外出时间标记请求会允许进入时间标记回应。其它的icmp数据包不会被允许通过防火墙,只因为它们太危险和包含了太少的轨迹信息。例如,icmp重定向数据包不会被允许进入,因为它们可能会被发起攻击的机器用宋做重路由通信。
9.5.5高层协议
一些高层协议(例如ftp和realaudio)会同时建立多个网络连接。一般来说,它们通常有一个用宋在终点之间传送命令的“控制连接”和用宋传送大量信息的“数据连接”。
例如ftp协议,当局域网内的一个用户打开了一个到intemet上的服务器的控制连接,并索取一个文件。这时,远端服务器会从intemet上打开一个数据连接。为了让ftp正常工作,这个连接必须被允许通过,哪怕是一个通常来自intemet的连接都被拒绝。
为了实现这一点,zywall会监测应用层的ftp数据。特别的是,它搜索外出的“port”命令,当看到这些命令后,它就为预期的数据连接添加一个缓存项。因为“port”命令包含可以用来唯一标识连接的地址、端口信息,所以这样做很安全。
任何以这种方式运行的协议要必须实现在case-by-case的基础上。您可以用web配置中的用户自定义端口功能来完成。