一、背景
通过FileZilla Server搭建 ftp服务器,现在为了安全考虑,需要开启防火墙,所以要设置防火墙规则。
二、问题
一开始是防火墙安全策略入站规则只放行了20、21端口,然后发现终端可以连接登录到FTP服务器,但是无法上传和下载文件。最终发现是FTP的主动模式和被动模式需要用到的TCP端口不一样,导致网络不通。而我FTP服务器采用的是被动模式。
三、解决方法
首先我们需要了解下原理,便于处理问题【FTP服务器主动模式和被动模式的区别】
FTP服务器主动模式
1、客户端首先打开随机端口A,连接到Ftp的命令控制端口(默认是21)
2、客户端再次打开一个不同于A的随机端口B
3、客户端使用PORT命令将打开的随机端口B发送给Ftp
4、Ftp使用20端口连接到客户端打开的随机端口B
5、Ftp和客户端使用20、B两个端口传输数据
此时服务器使用的端口20、21
FTP服务器被动模式
1、客户端首先打开随机端口A,连接到Ftp的命令控制端口(默认是21)
2、然后客户端发送PASV命令到Ftp服务端,然后Ftp将会打开一个随机端口B(端口号大于1023小于65535)
3、Ftp将打开的随机端口B发送给客户端
4、客户端再次打开一个不用于A的随机端口C,连接到Ftp打开的随机端口B
5、Ftp和客户端使用B、C两个端口传输数据
此时服务器使用的端口21、和协商之后确认的随机端口B
具体步骤如下
1、FileZilla Server配置,被动模式限制随机端口范围,默认为0-65535,不然防火墙入站规则需要放通所有端口,这和没限制没有区别了。
2、配置之后,客户端连接访问,通过抓包可以看到整个FTP登录下载的数据包协商过程
抓包验证
客户端使用随机端口55893 访问 ftp服务器的21端口建立连接
并且协商数据传输使用的端口为50100(此端口在上一步限制的端口访问内)
客户端再使用另一个随机端口56822访问ftp服务器的50100端口进行下载
文件上传同理
3、知道了原理之后,我们就可以在防火墙设置入站规则了
新增一条入站规则FTP
指导协议端口为TCP,端口范围21,50100-52100