得劲

解决宝塔面板pure-ftpd以 PASV 模式连接失败
问题 环境:阿里云ECS+Ubuntu 16.04.4 LTS+宝塔面板 FTP连接失败 FlashFXP PO...
扫描右侧二维码阅读全文
11
2018/09

解决宝塔面板pure-ftpd以 PASV 模式连接失败

问题

环境:阿里云ECS+Ubuntu 16.04.4 LTS+宝塔面板
FTP连接失败

FlashFXP PORT模式连接可用,但是如果想使用宝塔面板的FTP备份功能就不行了。

何为PASV/PORT

什么是ftp中的PASV和PORT模式
FTP的连接一般是有两个连接的,一个是客户程和服务器传输命令的,另一个是数据传送的连接。FTP服务程序一般会支两种不同的模式,一种是Port模式,一种是Passive模式(Pasv Mode),先说说这两种不同模式连接方式的分别:
先假设客户端为C,服务端为S。

所谓Port模式:

当客户端C向服务端S连接后,使用的是Port模式,那么客户端C会发送一条命令告诉服务端S(客户端C在本地打开了一个端口N在等着你进行数据连接),当服务端S收到这个Port命令后就会向客户端打开的那个端口N进行连接,这种数据连接就生成了。

所谓Pasv模式:

当客户端C向服务端S连接后,服务端S会发信息给客户端C,这个信息是(服务端S在本地打开了一个端口M,你现在去连接我吧),当客户端C收到这个信息后,就可以向服务端S的M端口进行连接,连接成功后,数据连接也建立了。
从上面的解释中,可以看到两种模式主要的不同是数据连接建立的不同,对于Port模式,是客户端C在本地打开一个端口等服务端S去连接建立数据连接;而Pasv模式就是服务端S打开一个端口等待客户端C去建立一个数据连接。
FTP需要2个端口,一个端口是作为控制连接端口,也就是21这个端口,用于发送指令给服务器以及等待服务器响应;另一个端口是数据传输端口,端口号为20(仅PORT模式),是用来建立数据传输通道的,主要有3个作用:
1.从客户向服务器发送一个文件。
2.从服务器向客户发送一个文件。
3.从服务器向客户发送文件或目录列表。
注意:所有FTP服务器软件都支持PORT方式,大部分FTP服务器软件PORT方式和PASV方式都支持,有些FTP服务器不支持PASV方式都支持,故造成了PASV 模式失败,正在尝试 PORT错误 或者 数据Sock错误。对症下药,解决的方法其实很简单――取消PASV模式。
来源

解决办法

问题所在

刚开始PORT模式也是不可用的,因为主机是阿里云,所以默认21端口是不打开的,后来在控制台的规则里添加了之后又在linux防火墙里加上21端口,才是现在的情况,于是猜想应该PASV模式需要的端口应该也没有打开。

查看端口

打开 /www/server/pure-ftpd/etc/pure-ftpd.conf

可以看到需要打开的端口为39000-40000

打开端口

ECS控制台设置


Ubuntu防火墙


iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 39000:40000 -j ACCEPT
打开端口之后重新连接测试,成功

Last modification:September 11th, 2018 at 01:46 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment