通过ISA防火墙允许FXP
FXP(File Exchange Protocol,文件交换协议)是用于在FTP服务器间交换文件的协议,属于FTP命令的子集。它的工作步骤如下:
FTP控制客户端同时连接到FXP源和目的FTP服务器(无论FTP服务器工作在PORT模式还是PASV模式);
FTP控制客户端向FXP的源FXP服务器(被下载的FTP服务器)发送一个PASV指令,让它开放一个数据连接端口等待连接;
FTP控制客户端向FXP的目的FXP服务器(上传到的FTP服务器)发送一个PORT指令,让它去连接源FXP服务器开放的数据连接端口;
当连接成功时,FXP服务器之间就可以进行文件传输操作了。
为了完成FXP,FTP服务器和FTP控制客户端都必须支持使用FXP,并且至少有一方FTP服务器支持PASV模式。默认情况下,FXP的源FTP服务器工作在PASV模式,而FXP的目的FTP服务器工作在PORT模式,你可以通过修改FTP控制客户端的选项来修改它们的工作模式。
但是,FXP所使用的FTP命令不受ISA防火墙的FTP访问筛选器支持,所以如果要使用FXP,必须自行创建协议来允许FTP客户端对FTP服务器的访问;只要FTP客户端可以正常访问FTP服务器,就可以进行FXP传输。但是,当取消使用FTP访问筛选器时,如果FTP服务器工作在PORT模式,ISA防火墙不能正确识别FTP服务器到FTP客户端的FTP数据连接,从而导致PORT模式下FTP连接失败,所以,你需要额外创建一条访问规则允许FTP服务器到FTP客户端的数据连接。
在这篇文章中,我使用的FTP控制客户端软件是FlashFXP,使用的FTP服务器是Serv-U,默认情况下它们均支持FXP。试验中所使用的FTP服务器的服务控制端口均为21,并且允许了使用PASV模式。为了便于在ISA防火墙上进行发布,我将FTP服务器所使用的PASV端口限制为31000~31020,如下图所示。
根据FTP服务器的配置,我在ISA防火墙中创建了以下三个规则元素,并在不同的环境中使用:
1、入站协议FTP 21 Server(TCP入站端口21,TCP入站端口31000~31020),用于FTP服务器发布;
2、出站协议FTP 21(TCP出站端口21,TCP出站端口31000~31020),用于允许到FTP服务器的访问;
3、出站协议TCP 1025-65535(TCP出站端口1025~65535),用于允许FTP服务器到FTP客户端的数据连接;
根据FTP服务器和ISA防火墙之间不同的部署环境,我分为三个部分进行阐述。在这篇文章中,我将省略创建访问规则和发布规则的具体步骤,关于这方面的详细信息,请参见ISA中文站上的相关技术文章。
1、ISA防火墙作为FTP控制客户端
当ISA防火墙作为FTP控制客户端时,你应该让FTP服务器工作在PASV模式,否则你需要创建一条访问规则允许FTP服务器到FTP客户端(ISA防火墙)的FTP数据连接,这会给ISA防火墙带来极大的安全隐患。
思考一下当ISA防火墙作为FTP控制客户端时,FXP是怎么工作的:ISA防火墙只是连接到这两台FTP服务器,然后发出FXP控制指令,之后就是这两台FTP服务器之间自行进行传输数据。因此,当ISA防火墙作为FTP控制客户端时,问题的核心在于如何让ISA防火墙正常的连接到这两台FTP服务器。
如下图中的网络环境,ISA防火墙(10.2.1.1)将控制内部网络中的两台FTP服务器(10.2.1.8、10.2.1.5)进行FXP传输。
我创建了以下两条访问规则,规则元素的详细说明参见前文介绍。其中第二条访问规则用于允许内部FTP服务器向FTP客户端(ISA防火墙)发起数据连接,只有当FTP服务器工作在PORT模式时才需要,在此我是禁用了的,因为这条规则会极大的降低ISA的安全性,强烈推荐不要使用此规则(即让FTP服务器工作在PASV模式)。
然后,在ISA防火墙上运行FlashFXP,通过PASV模式连接到这两台FTP服务器,进行FXP传输,成功,如下图所示:
2、通过ISA防火墙对外发布的内部FTP服务器进行FXP传输
当通过ISA防火墙对外发布的内部FTP服务器需要进行FXP传输时,需要注意以下两点:
如果此内部FTP服务器工作在PASV模式,你需要设置FTP服务器使用ISA防火墙侦听的外部网络IP地址作为PASV IP地址;
如果此内部FTP服务器工作在PORT模式,你需要允许内部FTP服务器到外部FTP客户端的FTP数据连接;
如下图中的网络环境,内部的FTP服务器Denver通过ISA防火墙对外发布,侦听的外部IP地址是ISA防火墙的外部IP地址61.139.0.1,我将在Denver和Internet上的FTP服务器Perth之间进行FXP传输,Perth作为FTP控制客户端。
首先,我们将Denver设置为工作在PASV模式,因此需要设置它使用的PASV IP地址为ISA防火墙对外发布的IP地址61.139.0.1,如下图所示:
我创建的发布规则如下,规则元素的详细说明参见前文介绍。因为是使用外部的FTP服务器Perth作为FTP控制客户端,所以无需允许其他FTP控制客户端的FTP访问,如果其他主机作为FTP控制客户端,可能还需要创建额外的访问规则允许其FTP访问:
然后,在外部FTP服务器Perth上运行FlashFXP,通过PASV模式连接到这两台FTP服务器,进行FXP传输。默认情况下,FXP的源FTP服务器工作在PASV模式,而FXP的目的FTP服务器工作在PORT模式,因此当Denver作为源FXP服务器时,传输不会出现问题;
而当Denver作为目的FXP服务器时,Denver发起的FTP数据连接将会ISA防火墙阻止,导致传输失败。你可以配置FlashFXP让Denver作为目的FXP服务器时也工作在PASV模式,如下图所示:
或者在ISA防火墙上创建访问规则允许Denver到Perth的FTP数据连接,如下图第一条规则所示:
此时,Denver即可正常使用PORT模式进行FXP传输。
1、ISA防火墙作为FTP控制客户端
当ISA防火墙作为FTP控制客户端时,你应该让FTP服务器工作在PASV模式,否则你需要创建一条访问规则允许FTP服务器到FTP客户端(ISA防火墙)的FTP数据连接,这会给ISA防火墙带来极大的安全隐患。
思考一下当ISA防火墙作为FTP控制客户端时,FXP是怎么工作的:ISA防火墙只是连接到这两