状态防火墙ASPF工作原理

   一般来说跟其他安全业务一样,ASPF也是基于会话管理模块的,我们知道会话session是动态的,所以ASPF也是动态的,有状态跟踪的,另外ASPF的精髓还在于出报文打开一个安全的通道,返回报文在这个安全的通道中传输,而维护这个安全通道的依然是访问控制列表ACL,当然这儿的ACL称为临时访问控制列表TACL,之所以称为临时,因为它是动态的用过即删,首报文动态创建TACL,然后返回报文检查是否匹配TACL,如果完全匹配责放行,如果不匹配责丢弃。说来说去,大家也许可以看到之所以称状态防火墙ASPF是动态防火墙,原因在于两点:

   1.ASPF是以session为基础的,session的动态性决定了ASPF的动态性。

   2.ASPF需要创建TACL打开报文返回的安全通道,TACL是动态创建和删除的,所以注定ASPF是动态的。

   理解了以上两点,那么你也就从心里开始接受ASPF了,因为这是ASPF的精华核心。下面介绍一下ASPF维护的两个表:

   a 会话状态表

   前面也讲到了会话表项是一个七元组:

   协议 状态(老化时间) 源IP(源端口)-->目的IP(目的端口)

                        目的IP(目的端口)<--源IP(源端口)(用于返回报文匹配)

   可以看出一条会话其实就可以理解为一个TCP连接(当然不一定是TCP会话),会话状态表维护了一个会话中某一个时刻会话所处的状态,用于匹配后续的发送报文,并检测会话状态的转换是否是正确的。session table是在检测到第一个报文时创建的,随着不同的状态触发条件会进入到不同的状态中并维护。ASPF于包过滤的最大区别就在于ASPF考虑到会话的上下文,不仅包括当前的会话状态,还记录了本次会话之前的通信信息,具有更好的灵活性与安全性,这也是ASPF动态过滤的关键。

   b 临时访问控制列表TACL

   虽然被称为TACL,但是它独立于ACL,更确切的说是利用了ACL访问控制的思想,是动态的,非静态配置指定的。TACL在创建session table时创建,会话结束后自动删除,依赖于session的,从功能上说它相当于一个扩展的ACL的permit项,用于匹配一个会话中所有应答报文。

   下面以FTP为例来说明一下ASPF多通道应用层协议检测的过程:

                                           image

            如上图所示假设FTP client向FTP server的21号端口发起FTP控制通道的连接,通过协商由服务器端的21端口想客户端的20号端口发起数据通道的连接,数据传输超时或结束连接删除。

     FTP检测在FTP连接建立到关闭的过程中的处理如下:

     1.检查从出接口向外发送的IP报文,确认为基于TCP的IP报文

     2.检查端口号确认连接为控制连接,建立返回报文的TACL和session table

     3.检查FTP控制连接报文,解析FTP指令,根据指令更新状态表,如果包含数据通道建立指令,则创建数据连接的临时访问控制列表,对数据连接不进行状态处理。

     4.对于返回报文,根据协议类型做相应的匹配检查,检查将根据ingredients的协议的状态表和TACL决定报文是否允许通过。

     5.FTP连接删除时,会话状态表及TACL随之删除。

     以上介绍了ASPF是如何处理多通道协议的应用协议检查的。对于像SMTP.HTTP等单通道协议的检测过程就相对较为简单,当发起连接时建立会话状态表和TACL,连接删除是系统自动删除。

     而对于传输层协议TCP/UDP检测,跟应用层协议检测不同,传输层协议检测只是简单的五元组信息检查,要求返回报文必须完全跟原报文sip,sport,dip,dport和proto一致才可以放行,否则直接丢弃。

     上面介绍就是ASPF的工作原理。