Клиент периодически испытывает проблемы с загрузкой файлов на 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
Дайте мне знать, если вам понадобится дополнительная информация.
Спасибо.