У меня есть система Arch Linux, на которой работает vsftpd, которая уже год работает с FTPES. В течение последних двух дней я заметил, что все мои FTP-клиенты не могут подключиться через FTPES. Когда я подключаюсь с помощью FileZilla 3.17.0 в Windows 7, я замечаю, что при отправке списка каталогов возникает ошибка GnuTLS -15:
Это пассивный FTPES с хостом, указанным с использованием WAN IP:
Status: Connecting to ###.###.###.###:21...
Status: Connection established, waiting for welcome message...
Status: Initializing TLS...
Status: Verifying certificate...
Status: TLS connection established.
Status: Logged in
Status: Retrieving directory listing...
Command: PWD
Response: 257 "/" is the current directory
Command: TYPE I
Response: 200 Switching to Binary mode.
Command: PASV
Response: 227 Entering Passive Mode (###,###,###,###,27,163).
Command: LIST
Response: 150 Here comes the directory listing.
Error: GnuTLS error -15: An unexpected TLS packet was received.
Error: Disconnected from server: ECONNABORTED - Connection aborted
Error: Failed to retrieve directory listing
Status: Disconnected from server
Затем FileZilla пытается установить соединение с идентичными результатами, после чего прекращает попытки соединения. Предыдущая версия FileZilla также показывала ошибку GnuTLS -110, хотя у меня нет сохраненных результатов, содержащих эту ошибку.
Я прочитал несколько сообщений, в которых предполагается, что эта проблема вызвана проблемой с пассивной конфигурацией FTP. Пассивный FTP уже некоторое время работает на этом сервере, и я не вносил никаких изменений в какие-либо соответствующие файлы конфигурации. Конечно, я пробовал подключиться в активном режиме. Все кажется нормальным, пока я не получу ошибку команды Illegal PORT, после чего FileZilla снова попытается использовать пассивный режим.
Это "активный" FTPES с хостом, указанным с помощью WAN IP:
Status: Connecting to ###.###.###.###:21...
Status: Connection established, waiting for welcome message...
Status: Initializing TLS...
Status: Verifying certificate...
Status: TLS connection established.
Status: Logged in
Status: Retrieving directory listing...
Command: PWD
Response: 257 "/" is the current directory
Command: TYPE I
Response: 200 Switching to Binary mode.
Command: PORT 192,168,0,7,240,98
Response: 500 Illegal PORT command.
Command: PASV
Response: 227 Entering Passive Mode (###,###,###,###,27,103).
Command: LIST
Response: 150 Here comes the directory listing.
Error: GnuTLS error -15: An unexpected TLS packet was received.
Error: Disconnected from server: ECONNABORTED - Connection aborted
Error: Failed to retrieve directory listing
Status: Disconnected from server
Проблема здесь в том, что, несмотря на то, что я ввожу свой IP-адрес в глобальной сети, активный режим все еще пытается использовать локальный IP-адрес в этой команде PORT. Другой FTP-клиент, FTP Client Pro версии 3.0.4 для iOS, выдает ошибку «Сервер, похоже, не поддерживает активный режим». Затем я попытался подключиться к моему серверу локально, и хотя на этот раз клиент не перешел в пассивный режим, ошибка TLS сохраняется.
Это активный FTPES с хостом, указанным с использованием локального IP:
Status: Connecting to 192.168.0.2:21...
Status: Connection established, waiting for welcome message...
Status: Initializing TLS...
Status: Verifying certificate...
Status: TLS connection established.
Status: Logged in
Status: Retrieving directory listing...
Command: PWD
Response: 257 "/" is the current directory
Command: TYPE I
Response: 200 Switching to Binary mode.
Command: PORT 192,168,0,7,240,129
Response: 200 PORT command successful. Consider using PASV.
Command: LIST
Response: 150 Here comes the directory listing.
Error: GnuTLS error -15: An unexpected TLS packet was received.
Error: Disconnected from server: ECONNABORTED - Connection aborted
Error: Failed to retrieve directory listing
Status: Disconnected from server
Наконец, я попытался подключиться без использования шифрования. Хотя я избегаю этого, если это вообще возможно, я должен оставить поддерживаемые незашифрованные соединения, чтобы подключаться из некоторых ограниченных сетей. Как активные, так и пассивные настройки в FileZilla работают через общедоступный Интернет с отключенным шифрованием, хотя оба типа показывают одинаковый результат:
Это активный / пассивный простой FTP с хостом, указанным с использованием WAN IP:
Status: Connecting to 98.220.249.102:21...
Status: Connection established, waiting for welcome message...
Status: Logged in
Status: Retrieving directory listing...
Status: Calculating timezone offset of server...
Status: Timezone offset of server is 0 seconds.
Status: Directory listing of "/" successful
Поскольку этот сервер находится за маршрутизатором, он настроен так, что пассивный FTP не будет работать локально; см. vsftpd.conf ниже. Чтобы опробовать все возможности подключения, вот результат FileZilla для создания активного, незашифрованного подключения локально. Это не удается, но меня это не слишком беспокоит, поскольку я никогда не использую эту комбинацию настроек.
Это активный простой FTP с хостом, указанным с использованием локального IP:
Status: Connecting to 192.168.0.2:21...
Status: Connection established, waiting for welcome message...
Status: Logged in
Status: Retrieving directory listing...
Command: PWD
Response: 257 "/" is the current directory
Command: TYPE I
Response: 200 Switching to Binary mode.
Command: PORT 192,168,0,7,240,195
Response: 200 PORT command successful. Consider using PASV.
Command: LIST
Response: 150 Here comes the directory listing.
Response: 500 OOPS: priv_sock_get_cmd
Error: Failed to retrieve directory listing
Error: Connection closed by server
Вот мой /etc/vsftpd.conf
, без комментариев. По сути, это тот же файл, который я успешно использовал в течение прошлого года.
anonymous_enable=NO
local_enable=YES
write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
port_enable=YES
connect_from_port_20=YES
ftpd_banner=Welcome to HOSTNAME (vsftpd on ArchLinux).
chroot_local_user=YES
allow_writeable_chroot=YES
listen=YES
ssl_enable=YES
force_local_logins_ssl=NO
force_local_data_ssl=NO
ssl_tlsv1=YES
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
rsa_private_key_file=/etc/ssl/certs/vsftpd.pem
pasv_min_port=7000
pasv_max_port=7100
pasv_address=###.###.###.###
Последнее полное обновление моей системы Arch до появления этой проблемы было 17 апреля 2016 г. и включало upgraded gnutls (3.4.10-1 -> 3.4.11-1)
. Последнее обновление до vsftpd было 9 марта 2016 г. (3.0.3-1 -> 3.0.3-2), поэтому вместо того, чтобы понижать только gnutls, я восстановил всю систему до ее состояния 9 марта 2016 г., используя Arch Linux Archive. . Это не помогло, и впоследствии я обновил систему, чтобы она соответствовала текущим репозиториям. Представленные здесь выходные данные были созданы с использованием последней версии системы на дату публикации (23 апреля 2016 г.). Я не уверен, когда именно возникла эта ошибка, поскольку я не использую свой FTP-сервер достаточно часто, чтобы сразу ее заметить.
Как я сказал ранее, мои соответствующие конфигурации не изменились с момента последней работы моего FTP-сервера, за исключением изменений, внесенных для публикации информации здесь.
Моя цель - снова заставить пассивный FTPES работать через общедоступный Интернет. Это приемлемо, если я должен пожертвовать незашифрованным активным FTP, но я все же хотел бы оставить его доступным на те редкие случаи, когда он мне нужен. Что мне нужно сделать, чтобы это исправить?
У меня была такая же проблема, как и у вас, и после долгого поиска в Интернете я, кажется, нашел обходной путь Вот: Добавить строку seccomp_sandbox=NO
на ваш /etc/vsftpd.conf
.
Мой вариант использования - FTP-сервер только для локальной сети с поддержкой SSL, поэтому YMMV. Возможное объяснение этой проблемы может быть найдено в том, что я не установил последнее ядро, доступное в репозиториях, из-за несовместимого драйвера Wi-Fi.
Надеюсь, это поможет :)