信息安全基础知识笔记04 防火墙应用层报文过滤ASPF
信息安全基础知识笔记04防火墙应用层报文过滤ASPF
上一节笔记已经介绍了防火墙在模拟器软件eNSP拓扑搭建的基本方法,区域间转发策略的配置以及如何查看会话表,以后的实验均会在其基础上进行。
本节笔记主要介绍防火墙的一种高级通信过滤机制 -- 应用层报文过滤ASPF。这是针对应用层的包过滤技术,即基于状态的报文过滤。最后再简单阐述防火墙的分片缓存,长连接的概念。
多通道协议技术
在理解ASPF技术前,首先我们需要知道什么叫多通道协议技术。
单通道协议技术:通信过程中只需占用一个端口的协议。如:WWW只需占用80端口。
多通道协议技术:通信过程中需占用两个或两个以上端口的协议。如+FTP被动模式下需占用21号端口以及一个随机端口。
大部分多媒体应用协议(如H.323、SIP)、FTP、netmeeting等协议使用约定的固定端口来初始化一个控制连接,再动态的选择端口用于数据传输。端口的选择是不可预测的,其中的某些应用甚至可能要同时用到多个端口。
我们用文件传输协议(FTP)来举个例子,简单介绍一下这个应用层协议的实现原理。
FTP有主动连接(PORT)和被动连接(PASV)两种工作方式。首先,两种方式默认都是通过TCP 21端口来进行控制连接的。即建立一条传输命令的通道,该连接用于下达对文件进行上传,下载等操作命令。
建立控制连接后,需要再建立一条用于传输数据的通道,而建立的方式分为主动和被动两种。
主动方式(PORT)即客户端打开一个随机端口(x),并将该端口告知服务器端,最后由服务器端(使用端口TCP 20)向客户端发起数据连接。
被动方式(PASV)即服务器端打开一个随机端口(大于TCP 1024),并将该端口告知客户端,最后由客户端向服务器端发起数据连接。
假设现在内网中有一台主机(Trust区域)希望通过防火墙访问外网的FTP服务器(Untrust区域),防火墙上只配置了一条允许Trust区域访问Untrust区域(出方向)的安全策略。
如果此时建立数据连接的是主动方式,那么就需要处于Untrust区域的FTP服务器使用TCP 20端口访问Trust区域的内网主机,但很明显防火墙并没有入方向的访问策略,这样就会导致无法正常建立FTP连接。
传统的包过滤防火墙可以通过配置ACL过滤规则匹配单通道协议的应用传输,保障内部网络不受攻击,但只能阻止一些使用固定端口的应用,无法匹配使用协商出随机端口传输数据的多通道协议应用,留下了许多安全隐患。
Tips:参考资料 FTP的基本原理
https://www.cnblogs.com/zylSec/p/14702823.html
应用层报文过滤技术ASPF
ASPF ( Application Specific Packet Filter) 是一种高级通信过滤,它检查应用层协议信息并且监控连接的应用层协议状态。对于特定应用协议的所有连接,每一个连接状态信息都将被ASPF维护并用于动态的决定数据包是否被允许通过防火墙或丢弃。
(1)ASPF概述
① ASPF在session表的数据结构中维护着连接的状态信息,并利用这些信息来维护会话的访问规则。
ASPF保存着不能由访问控制列表规则保存的重要的状态信息。防火墙检验数据流中的每一个报文,确保报文的状态与报文本身符合用户所定义的安全规则。连接状态信息用于智能的允许/禁止报文。当一个会话终止时,session表项也将被删除,防火墙中的会话也将被关闭。
② ASPF可以智能的检测“TCP的三次握手的信息”和“拆除连接的握手信息”。
通过检测握手、拆连接的状态检测,保证一个正常的TCP访问可以正常进行,而对于非完整的TCP握手连接的报文会直接拒绝。
③ ASPF是基于连接的。
ASPF将对UDP报文(UDP报文时无连接的)的源、目的IP地址、端口进行检查,通过判断该报文是否与所设定的时间段内的其他UDP报文相类似,而近似判断是否存在一个连接。
④ 在普通的场合,一般使用的是基于ACL的IP包过滤技术,这种技术比较简单,但缺乏一定的灵活性,在很多杂应用的场合普通包过滤是无法完成对网络的安全保护的。例如对于类似于应用FTP协议进行通信的多通道协议来说,配置防火墙则是非常困难的。
ASPF使防火墙能够支持一个控制连接上存在多个数据连接的协议,同时还可以在应用非常复杂的情况下方便的制订各种安全的策略。ASPF监听每一个应用的每一个连接所使用的端口,打开合适的通道让会话中的数据能够出入防火墙,在会话结束时关闭该通道,从而能够对使用动态端口的应用实施有效的访问控制。
Tips:以上提到的session表,即防火墙保存会话状态的会话表。
(2)ASPF对多通道协议的支持
ASPF(Application Specific Packet Filter)是针对应用层的包过滤。
在多通道协议中(如FTP协议),控制通道和数据通道是分开的。数据通道是在控制报文中动态协商出来的,为了避免协商出来的通道不因其他规则的限制(如ACL)而中断,需要临时开启一个通道,Servermap就是为了满足这种应用而设计的一种数据结构。
FTP包含一个预知端口的TCP控制通道和一个动态协商的TCP数据通道,对于一般的包过滤防火墙来说,配置安全策略时无法预知数据通道的端口号,因此无法确定数据通道的入口,这样就无法配置准确的安全策略。ASPF技术则解决了这一问题。ASPF检测IP层之上的应用层报文信息,并动态地根据报文的内容创建和删除临时的servermap表项,以允许相关的报文通过。
还是用回这张拓扑图,详细配置省略。使用Trust区域的FTP client访问Untrust区域的FTP server:
可以看到此时防火墙的会话表中,除了有FTP的控制通道产生的表项(从Trust区域到Untrust去取的出方向)外,还有数据通道产生的表项(从Untrust区域到Trust区域的入方向)。产生这样表项的原因就是防火墙应用了ASPF技术。
同样,我们通过命令查看生产的Server Map表项如下图所示:
Server Map表项是对FTP控制通道中动态检测过程中动态产生的。当报文通过防火墙时,ASPF将报文与指定的访问规则进行比较。如果规则允许,报文将接受检查,否则报文直接被丢弃。如果该报文是用于打开一个新的控制或数据连接,ASPF将动态的产生servermap表项,对于回来的报文当且仅当属于一个已经存在的有效的连接,才会被允许通过防火墙。在处理回来的报文时,状态表也需要更新。当一个连接被关闭或超时后,该连接对应的状态表将被删除,确保未经授权的报文不能随便透过防火墙。因此通过ASPF技术可以保证在应用复杂的情况下,依然可以非常精确的保证网络的安全。
Server-map是一种映射关系,当数据连接匹配了动态Server-map表项时,不需要再查找包过滤策略,保证了某些特殊应用的正常转发。当然还有另一种情况是,当数据连接匹配Server-map表,会对报文中IP和端口进行转换。
Server-map通常只是检查首个报文,通道建立后的报文还是根据会话表来转发。
(3)Server Map表的产生
目前,FW上生成Server-map表项共有如下几种情况:
① 配置ASPF后,转发FTP、RTSP等多通道协议时生成的Server-map表项。
② 配置ASPF后,转发QQ/MSN、TFTP等STUN类型协议时生成的三元组Server-map表项。
③ 配置NAT服务器映射时生成的静态Server-map。
④ 配置NAT No-PAT时生成的动态Server-map。
⑤ 配置NAT Full-cone时生成的动态Server-map。
⑥ 配置PCP时生成的动态Server-map。
⑦ 配置服务器负载均衡时生成的静态Server-map。
⑧ 配置DS-Lite场景下NAT Server时生成的动态Server-map。
⑨ 配置静态NAT64时生成的静态Server-map。
多通道协议会由客户端和服务器之间的控制通道动态协商出数据通道,即通信双方的端口号是不固定的。而在配置ASPF功能后,设备检测到控制通道的协商,根据关键报文载荷中的地址信息动态创建server-map表项,用于数据通道发起连接时进行查找。这个server-map表项包含了多通道协议报文中协商的数据通道的信息。
QQ/MSN等协议中,当用户登录之后,用户的IP地址和端口就固定下来了,可是会向该用户发起对话的另一方的IP地址和端口号是不固定的。通过配置STUN类型的ASPF,当QQ或者MSN等用户连接服务器时,设备会记录下用户的IP地址和端口信息,并动态生成STUN类型的Server-map。
Tips:这个server-map表项中仅包含三元组信息,即通信一方的IP地址,端口号和协议号。这样其他用户可以直接通过该IP和端口与该用户进行通信。
(4)端口识别对多通道协议的支持
端口识别是把非标准协议端口映射成可识别的应用协议端口。
试想实际工作中的例子:有时候网络中的服务器不一定会使用标准规定的协议端口号。其会把监听端口号改为一个非标准协议端口号。如下图中例子。FTP Server侦听的端口号从21改为31。
若防火墙制定以下安全策略:
且开启了应用层的高级通信过滤ASPF技术(是的,命令就是这么简单):
若此时FTP Client通过主动方式(PORT)向FTP Server发起FTP连接,ASPF技术会面临什么问题呢?我们可以按步骤分析:
Step 1:首先,FTP Client与FTP Server建立控制连接后,FTP Client会打开随机端口,并告诉FTP Server可以通过连接这个随机端口,来建立数据连接。一般正常情况下,FTP Server会使用端口TCP 20向FTP Client发起数据连接。
Step 2:打开了ASPF功能的防火墙,检测到了FTP协议的控制连接的协商,其会生成一个Server Map表项,当FTP Server使用 ,其IP作为源地址发回建立数据连接的请求报文时,防火墙会给予放行。
详细例子如下:当防火墙检测到FTP Client(10.0.0.1)使用TCP 21端口向FTP Server(20.0.0.1)发起建立控制连接时,会在其会话表生成一个表项:
10.0.0.1:随机端口 --> 20.0.0.1:21
防火墙根据ASPF技术检测到其为多通道协议流量,还需要打开一条新的连接。则自动生成一个Server Map表项,用于匹配回程的流量。对于回程流量当且仅当属于一个已经存在的有效的连接,才会被允许通过防火墙:
20.0.0.1 --> 10.0.0.1:随机端口
如下图所示:FTP服务器此时打开的监听端口号为21。
使用FTP Client发起连接,可以正常访问。
正是因为有了ASPF的映射关系,FTP Server才能向FTP Client传输数据,否则将会被防火墙拒绝。
Tips:这里必须选择主动方式(PORT),才能看到实验效果。若选择被动方式(PASV)。则无论控制通道和数据通道连接的发起都是从Trust区域到Untrust区域的出方向的。
Step 3:若现在FTP Server监听的端口改为TCP 31后,则FTP Client向FTP Server发起控制连接时使用的目的端口会改为TCP 31。
如下图所示:若将FTP服务器监听的端口号改为TCP 31。
则会显示连接失败,连接服务器超时。
此时查看防火墙的会话表,发现只有一条FTP Client(10.0.0.1)使用随机端口访问FTP Server(20.0.0.1)的TCP 31端口的会话。但防火墙并没有将该会话识别为FTP流量,而只是单单识别为普通的TCP连接。如下图所示:
因为FTP Server使用了非知名端口提供FTP服务,导致防火墙没有识别这条会话流量来启用ASPF技术。
Step 4:当用户使用非知名端口提供知名应用服务时,可以配置端口映射功能(port-mapping)使防火墙能够把该业务识别为知名应用,便于防火墙对该业务的数据进行准确的处理。
首先创建一条基本ACL(访问控制列表)来匹配流量。
端口识别基于ACL进行,只有匹配某条ACL的报文,才会实施端口映射。端口映射在使用ACL过滤报文时,使用报文的目的IP地址去匹配基本ACL中配置的源IP地址。
Tips:端口映射只能使用基本ACL(编号2000~2999)。
然后配置端口映射(或端口识别)。
端口映射功能只对安全域间的数据流动生效,因此在配置端口映射时,也必须配置安全区域和安全域间。
如下图所示:配置端口映射后,FTP Client就可以正常访问FTP Server了。
此时可以在会话表看到,防火墙将该条流量识别为FTP流量,并在建立一条控制连接的基础上,还生成了一条从FTP Server到FTP Client的数据连接。证明了现在可以正常建立FTP连接。
端口映射是对访问某个特定IP地址(例如FTP服务器)的报文进行应用识别,因此在匹配基本ACL规则时,使用报文的目的地址去匹配ACL规则中定义的源地址。
Tips:关于端口映射需要注意的事项
① 配置端口映射时,一个应用可以配置多个映射端口,一个端口可以映射为多个应用。但是必须通过ACL进行区分,匹配不同ACL的报文使用不同的映射关系。
② 端口映射支持的应用层协议包括FTP、HTTP、RTSP、PPTP、MGCP、MMS、SMTP、H323、SIP、SQLNET。
分片缓存
分片缓存功能用来缓存先于首片分片报文到达的后续分片报文,避免分片报文被防火墙丢弃。
网络设备在传输报文时,如果设备上配置的MTU(Maximum Transfer Unit)小于报文长度,则会将报文分片后继续发送。
我们知道,状态检测防火墙是依据首包检测机制进行过滤报文的,即防火墙除首包(如TCP的SYN包)可以生成会话表项外,其他数据包一律会予以丢弃。在理想情况下,各分片报文将按照固定的先后顺序在网络中传输。在实际传输过程中,可能存在首片分片报文不是第一个到达防火墙的现象,那么,就有可能发生非首片分片报文最先到达防火墙的情况,则防火墙予以丢弃。
为保证会话的正常进行,缺省情况下,防火墙支持分片缓存功能。设备会将非首片的分片报文缓存至分片散列表,等待首片到来建立会话后,将所有分片报文进行转发。若在指定的时间内首片分片报文没有到来,防火墙将丢弃分片缓存中的分片报文。
以下是实际应用中用到分片缓存功能的例子:
① 在VPN应用中(如IPSEC和GRE),由于需要设备对分片报文进行重组后解密或者解封装,设备才能进行后续处理,所以必须将设备配置成分片缓存状态,完成原始报文重组之后,才可以进行相应的加密解密处理。
② 在NAT应用中,需要设备对分片报文进行重组后才能正常解析和转换报文中的IP地址,所以也必须将设备配置成分片缓存状态,才可以正常进行NAT。
分片报文直接转发功能一般用在不进行NAT转换的情况下。开启该功能后,防火墙将收到的分片报文直接转发出去,不创建会话表。
命令:Firewall session aging-time fragment interval (1-40000)
配置分片缓存老化时间。
命令:Firewall fragment-forward enable/disable
开启/关闭分片报文直接转发功能。
长连接
为什么需要长连接?
① 防火墙会话表老化机制
当一个TCP会话的两个连续报文到达防火墙的时间间隔大于该会话的老化时间时,为保证网络的安全性,防火墙将从会话表中删除相应会话信息。这样,后续报文到达防火墙后,防火墙将丢弃该报文,导致连接中断。
② 会话老化机制给特殊业务带来的问题
在实际的网络环境中,某些特殊的业务数据流的会话信息需要长时间不被老化。
为了解决这一问题,防火墙支持在安全域间配置长连接功能,通过引用ACL定义数据流规则,为匹配ACL规则的特定报文的会话设置超长老化时间,确保会话正常进行。
Tips:关于长连接的必须知道的知识点
① 缺省情况下,长连接的老化时间为168小时(7*24小时)。
② 防火墙仅支持对TCP协议报文配置域间长连接功能。
③ 状态检测机制关闭时,非首包也可以建立会话表,所以此时不需使用长连接功能也可保持业务的正常运行。
命令:Firewall long-link aging-time time
配置长连接老化时间。
命令:Firewall interzone zone-name1 zone-name2
long-link acl-number { inbound | outbound }
开启长连接功能。