我刚刚在 CentOS 5.3 机器上做了一些基本操作yum install vsftpd
,我可以从机器本身的 shell 通过 FTP 访问机器的 IP 地址,但无法从同一 LAN 上的任何其他机器通过 FTP 访问。
$ ftp 1.2.3.4
ftp: connect: Connection refused
已尝试的故障排除步骤:
- 在本地机器 A 上,尝试使用有效凭证通过 FTP 传输到 A 的 IP,成功
- 在同一网络上的机器 B 上,尝试通过 FTP 连接到 A 的 IP,但出现上述情况,连接被拒绝
- 从同一台机器 B,nmap 显示端口 21 开放
- 从同一台机器 B,可以 telnet 到端口 21 并查看 vsftpd 横幅
- 因此,似乎守护进程正在监听,但是来自外部的连接尝试导致它拒绝连接。
....在重写这个问题时,我重新启动了 vsftpd 守护进程,一切都开始按预期工作。
答案1
好的,我对测试服务的一般调试指导原则如下:
0)测试时坚持使用 IP,以消除 DNS 问题
1)本地测试
您能从运行 FTP 服务器的机器连接到 FTP 服务器吗?
2)在同一网络上进行远程测试
您可以从该子网上的另一台机器进行连接吗?
3)从不受信任的来源进行测试
您可以跨越防火墙边界到达那里吗?
听起来您已经完成了第一个,但第二个失败了。如果您可以从远程框远程登录到服务器上的端口 21 并收到 FTP 横幅,则 FTP 服务器正在运行。
如果可以的话,请更新您的问题以显示您的故障排除步骤,以便我们能够更准确地确定问题所在。
答案2
如果您可以连接到 localhost,但无法从同一台机器连接到“host.example.com”,则表明服务器仅监听 127.0.0.1,而不是所有接口。您可以通过运行以下命令来检查:
# netstat -lep --tcp | grep vsftp
如果显示“localhost:ftp”,则表示它只在本地主机上监听。查找类似“Listen”或与地址或接口绑定的配置选项。如果显示“*:ftp”,则表示它正在监听所有接口,并且存在其他问题。可能是防火墙或网络配置问题。
答案3
使用任何现代的基于 Redhat 的发行版检查 selinux。例如,使用 getenable 查看它是否已打开(强制)。如果是,则使用 setenforce 0 将其关闭,然后查看是否有区别。使用 setenforce 1 将其重新打开。
如果是 selinux,那么您可能需要设置布尔值。
尝试类似以下操作:getsebools -a|grep -i ftp 来查看 ftp 相关布尔值的状态。要设置它们,请使用 setsebools。
您是否使用基于 iptables 主机的防火墙 - 如果是,是否启用了适当的 iptables 模块我不记得它是什么,但可以在名为 //etc/sysconfig/iptables-config 的文件中启用它。
它有点像 conntrack_ftp。
答案4
感谢大家的各种建议。虽然我不确定到底发生了什么,但重新启动守护进程似乎可以解决问题。