本文先给出一条清晰的排查思路:先确认是网络链路或端口被阻断(包含阿里云安全组、VPC/路由、服务器防火墙、NAT/SLB),再检查 FTP 服务配置与用户/目录权限(被动/主动模式、被动端口范围、chroot、SELinux/ACL、FTP 类型是否为 SFTP/FTPS),最后用日志与抓包定位问题。按照“网络优先、服务次之、权限最后”的顺序逐项验证,能快速定位< b>FTP连接不上的真实原因。
首步用基础网络工具验证:在本地或另一台服务器上执行 ping、traceroute/tracepath 看链路;再用 telnet 或 nc 测试 端口21(telnet your.server.ip 21)以及被动端口范围(如1024-1048)。若 telnet 无法连通,先查看阿里云控制台的 安全组规则与子网路由是否允许入站 TCP 21 及被动端口,若使用 SLB/负载均衡还需开放对应端口并绑定后端实例。
在服务器端检查系统防火墙(iptables、firewalld、ufw)规则:sudo iptables -L -n 或 sudo firewall-cmd --list-all。若存在阻断,添加允许规则并保存。注意云上还有网络ACL与安全组双重限制,二者均需放通。若启用 SELinux,查看是否有拒绝记录(ausearch、audit.log),必要时临时禁用或调整布尔值(setsebool)。
被动模式需服务端打开一段端口范围并在 FTP 配置中设置外网 IP(pasv_address)以返回给客户端。常见错误是未开放该范围或返回的是内网 IP 导致客户端无法建立数据连接。验证方法:在服务端配置 pasv_min_port/pasv_max_port,开放这些端口并在客户端切换到 被动模式 测试;抓包(tcpdump)可看到服务器返回的 PASV 地址与端口。
登录服务器用 netstat -tulpn 或 ss -lntp 检查 vsftpd/proftpd/ftpd 是否在监听 21 与被动端口。查看服务日志(/var/log/vsftpd.log、/var/log/messages、/var/log/auth.log)获取错误信息,如认证失败、被 chroot 限制或写权限不足等。可以用ftp、lftp或FileZilla客户端并开启详细日志来复现问题。
权限问题常体现在用户登录后无法列目录或上传:检查 /etc/vsftpd.conf 中的 local_enable、write_enable、chroot_local_user、allow_writeable_chroot 等项;确认用户家目录和子目录的属主与权限是否符合 chroot 要求(很多 FTP 服务要求 chroot 目录不能是可写的)。同时核实用户 shell 是否被禁止(/etc/shells),以及 PAM 或虚拟用户配置是否正确。
很多用户混淆三者:SFTP 是通过 SSH(端口22)传输,与 FTP/FTPS 不同;FTPS 在 21 上使用 TLS 协商,可能需要额外的被动端口。确认客户端使用的协议与服务端配置一致。如无法连接 21,但 22 可连,可能是 SFTP 而非 FTP,应使用 SSH/SFTP 客户端。
当基础检查未解决时用 tcpdump -i eth0 host your.client.ip and port 21 捕获握手包,查看是否有 SYN 到达和 SYN-ACK 返回;对被动模式也抓对应端口范围的数据包。结合服务端日志(登录、数据连接、TLS 握手失败等条目),可以判断是网络丢包、端口未开放、被动地址错误或证书问题。
若实例绑定了私有网络或处于 NAT 网关/SLB 后面,FTP 被动模式需要将 PASV 返回的地址设置为公网 EIP,并保证 NAT/SLB 转发被动端口到后端实例。阿里云香港的 VPC 与路由策略可能与地域差异相关,检查实例是否有公网 IP(EIP)并在 FTP 配置中填写该公网地址。