应用层程序有些使用的是单通道协议,有些使用的是多通道协议。
单通道协议
例如http协议,整个协议交互过程中,服务端和客户端只建立一个连接,并且服务端固定使用一个端口,例如80端口,这种一般为单通道协议;
防火墙一般都需要配置精细的安全策略对数据进行防护,针对这种单通道协议,例如http,只需要放行客户端的随机端口到服务器端的80端口就可以了,比较简单。
多通道协议
例如FTP协议,整个协议交互过程中,客户端和服务器端使用了两个独立的连接,控制连接和数据连接,控制连接服务器端使用了固定的端口21,但是数据连接则使用了随机的端口;
防火墙针对这种多通道协议的数据连接则较难写安全策略,例如FTP的被动模式,客户端和服务器端的端口都是随机的,那防火墙就很难写精细的安全策略放行此类数据。
常见的多通道协议有FTP,SIP,H323,RSTP,DNS,MSN,QQ,WeChat等;
ASPF(Application Specific Packet Filter,应用层的包过滤)是一种针对应用层的包过滤技术,也称为基于状态的报文过滤。
防火墙的ASPF技术配合server-map表项就用于解决多通道协议的数据连接策略,以FTP为例,上面已经了解,FTP有控制连接和数据连接,在控制连接上服务器端使用固定的端口21,防火墙是可以定义策略的,允许客户端的任意端口访问服务器端的TCP21端口即可,后续控制连接的其他报文会被识别为此控制连接的后续报文,允许通过,这样FTP的控制连接就可以正常建立了;
对于数据连接的主动模式,如果服务器端使用固定端口20的情况下,需要放行服务器端20端口到客户端任意端口的报文,对于客户端在防火墙内部的情况,这种策略是比较危险的,因为一般是不允许外部主动向内部发起访问的,而且对于服务器使用随机数据端口的场景,防火墙的策略则需要放行服务器端的任意端口到客户端的任意端口,显示这对于防火墙策略就更宽松了,很难达到防护的效果;
对于数据连接的被动模式,因为客户端的随机端口访问服务器端的随机端口,如果客户端在防火墙内部,则还可以写一下,但是策略依旧是很宽松的,对于客户端在防火墙外侧的场景,要放行外部客户端的任意端口访问内部服务器的任意端口,防火墙策略一般是不允许的。
总之,通过上面的描述可知,防火墙基于会话的安全策略机制在FTP这种多通道协议的场景是非常不友好的,如果写的严格一些,就会出现FTP的控制连接可以建立,但是数据无法传输的情况。那要如果解决呢?这就需要通过防火墙的ASPF机制和server-map结合来解决上述问题了。
还是以FTP为例,FTP的数据连接使用端口虽然是随机的,但是通过FTP原理的描述,我们知道这个随机端口是在控制协议中确定出来的,例如FTP主动模式的PORT命令和被动模式的PASV命令,都是为了确定数据连接中客户端的端口和服务器端的端口,而ASPF会监控FTP控制连接的报文,获取到PORT命令或PASV命令中的地址和端口信息,自动将这个信息写入到防火墙的Server-map表中,形成一条Server-map表项,后续的数据报文就会匹配到该表项,就无需再去匹配防火墙的策略和会话表,直接放行后续数据,这样数据连接就可以正常建立,而防火墙的安全策略只需要写第一个控制连接的报文即可。
防火墙的Server-map表如下,实现的就是自动生成的主动模式下的数据连接会话:
以FTP协议的主动模式(服务器主动访问客户端)为例,FW检测PORT命令报文的应用层信息,将应用层携带的IP地址和端口记录在Server-map表中。
FTP主动模式下,客户端使用随机端口xxxx向服务器的21端口发起连接请求建立控制通道,然后使用PORT命令协商两者建立数据通道的端口号,协商出来的端口是yyyy。然后服务器主动向客户端的yyyy端口发起连接请求,建立数据通道。数据通道建立成功后再进行数据传输。
在配置安全策略时,如果只配置了允许客户端访问服务器的21端口的安全策略,即控制连接能成功建立。但是当服务器访问客户端yyyy端口的报文到达FW后,对于FW来说,这个报文不是前一条连接的后续报文,而是代表着一条新的连接。要想使这个报文顺利到达FTP客户端,FW上就必须配置了安全策略允许其通过,如果没有配置服务器到客户端这个方向上的安全策略,该报文无法通过FW,导致数据通道建立失败。结果是用户能访问服务器,但无法请求数据。
如果通过安全策略解决此问题,数据通道使用的端口是在控制通道中临时协商出来的,具有随机性,无法精确预知,所以只能开放客户端的所有端口,这样就会给客户端带来安全隐患。ASPF功能正是为了解决此问题。
下图显示了主动模式下ASPF和server-map表的实现过程,由于PORT命令的应用层信息中携带了客户端的IP地址和向服务器随机开放的端口,FW通过分析PORT命令的应用层信息,提前预测到后续报文的行为方式,根据应用层信息中的IP和端口创建Server-map表。服务器向客户端发起数据连接的报文到达FW后命中该Server-map表项,不再受安全策略的控制。
server-map表项类似这样:
ftp-data VPN:public->public 2.2.2.2:20 --> 1.1.1.1:yyyy
FTP被动模式下,客户端使用随机端口xxxx向服务器的21端口发起连接请求建立控制通道,然后使用PASV命令协商两者建立数据通道的端口号,协商出来的端口是yyyy。然后客户端主动向服务器的yyyy端口发起连接请求,建立数据通道。数据通道建立成功后再进行数据传输。
在配置安全策略时,如果只配置了允许客户端访问服务器的21端口的安全策略,即控制连接能成功建立。但是当客户端访问服务器yyyy端口的报文到达FW后,对于FW来说,这个报文不是前一条连接的后续报文,而是代表着一条新的连接。要想使这个报文顺利到达服务器,FW上就必须配置了安全策略允许其通过,如果没有配置客户端到服务器的yyyy端口的安全策略,该报文无法通过FW,导致数据通道建立失败。结果是用户能访问FTP服务器,但无法请求数据。
下图显示了主动模式下ASPF和server-map表的实现过程,由于PASV命令的应用层信息中携带了数据连接中客户端使用的ip地址和端口号,防火墙通过分析PASV命令中的参数,提前预测到后续报文的行为方式,根据应用层信息中的IP和端口创建Server-map表。后续客户端向服务器端发起的数据连接就会命中该server-map表项,不用查询防火墙的策略表就可以放行后续报文。
server-map表项类似这样:
ftp-data VPN:public->public 1.1.1.1:aaaa --> 2.2.2.2:yyyy
上面的ASPF+Server-map实现防火墙透传FTP报文的需求是针对标准的FTP灯多通道协议进行识别的,一般只有控制连接的端口号为TCP21才会被识别为FTP报文,进而被ASPF进行分析,但是在生产中我们有时出现安全考虑会把FTP是端口使用非标准端口,这就会导致ASPF无法识别这是FTP协议,无法生产数据连接的Server-map表现。
此时我们需要额外配置端口识别功能,让ASPF知道这就是FTP报文,进行数据连接的端口分析,使用方式如下:
华为/华三
# 把匹配acl 2000的报文,建立端口号31到FTP协议的映射
acl 2000
rule permit source 10.1.2.0 0.0.0.255
exit
port-mapping FTP port 31 acl 2000
需求:Device为连接内部网络与外部网络的边界设备,内网中的本地用户PC访问公网上的ftp服务器。在Device上配置ASPF策略,将设备报文入接口Gi0/2/0加入安全级别高的安全域,出接口Gi0/2/1加入安全级别低的安全域,ASPF和安全域协同工作,安全域之间的报文由安全策略进行安全检查,实现ftp多通道协议检测功能。
拓扑:
配置步骤:
配置ASPF策略开启ftp数据通道检测功能。
Device#configure terminal
Device(config)#aspf policy 1
Device(config-aspf-policy)#detect ftp
Device(config-aspf-policy)#exit
配置安全策略和安全域。
#配置源安全域对象zone1,目的安全域对象zone2。
Device(config)#security zone name zone1
Device(config-security-zone)#import interface gigabitethernet 0/2/0
Device(config-security-zone)#priority 80
Device(config-security-zone)#exit
Device(config)#security zone name zone2
Device(config-security-zone)#import interface gigabitethernet 0/2/1
Device(config-security-zone)#priority 60
Device(config-security-zone)#exit
#配置安全策略匹配源安全域zone1和目的安全域zone2,动作action为inspect aspf policy。
Device(config)#security policy 1
Device(config-security-policy)#match source security-zone zone1
Device(config-security-policy)#match destination security-zone zone2
Device(config-security-policy)#action inspect aspf-policy 1
Device(config-security-policy)#exit
检验结果。
#查看策略号为1的ASPF配置信息。
Device#show aspf policy 1
ASPF policy configuration:
Policy Id: 1
Policy description:
TCP SYN packet check: Disable
ICMP error message check: Disable
Inspected protocol:
ftp
#内部私网PC从安全级别高的安全域的接口向安全级别低的安全域的接口的服务器采用PORT方式进行ftp传送数据,上传、下载文件成功,数据通道预期连接建立正确。
Device#show connection ipv4 table lpu 0
Device0: LPU 0, IPV4 connection table
Protocol Source:port Destination:port/other State Lifetime Vrf
-------- --------------------- --------------------- ---------- -------- --------
TCP [1.1.1.2]:4945 [203.18.10.2]:21 tcp-time-wait 1 global
TCP [203.18.10.2]:20 [1.1.1.2]:4946 tcp-time-wait 1 global
#内部私网PC从安全级别高的安全域的接口向安全级别低的安全域的接口的服务器采用PASV方式进行ftp传送数据,上传、下载文件成功,数据通道预期连接建立正确。
Device#show connection ipv4 table lpu 0
Device0: LPU 0, IPV4 connection table
Protocol Source:port Destination:port/other State Lifetime Vrf
-------- --------------------- --------------------- ----------- -------- --------
TCP [1.1.1.2]:49320 [203.18.10.2]:21 tcp-time-wait 1 global
TCP [1.1.1.2]:38805 [203.18.10.2]:11656 tcp-time-wait 1 global
#从外部网络发起各种连接的报文无法进入内部网络。