你看到的“拒绝”大概率是 Connection refused,不是密码错,也不是账号没权限。FTP 客户端弹这个,意思是它已经找到了那台服务器,TCP 握手却被对方直接回了一个 RST。换成“连接超时”才是另一回事,那多半是包被防火墙丢了,或者 IP 根本不通。先把这两个概念分开,后面排查会快很多。
先确认你连的 IP 和端口。很多人域名解析到旧服务器,或者云主机换了公网 IP,本地还拿着老 IP 连,当然拒绝。Windows 开个 cmd,敲 telnet 你的公网IP 21。Linux 用 nc -vz 公网IP 21。如果秒回 Connection refused,说明目标机器可达,但 21 端口没有服务在听,或者防火墙明确拒绝。如果一直卡着,最后超时,那更像安全组没放行、运营商封端口、或者 IP 写错。telnet 能连上并看到 220 开头的一行欢迎语,说明 FTP 控制通道正常,问题在账号、被动模式或目录权限。
服务器上先看 FTP 服务活着没。vsftpd 用 systemctl status vsftpd,Pure-FTPd 看 pure-ftpd,ProFTPD 看 proftpd。再用 ss -lntp | grep :21 看监听地址。如果显示 127.0.0.1:21,外网永远连不上,它只听了本机。vsftpd 要 listen=YES,listen_ipv6=NO,别只留 listen_ipv6。有些教程让你 listen=NO 配合 listen_ipv6=YES,结果 IPv4 客户端过去就被拒。改完重启服务。
云服务器最容易漏的是安全组。控制台入方向要放行 TCP 21,还要放行被动模式端口。很多人只开了 21,登录能过,一列目录就卡死,报 425 或“读取目录列表失败”。被动端口范围在 vsftpd 里配,比如 pasv_min_port=30000,pasv_max_port=30010,安全组和本机防火墙都要放行 30000 到 30010。如果服务器在 NAT 后面,还要写 pasv_address=你的公网IP,不然客户端拿到内网地址,数据连接必挂。注意,这个通常不是“拒绝”,但很多人把各种报错都叫拒绝。
本机防火墙也别忽略。CentOS 的 firewalld 执行 firewall-cmd --add-port=21/tcp --permanent,再加被动端口范围,然后 reload。Ubuntu 的 ufw allow 21/tcp,再 allow 30000:30010/tcp。iptables 用户看 iptables -L -n,有没有 REJECT 规则排在前面。还有 fail2ban,多次密码错会把你 IP 封了,表现也可能是拒绝。fail2ban-client status sshd 或查对应 jail,iptables 里能看到 DROP/REJECT。

SELinux 也会插一脚,不过它更多是登录后不能列目录、不能上传,不一定拒绝连接。getenforce 如果是 Enforcing,可以临时 setenforce 0 测试,确认后 setsebool -P ftpd_full_access on。别长期关 SELinux,不安全。
还有一种情况:FTP 服务根本没装,或者面板里 FTP 插件没启动。宝塔用户去软件商店看 Pure-FTPd 是否运行,面板安全里放行 21 和被动端口,云安全组也要放行。有些人只开了宝塔面板端口,FTP 端口没开,连过去当然拒绝。
本地网络也可能封 21。公司、校园网、部分运营商会对 21 端口做限制。用手机热点连一下,如果热点能连,原来网络的问题。代理、VPN 也会改路由,关掉再试。IPv6 优先也可能坏事,客户端先走 AAAA 记录,服务器没监听 v6,就拒绝。可以临时禁用 IPv6 或让域名只解析 A 记录。
最后看日志。vsftpd 日志在 /var/log/vsftpd.log 或 journalctl -u vsftpd。如果连日志都没有,说明连接请求根本没到 FTP 服务,重点查安全组、防火墙、IP 和端口。如果有连接记录但登录失败,查 /etc/ftpusers、user_list、用户 shell 是不是 /sbin/nologin,或者密码错。530 是登录失败,不是连接拒绝。
一句话,先 telnet 公网IP 21。拒绝就查服务监听、防火墙、安全组、IP 是否写对;能通就查账号、被动端口和 pasv_address。按这个顺序,多数“拒绝”十分钟内能定位。