通过FTP上传间歇性问题(致命:协议版本) – 连接没有被删除?

客户端上传文件到FTP服务器遇到间歇性问题。 有时候它有效,有时不起作用。

看来他们可以login成功(vsftpd日志显示成功login),但是在尝试文件传输时有时失败,出现错误:

alert write: fatal: protocol version . 2017-03-20 21:00:06.459 error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number . 2017-03-20 21:00:06.459 wrong version number . 2017-03-20 21:00:06.459 Disconnected from server . 2017-03-20 21:00:06.459 Connection failed. 

(他们使用winscp)

服务器被设置为vsftpd被动模式,这里是configuration:

 anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=NO xferlog_std_format=NO log_ftp_protocol=YES chroot_local_user=YES listen=yes listen_ipv6=no pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES pasv_enable=yes port_enable=yes pasv_min_port=10090 pasv_max_port=10095 pasv_address=**removed** pasv_addr_resolve=yes allow_writeable_chroot=YES ssl_enable=YES allow_anon_ssl=NO force_local_data_ssl=YES force_local_logins_ssl=YES ssl_tlsv1=YES ssl_sslv2=NO ssl_sslv3=NO rsa_cert_file=/etc/ssl/eastberks_certs/**removed**.crt rsa_private_key_file=/etc/httpd/ssl/**removed**.key 

他们指着我走向这个论坛的post: https : //winscp.net/forum/viewtopic.php?t=12251

这表明它可能是vsftpd没有正确closures连接/进程,因此,一旦他们通过端口21连接好,当试图传输数据在一个被动端口号,它不能,因为他们都在使用中。 说得通。

所以,我想我可以复制一下,但是只有在传输过程中出现连接错误。

以一个起点,没有人连接,运行netstat -anp | grep vsftpd netstat -anp | grep vsftpd给了我以下内容:

 tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 21051/vsftpd 

现在,如果我从客户端连接:

 tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 21051/vsftpd tcp 0 0 172.31.1.200:21 MYIP:29354 ESTABLISHED 22302/vsftpd unix 3 [ ] STREAM CONNECTED 5179539 22302/vsftpd unix 3 [ ] STREAM CONNECTED 5179494 22303/vsftpd unix 3 [ ] STREAM CONNECTED 5179493 22311/vsftpd unix 3 [ ] STREAM CONNECTED 5179540 22311/vsftpd 

所以现在我们连接到端口21,这是正确的。

现在,如果我开始文件传输:

 tcp 0 0 172.31.1.200:10091 0.0.0.0:* LISTEN 22302/vsftpd tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 21051/vsftpd tcp 0 0 172.31.1.200:21 MYIP:29354 ESTABLISHED 22302/vsftpd tcp 0 0 172.31.1.200:10091 MYIP:25260 ESTABLISHED 22303/vsftpd unix 3 [ ] STREAM CONNECTED 5179539 22302/vsftpd unix 3 [ ] STREAM CONNECTED 5179494 22303/vsftpd unix 3 [ ] STREAM CONNECTED 5179493 22311/vsftpd unix 3 [ ] STREAM CONNECTED 5179540 22311/vsftpd 

所以现在我们连接到端口10091,这是被动端口之一。

如果该传输成功完成,则端口10091上的连接消失,一切正常。

但是,我注意到,有时候会有一个超时,文件传输被中断,当发生这种情况时,即使我断开并closures了ftp客户端,我发现这些连接仍然是打开的(它还打开了另外2个在超时问题后尝试重新连接):

 tcp 1 0 172.31.1.200:10090 0.0.0.0:* LISTEN 22595/vsftpd tcp 0 0 172.31.1.200:10091 0.0.0.0:* LISTEN 22302/vsftpd tcp 1 0 172.31.1.200:10094 0.0.0.0:* LISTEN 22548/vsftpd tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 21051/vsftpd tcp 1 0 172.31.1.200:21 MYIP:29354 CLOSE_WAIT 22302/vsftpd tcp 1 0 172.31.1.200:21 MYIP:37584 CLOSE_WAIT 22595/vsftpd tcp 1 0 172.31.1.200:21 MYIP:33453 CLOSE_WAIT 22548/vsftpd tcp 0 0 172.31.1.200:10091 MYIP:25260 ESTABLISHED 22303/vsftpd unix 3 [ ] STREAM CONNECTED 5179539 22302/vsftpd unix 3 [ ] STREAM CONNECTED 5181389 22557/vsftpd unix 3 [ ] STREAM CONNECTED 5179494 22303/vsftpd unix 3 [ ] STREAM CONNECTED 5182639 22600/vsftpd unix 3 [ ] STREAM CONNECTED 5182675 22600/vsftpd unix 3 [ ] STREAM CONNECTED 5181973 22557/vsftpd unix 3 [ ] STREAM CONNECTED 5179493 22311/vsftpd unix 3 [ ] STREAM CONNECTED 5182674 22595/vsftpd unix 3 [ ] STREAM CONNECTED 5182640 22596/vsftpd unix 3 [ ] STREAM CONNECTED 5179540 22311/vsftpd unix 3 [ ] STREAM CONNECTED 5181390 22549/vsftpd unix 3 [ ] STREAM CONNECTED 5181972 22548/vsftpd 

所以我在想的是这里发生的是,由于某些原因,转移正在经历问题,有时会被切断,然后这些连接仍然在服务器上打开,然后当它再次尝试时,它最终用完了所有5被动的端口号码,然后它不能做任何事情。

所以我的问题是双重的。 首先,有什么方法可以解决什么可能造成这些超时? 我刚开始认为这只是我的最终结果,因为我正在testing这个移动热点,但是如果这也是客户端的情况(这是一个他们每天运行几次的自动脚本) 。

其次,我能做些什么来阻止这些连接被打开并堵塞这样的端口?

信息

服务器是CentOS 7

vsftpd是3.0.2版本

让我知道如果你需要更多的信息。

谢谢。