解决CentOS下PureFtp出现“数据 Socket 错误 连接已超时”错误

前段时间配置了PureFTP上传程序,但期间出现种种让人不爽的问题!比如在本地使用 FlashFTP 时出现最多的“数据 Socket 错误 连接已超时”错误,无论使用主动还是被动模式上传,都会有类似错误!

[右] 数据 Socket 错误: 没有到主机的通道
[右] 列表 错误
[右] PASV
[右] 227 Entering Passive Mode (116,255,246,176,83,197)
[右] 正在打开数据连接 IP: 116.255.246.176 端口: 21445
[右] 数据 Socket 错误: 连接已超时
[右] 列表 错误
[右] 以 PASV 模式连接失败,正在尝试使用 PORT 模式。
[右] 侦听于端口: 4447,正在等候连接。
[右] PORT 192,168,1,222,17,95
[右] 500 我不能开启连接到 129.79.76.201 (仅 125.40.55.15)
[右] 列表 错误
[右] QUIT

由于当时时间紧,一直没有静心排查,今儿突然想通了,可能是CentOS防火墙规则的问题,因为FTP能连接到主机,但无法显示列表!

于是查看防火墙规则:# vi /etc/sysconfig/iptables,其中关于FTP的有如下两条:

$ iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 20 -j ACCEPT
$ iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT

应该不会有错了,又翻查了一下错误信息,发现被动模式的端口总是无法连接上,灵光一闪,查看PureFTP配置文件里的被动模式端口号段:

# vi /usr/local/pureftpd/pure-ftpd.conf
PassivePortRange          20000 30000

于是在 iptables 里添加一条规则,或直接如下命令即可:

$ iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 20000:30000 -j ACCEPT

然后保存防火墙规则并重启防火墙,再次使用 FlashFTP,一切正常!!

总结:问题是小问题,解决方法也简单,关键在于细心!细心!