Назад | Перейти на главную страницу

Периодические проблемы с загрузкой по FTP (фатальная: версия протокола) - Соединения не удаляются?

Клиент периодически испытывает проблемы с загрузкой файлов на FTP-сервер. Иногда это работает, а иногда нет.

Кажется, они могут войти в систему нормально (журналы vsftpd показывают успешные входы), но затем при попытке передачи файлов иногда происходит сбой с ошибкой:

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 в пассивном режиме, вот конфигурация:

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

Они указали мне на это сообщение на форуме: https://winscp.net/forum/viewtopic.php?t=12251

Это говорит о том, что, возможно, vsftpd не закрывает соединения / процессы должным образом, и поэтому, как только они подключились через порт 21, когда дело доходит до попытки передачи данных на один из пассивных номеров портов, он не может, потому что все они используются. Имеет смысл.

Итак, я думаю, что могу повторить это, но только тогда, когда при передаче возникает ошибка соединения.

С отправной точкой, когда никто не подключен, работает 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 исчезает, и все в порядке.

Однако я заметил, что иногда бывает тайм-аут, и передача файла прерывается, и когда это происходит, даже если я затем отключу и закрою 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 номеров пассивных портов, и тогда он ничего не может сделать.

Итак, у меня двоякий вопрос. Во-первых, есть ли способ выяснить, что может вызывать эти таймауты? Сначала я подумал, что это только на моей стороне, потому что я тестирую это на мобильной точке доступа, но это имело бы смысл, если бы то же самое происходит и с клиентом (это автоматический сценарий, который они запускают несколько раз в день) .

А во-вторых, могу ли я что-нибудь сделать, чтобы эти соединения не оставались открытыми и не засоряли порты подобным образом?

Информация

Сервер CentOS 7

vsftpd - это версия 3.0.2

Дайте мне знать, если вам понадобится дополнительная информация.

Спасибо.