ASPF
ASPF(Application Specific Packet Filter)是针对应用层的包过滤,其原理是检测通过设备的报文的应用层协议信息,记录临时协商的数据连接,使得某些在安全策略中没有明确定义要放行的报文也能够得到正常转发。
通过以下实验说明,ASFP:
FTP客户端经过防火墙访问FTP服务器
配置完成后,尝试登陆FTP服务器,可以正常登陆,但是不能够正常进行数据连接。
查看会话状态:
已经成功建立session会话。
FTP协议是一个典型的多通道协议,在其工作过程中,FTP Client和FTP Server之间将会建立两条连接:控制连接和数据连接。控制连接用来传输FTP指令和参数,其中就包括建立数据连接所需要的信息;数据连接用来获取目录及传输数据。数据连接使用的端口号是在控制连接中临时协商的。
根据数据连接的发起方式FTP协议分为两种工作模式:主动模式(PORT模式)和被动模式(PASV模式)。主动模式中,FTP Server主动向FTP Client发起数据连接;被动模式中,FTP Server被动接收FTP Client发起的数据连接。
FTP主动模式:
-
FTP客户端向FTP服务器的21端口发起连接建立控制通道
-
客户端通过PORT命令协商客户端使用的数据传输端口号。
- 协商成功后,服务器主动向客户端的这个端口号发起数据连接。 而且每次数据传输都会协商不同的端口号。
服务器向客户端发起数据连接的源/目的端口号分别是20和临时协商的端口号yyyy,显然不是这条连接的后续报文,无法命中此会话转发。因此会出现可以验证用户密码,但是无法获取目录列表的现象。
可以新增策略,放行服务器到客户端方向的安全策略,但是这样必须开放客户端的所有端口有安全隐患。
别急,万能的防火墙都能实现。这就是本期要出场的神秘人物ASPF(Application Specific Packet Filter)。ASPF是针对应用层的包过滤,其原理是检测通过设备的报文的应用层协议信息,记录临时协商的数据连接,使得某些在安全策略中没有明确定义要放行的报文也能够得到正常转发。
记录临时协商的数据连接的表项称为Server-map表1,这相当于在防火墙上开通了“隐形通道”,使得像FTP这样的特殊应用的报文可以正常转发。当然这个通道不是随意开的,是防火墙分析了报文的应用层信息之后,提前预测到后面报文的行为方式,所以才打开了这样的一个通道。
Server-map表在防火墙转发中非常重要,不只是ASPF会生成,NAT Server、SLB等特性也会生成Server-map表,后续在其他帖子中强叔还会提及。
只需要在域间配置增加detect ftp即可
此时查看Server-map,可以看到已经自动生成了维护FTP数据连接的表项:
Server-map表中记录了FTP服务器向FTP客户端的2071端口号发起的数据连接,服务器向客户端发起数据连接时将匹配这个Server-map表转发,而无需再配置反向安全策略。
数据连接的第一个报文匹配Server-map表转发后,防火墙将生成这条数据连接的会话,该数据连接的后续报文匹配会话表转发,不再需要重新匹配Server-map表项。
正常访问,防火墙session状态:
Server-map表项由于一直没有报文匹配,经过一定老化时间后就会被删除。这种机制保证了Server-map表项这种较为宽松的通道能够及时被删除,保证了网络的安全性。当后续发起新的数据连接时会重新触发建立Server-map表项。
配置了ASPF可以生成动态维护临时协商的数据连接的表项,既简化了安全策略的配置又确保了安全性
被动模式下的流程:
ASPF, 1.1.1.1 -> 2.2.2.2:zzzz[any], Zone: ---
Protocol: tcp(Appro: ftp-data), Left-Time: 00:00:30, Addr-Pool: ---
VPN: public -> public
配置实例
USG6000V1:
#
ip vpn-instance default
ipv4-family
#
#内网Trust Zone接口
#
interface GigabitEthernet0/0/0
undo shutdown
ip binding vpn-instance default
ip address 192.168.1.1 255.255.255.0
#外网Untrust Zone接口
#
interface GigabitEthernet1/0/1
undo shutdown
ip binding vpn-instance default
ip address 10.1.1.1 255.255.255.0
#
#安全级别,与接口配置
#
firewall zone local
set priority 100
#
firewall zone trust
set priority 85
add interface GigabitEthernet0/0/0
#
firewall zone untrust
set priority 5
add interface GigabitEthernet1/0/1
#
#Nat地址指向Null0避免环路
#
ip route-static vpn-instance default 10.1.1.10 255.255.255.255 NULL0
ip route-static vpn-instance default 10.1.1.11 255.255.255.255 NULL0
ip route-static vpn-instance default 10.1.1.12 255.255.255.255 NULL0
ip route-static vpn-instance default 10.1.1.13 255.255.255.255 NULL0
ip route-static vpn-instance default 10.1.1.14 255.255.255.255 NULL0
ip route-static vpn-instance default 10.1.1.15 255.255.255.255 NULL0
#
#Nat地址池
#
nat address-group nat-pool1 0
mode pat
section 10 10.1.1.10 10.1.1.15
#
#需要映射的源地址set。通过address-set 或者service-set方式,修改时直接修改set信息即可。
#
ip address-set saddr_192.168.1.0/24 type object
address 192.168.1.0 0.0.0.255
#
#ASPF 监控ftp
#
firewall interzone trust untrust
detect ftp
#
#安全策略
#
#放开client访问ftp的21端口(需要detect ftp,不然ftp不能正常通信)
security-policy
rule name ftp
source-zone trust
destination-zone untrust
source-address 192.168.1.0 24
service ftp
action permit
#放开防火墙自身ping所有zone的权限,用于连通性测试
rule name icmp
source-zone local
source-zone trust
service icmp
action permit
#
#Nat策略,
#
nat-policy
rule name policy_nat1
source-zone trust
destination-zone untrust
source-address address-set saddr_192.168.1.0/24
action nat address-group nat-pool1
#