防火墙一方面可以阻止来自因特网的、对受保护网络的未授权访问,另一方面允许内部网络用户对因特网进行Web访问或收发E-mail等。防火墙也可以作为一个访问因特网的权限控制关口,如允许组织内的特定主机可以访问因特网。现在,许多防火墙同时还具有一些其它特点,如进行身份鉴别、对信息进行安全(加密)处理等。
防火墙不单用于控制因特网连接,也可以用来在组织网络内部保护大型机和重要的资源(如数据)。对受保护数据的访问都必须经过防火墙的过滤,即使网络内部用户要访问受保护的数据,也要经过防火墙。
目前设备中的防火墙主要指以下三种:
l 包过滤防火墙,即基于ACL(Access Control List,访问控制列表)的包过滤
l 状态防火墙,即ASPF(Application Specific Packet Filter,基于应用层状态的包过滤)
l 地址转换
包过滤实现了对IP数据包的过滤。对设备需要转发的数据包,先获取其包头信息(包括IP层所承载的上层协议的协议号、数据包的源地址、目的地址、源端口和目的端口等),然后与设定的ACL规则进行比较,根据比较的结果对数据包进行相应的处理。
目前的包过滤提供了对分片报文检测过滤的支持,检测的内容有:
l 报文类型(非分片报文、首片分片报文和非首片分片报文)
l 获得报文的三层信息(基本ACL规则和不含三层以上信息的高级ACL规则)
l 三层以上的信息(包含三层以上信息的高级ACL规则)
对于配置了精确匹配过滤方式的高级ACL规则,包过滤防火墙需要记录每一个首片分片的三层以上的信息,当后续分片到达时,使用这些保存的信息对ACL规则的每一个匹配条件进行精确匹配。
应用精确匹配过滤后,包过滤防火墙的执行效率会略微降低,配置的匹配项目越多,效率降低越多,可以配置门限值来限制防火墙最大处理的数目。
包过滤防火墙属于静态防火墙,目前存在的问题如下:
l 对于多通道的应用层协议(如FTP、H.323等),部分安全策略配置无法预知。
l 无法检测某些来自传输层和应用层的攻击行为(如TCP SYN、Java Applets等)。
l 无法识别来自网络中伪造的ICMP差错报文,从而无法避免ICMP的恶意攻击。
l 对于TCP连接均要求其首报文为SYN报文,非SYN报文的TCP首包将被丢弃。在这种处理方式下,当设备首次加入网络时,网络中原有TCP连接的非首包在经过新加入的防火墙设备时均被丢弃,这会对中断已有的连接。
因此,提出了状态防火墙——ASPF的概念。ASPF能够实现的检测有:
l 应用层协议检测,包括FTP、HTTP、SMTP、RTSP、H.323(Q.931、H.245、RTP/RTCP)检测;
l 传输层协议检测,包括TCP和UDP检测,即通用TCP/UDP检测。
ASPF的主要功能如下:
l 能够检查应用层协议信息,如报文的协议类型和端口号等信息,并且监控基于连接的应用层协议状态。对于所有连接,每一个连接状态信息都将被ASPF维护,并用于动态地决定数据包是否被允许通过防火墙进入内部网络,以阻止恶意的入侵。
l 能够检测传输层协议信息(即通用TCP/UDP检测),能够根据源、目的地址及端口号决定TCP或UDP报文是否可以通过防火墙进入内部网络。
ASPF的其它功能有:
l ASPF不仅能够根据连接的状态对报文进行过滤,还能够对应用层报文的内容加以检测,提供对不可信站点的Java Blocking功能,用于保护网络不受有害的Java Applets的破坏。
l 增强的会话日志功能。可以对所有的连接进行记录,包括:连接的时间、源地址、目的地址、使用的端口和传输的字节数。
l 支持PAM(Port to Application Map,应用协议端口映射),允许用户自定义应用层协议使用非通用端口。
l 支持ICMP差错报文检测。正常ICMP差错报文中均携带有本报文对应连接的相关信息,根据这些信息可以匹配到相应的连接。如果匹配失败,则根据当前配置决定是否丢弃该ICMP报文。
l 支持TCP连接首包检测。对TCP连接的首报文进行检测,查看是否为SYN报文,如果不是SYN报文则根据当前配置决定是否丢弃该报文。
在网络边界,ASPF和包过滤防火墙协同工作,能够为企业内部网络提供更全面的、更符合实际需求的安全策略。
(1) Java Blocking
Java Blocking是对通过HTTP协议传输的Java Applets程序进行阻断。当配置了Java Blocking后,用户为试图在Web页面中获取包含Java Applets程序而发送的请求指令将会被阻断。
(2) PAM
应用层协议使用通用的端口号进行通信,PAM允许用户对不同的应用定义一组新的端口号,并提供了一些机制来维护和使用用户定义的端口配置信息。
PAM支持两类映射机制:
l 通用端口映射:是将用户自定义端口号与应用层协议建立映射关系。例如:将8080端口映射为HTTP协议,这样所有目的端口是8080的TCP报文将被认为是HTTP报文。
l 主机端口映射:是对去往或来自某些特定主机的报文建立自定义端口号和应用协议的映射。例如:将目的地址为10.110.0.0网段的、使用8080端口的TCP报文映射为HTTP报文。主机的范围可由基本ACL指定。
(3) 单通道协议和多通道协议
l 单通道协议:从会话建立到删除的全过程中,只有一个通道参与数据交互,如SMTP、HTTP。
l 多通道协议:包含一个控制通道和若干其它控制或数据通道,即控制信息的交互和数据的传送是在不同的通道上完成的,如FTP、RTSP。
(4) 内部接口和外部接口
如果设备连接了内部网和互联网,并且设备要通过部署ASPF来保护内部网的服务器,则设备上与内部网连接的接口就是内部接口,与互联网相连的接口就是外部接口。
当ASPF应用于设备外部接口的出方向时,可以在防火墙上为内部网用户访问互联网的返回报文打开一个临时通道。
如图1所示,为了保护内部网络,一般情况下需要在路由器上配置访问控制列表,以允许内部网的主机访问外部网络,同时拒绝外部网络的主机访问内部网络。但访问控制列表会将用户发起连接后返回的报文过滤掉,导致连接无法正常建立。
l 对于单核产品
当在设备上配置了应用层协议检测后,ASPF可以检测每一个应用层的会话,并创建一个状态表项和一个临时访问控制列表(Temporary Access Control List,TACL):
(1) 状态表项在ASPF检测到第一个向外发送的报文时创建,用于维护一次会话中某一时刻会话所处的状态,并检测会话状态的转换是否正确。
(2) 临时访问控制列表的表项在创建状态表项的同时创建,会话结束后删除,它相当于一个扩展ACL的permit项。TACL主要用于匹配一个会话中的所有返回的报文,可以为某一应用返回的报文在防火墙的外部接口上建立一个临时的返回通道。
下面以FTP检测为例说明多通道应用层协议检测的过程。
图2 FTP检测过程示意图
如图2所示,FTP连接的建立过程如下:假设FTP client以1333端口向FTP server的21端口发起FTP控制通道的连接,通过协商决定由FTP server的20端口向FTP Client的1600端口发起数据通道的连接,数据传输超时或结束后连接删除。
FTP检测在FTP连接建立到拆除过程中的处理如下:
(1) 检查从出接口上向外发送的IP报文,确认为基于TCP的FTP报文。
(2) 检查端口号确认连接为控制连接,建立返回报文的TACL和状态表项。
(3) 检查FTP控制连接报文,解析FTP指令,根据指令更新状态表项。如果包含数据通道建立指令,则创建数据连接的TACL;对于数据连接,不进行状态检测。
(4) 对于返回报文,根据协议类型做相应匹配检查,检查将根据相应协议的状态表项和TACL决定报文是否允许通过。
(5) FTP连接删除时,状态表及TACL随之删除。
单通道应用层协议(如SMTP、HTTP)的检测过程比较简单,当发起连接时建立TACL,连接删除时随之删除TACL即可。
l 对于多核产品
ASPF的应用层协议检测功能由会话管理及ALG功能协作实现。ASPF将检测到的应用层会话的首报文与配置的策略进行匹配,匹配的结果交由会话管理用来建立会话信息数据库以及维护会话状态。之后,ASPF根据会话管理返回的会话状态信息决定后续报文的处理方式。
这里的传输层协议检测是指通用TCP/UDP检测。通用TCP/UDP检测与应用层协议检测不同,是对报文的传输层信息进行的检测,如源、目的地址及端口号等。
通用TCP/UDP检测要求返回到ASPF外部接口的报文要与前面从ASPF外部接口发出去的报文完全匹配,即源、目的地址及端口号恰好对应,否则返回的报文将被阻塞。因此对于FTP、H.323这样的多通道应用层协议,在不配置应用层检测而直接配置TCP检测的情况下会导致数据连接无法建立。