我正在尝试在窗口命令提示符中连接 Linux FTP 服务器,当 FTP 端口为默认端口 (20, 21) 时,它可以正常工作
在我更改 FTP 的默认端口 FTP-DATA 后,它就无法正常工作了
是的,我确实检查了防火墙(即使停止防火墙也是一样的),是的,我确实检查了 vsftpd.conf 文件
还有其他东西可以检查端口是否发生变化吗?我认为只有 vsftpd.conf 才会影响 FTP 和 FTP-DATA 端口
- 当端口为默认端口(20、21)时工作正常
- 425 无法建立连接。当我更改端口时
这是我的 /etc/vsftpd/vsftpd.conf 文件
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
listen_port=39021 # add this
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=NO
ftp_data_port=39020 # add this
xferlog_std_format=YES
ftpd_banner=Welcome to blah FTP service.
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
listen=YES
port_enable=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=NO
pasv_enable=YES # add this
pasv_min_port=60019 # add this
pasv_max_port=60020 # add this
pasv_address=[My IP] # add this
allow_writeable_chroot=YES
port_promiscuous=YES # add this
答案1
这些信息不足以给出完整的答案。但你必须始终记住,FTP 不是一个简单的协议。在最简单的情况下,积极的FTP 的工作原理如下:
- 您与端口 21(FTP 服务器)建立控制连接,通过该连接
- 您进行身份验证
- 你告诉服务器在哪里建立连接(IP 和端口)
- 您命令服务器开始传输
- 这服务器使其他连接到您告诉它的IP和端口并发送或接收数据。
通常在步骤 3 中,你会告诉服务器你的 IP 和 FTP 客户端正在监听的端口,因此在步骤 5 中会建立另一个连接反方向,从服务器到您。
如果中间有防火墙,情况会怎样?假设您启用了服务器上端口 21(或您使用的任何端口)上的数据包接收功能。您可以建立控制连接。那么,服务器建立的反向数据连接怎么样?如何启用它?
有两种情况:要么静态地允许某个端口(或范围),并将 FTP 客户端配置为始终使用该端口,要么你有一个非常智能的防火墙,它会主动偷听在控制连接上,提取 IP 和端口,并动态创建允许反向连接的临时规则。这称为自适应网格网关代表应用级网关。
防火墙如何知道要窃听哪些连接?它知道 FTP 通过 TCP/21 工作,因此它只需查找该端口上的任何流量。如果您更改控制端口会怎样?您可能已经猜到了:ALG 将不起作用。防火墙不会添加额外的动态规则,因此反向数据连接尝试不会成功。
希望如果您将“ALG”配置为使用非默认端口,问题将得到解决。然而,情况并非总是如此。首先询问,哪个我们谈论的是什么防火墙?现代世界在两端和两端大量使用防火墙,而且 NAT 的使用也非常广泛(包括 ISP 使用的 CGN)。任何 NAT 也需要 ALG:它需要针对位于 NAT 后面并启动事务的客户端创建动态转换规则。只有当您能够按照您想要的方式配置沿路径的每个 ALG 时,您才有可能以这种方式成功。明白我的意思了吗?
那里有两个常见解决方案。首先,很简单:依靠 ALG,它要求您永远不要更改默认的 FTP 控制端口(老实说,我已经管理服务器 20 年了,但我仍然不明白使用非默认端口的意义。这造成的问题比解决的问题还多)。其次,也很简单:使用被动 FTP 模式。
这被动的FTP 的工作原理如下:
- 您连接到端口 21(FTP 服务器),通过该端口
- 您进行身份验证
- 你进入被动模式,服务器回复IP和端口
- 您命令服务器开始传输
- 你与服务器告诉您的IP和端口建立另一个连接并接收或发送数据。
请注意,唯一改变的步骤是步骤 3 和 5。它们避免了反向连接。
这部分解决了非默认端口和非受控 ALG 的问题。它还允许在控制连接上使用加密(这本质上会破坏 ALG)。