解决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,一切正常!!
总结:问题是小问题,解决方法也简单,关键在于细心!细心!