主动模式和被动模式下的 FTP 服务器端口

Posted

技术标签:

【中文标题】主动模式和被动模式下的 FTP 服务器端口【英文标题】:FTP Server Ports in Active Mode and Passive Mode 【发布时间】:2014-01-14 03:26:03 【问题描述】:

在主动模式下,FTP 将使用一个端口连接到客户端端口。那么在这种模式下,FTP在发起传出连接时是否可以使用不同的本地端口(这意味着FTP对所有数据通道都有不同的本地端口)?

在被动模式下,FTP 会通过命令通道向客户端发送一个端口号,然后监听这个端口号。那么在这种模式下,FTP 是否可以一直向该模式下的客户端发送一个相同的本地端口号,例如 1234(这意味着 FTP 对所有数据通道都具有相同的本地端口)?

有没有什么方法可以为FTP服务器配置这样的数据端口?我们假设 FTP 服务器将在 NAT 之后工作。

关于 FTP 主动模式和被动模式,请参阅 this post 和 this article

【问题讨论】:

【参考方案1】:

我假设您使用的是 vsftpd,因为您将帖子标记为 linux,这是现代 Linux 机器上最常见的服务器。

对于活动模式,您可以禁用 vsftpd.conf 中的 connect_from_port_20 选项,以使服务器使用临时本地端口进行活动 (PORT) 传出数据连接。此选项的默认值为NO,但大多数发行版的库存配置文件将其设置为YES。如果设置为YES,您还可以设置ftp_data_port 选项以使用20 以外的固定本地数据端口。

对于被动模式,一般不支持这个,因为promiscuous connections的可能性。如果服务器要允许来自客户端 IP 地址以外的 IP 地址的传入数据连接,它必须使用自己的本地端口号来跟踪哪些数据连接对应于哪些控制连接。

但是,您可以通过设置 pasv_max_portpasv_min_port 选项来限制服务器用于 PASV 连接的本地端口的范围

有关所有这些配置选项的更多信息,请参阅the vsftpd documentation。

【讨论】:

是的,我们正在使用 VSFTP。对于被动模式,是否允许将 pasv_max_port 和 pasv_min_port 设置为相同的数字?如果是,那么我们可以让 FTP 服务器使用同一个本地数据端口。 因为在NAT后面,所以我认为唯一的选择是被动模式。关于部分——“它必须使用自己的本地端口号来跟踪哪些数据连接对应于哪些控制连接”,我不明白。据我所知,ftp服务器可以通过(LocalIP,LocalPort,PeerIP,PeerPort)区分所有连接,所以即使使用相同的LocalIP,LocalPort仍然可以区分这些连接,不是吗? 我不知道如果将最小/最大值设置为相同的数字会发生什么。我建议尝试一下,我想它可能会起作用。至于区分连接,不,如果支持 FXP(“混杂连接”),则不能假定传入数据连接的远程地址/端口与控制连接的远程地址/端口匹配。它可能是连接到数据端口以传输数据的第三方代理。阅读 FXP 上的***链接。 它可以工作,但一次只能服务一个客户。

以上是关于主动模式和被动模式下的 FTP 服务器端口的主要内容,如果未能解决你的问题,请参考以下文章

FTP Port主动模式 Passive被动模式区别-Filezilla Server设置Passive被动模式

ftp主被动模式及k8s等沙箱环境使用ftp的问题

FTP两种工作模式:主动模式(Active FTP)和被动模式

如何设置FTP的主动模式和被动模式

请高手介绍一下ftp的主动连接和被动连接

如何设置FTP的主动模式和被动模式