Вопрос или проблема
Я использую Ubuntu 16.04.3 LTS и VSFTPD 3.0.3.
С нескольких дней назад я не могу загрузить файл размером больше 14 Кб.
Это журнал FTP Netbeans (но с Filezilla он тоже не работает)
220 (vsFTPd 3.0.3)
USER ******
331 Пожалуйста, укажите пароль.
PASS ******
230 Вход выполнен успешно.
TYPE I
200 Переключение в двоичный режим.
CWD /fgelutility
250 Директория успешно изменена.
PWD
257 "/fgelutility" — текущая директория
CWD /fgelutility
250 Директория успешно изменена.
PWD
257 "/fgelutility" — текущая директория
SYST
215 Тип UNIX: L8
PASV
227 Переход в режим пассивного соединения (xxx,xxx,xxx,xxx,251,47).
LIST -a /fgelutility
150 Вот список директорий.
226 Директория успешно отправлена.
CWD /fgelutility
250 Директория успешно изменена.
PWD
257 "/fgelutility" — текущая директория
PASV
227 Переход в режим пассивного соединения (xxx,xxx,xxx,xxx,46,225).
LIST -a /fgelutility
150 Вот список директорий.
226 Директория успешно отправлена.
CWD /fgelutility/src/FatturazioneBundle/Controller
250 Директория успешно изменена.
PASV
227 Переход в режим пассивного соединения (xxx,xxx,xxx,xxx,43,77).
STOR BatchController.php.new
150 ОК для отправки данных.
DELE BatchController.php.new
NOOP
QUIT
Не удалось поддерживать соединение с сервером xxx.xxx.xxx.xxx (неизвестная причина).
Резюме
====================
Не удалось:
файл src/FatturazioneBundle/Controller/BatchController.php Невозможно загрузить файл BatchController.php (неизвестная причина).
Время выполнения: 60 с, обработано: 0 файл(ов), 0 Кб
Это мой vsfptd.conf
# Пример конфигурационного файла /etc/vsftpd.conf
#
# Компилированные настройки по умолчанию довольно настороженные. Этот примерный файл
# немного ослабляет ограничения, чтобы сделать FTP-демон более удобным.
# Пожалуйста, смотрите vsftpd.conf.5 для всех настроек по умолчанию.
#
# ПРОЧИТАЙТЕ ЭТО: Этот примерный файл НЕ является исчерпывающим списком опций vsftpd.
# Пожалуйста, прочитайте страницу руководства vsftpd.conf.5, чтобы получить полное представление о возможностях vsftpd.
#
#
# Запускать отдельно? vsftpd может работать как из inetd, так и как отдельный
# демон, запущенный из скрипта инициализации.
listen=YES
#
# Запускать отдельно с IPv6?
# Подобно параметру listen, за исключением того, что vsftpd будет слушать на сокете IPv6
# вместо IPv4. Этот параметр и параметр listen несовместимы.
#listen_ipv6=YES
#
# Разрешить анонимный FTP? (Отключено по умолчанию)
anonymous_enable=NO
#
# Удалите комментарий, чтобы разрешить локальным пользователям входить в систему.
local_enable=YES
#
# Удалите комментарий, чтобы включить любую форму команды записи FTP.
write_enable=YES
#
# Значение umask по умолчанию для локальных пользователей — 077. Вы можете изменить его на 022,
# если ваши пользователи этого ожидают (022 используется большинством других ftpd)
#local_umask=022
#
# Удалите комментарий, чтобы разрешить анонимному FTP-пользователю загружать файлы. Это будет иметь
# эффект только если активно вышеуказанное глобальное разрешение на запись. Также вам
# очевидно нужно будет создать директорию, доступную для записи для FTP-пользователя.
#anon_upload_enable=YES
#
# Удалите комментарий, если хотите, чтобы анонимный FTP-пользователь мог создавать
# новые директории.
#anon_mkdir_write_enable=YES
#
# Активировать сообщения директории - сообщения, отправляемые удаленным пользователям, когда они
# заходят в определенную директорию.
dirmessage_enable=YES
#
# Если включено, vsftpd будет отображать списки директорий с временем
# в вашем местном часовом поясе. По умолчанию отображается GMT. Времена,
# возвращаемые FTP-командой MDTM, также зависят от этой
# опции.
use_localtime=YES
#
# Активировать ведение учета загрузок/выгрузок.
xferlog_enable=YES
#
# Убедитесь, что подключения передачи PORT исходят из порта 20 (ftp-data).
connect_from_port_20=YES
#
# Если хотите, можете настроить, чтобы загруженные анонимные файлы принадлежали
# другому пользователю. Примечание! Использование "root" для загруженных файлов не
# рекомендуется!
#chown_uploads=YES
#chown_username=whoever
#
# Вы можете переписать местоположение файла журнала, если хотите. По умолчанию указано ниже.
#xferlog_file=/var/log/vsftpd.log
#
# Если хотите, вы можете иметь свой файл журнала в стандартном формате xferlog ftpd.
# Обратите внимание, что в этом случае местоположение файла журнала по умолчанию — /var/log/xferlog.
#xferlog_std_format=YES
#
# Вы можете изменить значение по умолчанию для завершения бездействующей сессии.
idle_session_timeout=300
#
# Вы можете изменить значение по умолчанию для завершения соединения данных.
data_connection_timeout=120
#
# Рекомендуется определить на вашей системе уникального пользователя, который
# FTP-сервер сможет использовать как полностью изолированного и непривилегированного пользователя.
#nopriv_user=ftpsecure
#
# Включите это, и сервер будет распознавать асинхронные запросы ABOR. Не
# рекомендуется для безопасности (код не тривиален). Однако не включение его
# может запутать более старые FTP-клиенты.
#async_abor_enable=YES
#
# По умолчанию сервер делает вид, что разрешает ASCII-режим, но на самом деле игнорирует
# запрос. Включите нижеуказанные параметры, чтобы сервер действительно выполнял ASCII
# манипуляции с файлами при нахождении в ASCII-режиме.
# Будьте осторожны, что на некоторых FTP-серверах поддержка ASCII позволяет провести
# атаку отказа в обслуживании (DoS) через команду "SIZE /big/file" в ASCII-режиме. vsftpd
# предсказала эту атаку и всегда была безопасной, сообщая размер
# исходного файла.
# ASCII-манипуляции - ужасная функция протокола.
#ascii_upload_enable=YES
#ascii_download_enable=YES
#
# Вы можете полностью настроить строку баннера входа:
#ftpd_banner=Welcome to blah FTP service.
#
# Вы можете указать файл с запрещенными адресами электронной почты анонимов. По-видимому,
# это полезно для борьбы с определенными DoS-атаками.
#deny_email_enable=YES
# (по умолчанию)
#banned_email_file=/etc/vsftpd.banned_emails
#
# Вы можете ограничить локальных пользователей их домашними директориями. Посмотрите FAQ
# на возможные риски в этом перед использованием chroot_local_user или
# chroot_list_enable ниже.
chroot_local_user=YES
#
# Вы можете указать явный список локальных пользователей, которых нужно chroot() в их
# домашнюю директорию. Если chroot_local_user установлено в YES, то этот список становится
# списком пользователей, которые НЕ будут chroot().
#chroot_list_enable=YES
# (по умолчанию)
#chroot_list_file=/etc/vsftpd.chroot_list
#
# Вы можете активировать опцию "-R" для встроенной ls. Это отключено по
# умолчанию, чтобы избежать избыточного ввода-вывода удаленными пользователями на больших
# сайтах. Однако некоторые несовершенные FTP-клиенты, такие как "ncftp" и "mirror", предполагают
# наличие опции "-R", поэтому есть серьезные аргументы в пользу ее включения.
#ls_recurse_enable=YES
#
# Настройка
#
# Некоторые настройки vsftpd не подходят по умолчанию для файловой системы.
#
# Эта опция должна быть именем директории, которая пуста. Также этот
# каталог не должен быть записываемым пользователем FTP. Эта директория используется
# как безопасная chroot() тюрьма, когда vsftpd не требует доступа к файловой системе.
secure_chroot_dir=/var/run/vsftpd/empty
#
# Эта строка — имя службы PAM, которую будет использовать vsftpd.
pam_service_name=ftp
#
# Эта опция указывает местоположение RSA-сертификата для использования для SSL
# защищенных подключений.
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
# Эта опция указывает местоположение RSA-ключа для использования для SSL
# защищенных подключений.
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
# Добавляет список пользователей, которые могут использовать FTP - Леандро 28/12/2015
userlist_deny=NO
userlist_enable=YES
userlist_file=/etc/vsftpd.allowed_users
allow_writeable_chroot=YES
file_open_mode=0777
local_umask=002
Проблема была в том, что я загружал файл через VPN на локальный IP. Это влияет на размер пакета MTU.
Я временно уменьшил MTU на моем сервере Ubuntu до 1200, и он (снова) начал работать.
sudo ifconfig eth0 mtu 1200
У меня была такая же проблема, хотя в моем случае ситуация была немного другой: Файлы больше 500 кБ не удавалось отправить. Большие файлы всегда останавливались в передаче после 524 288 байтов ровно и затем возникал таймаут. Я использовал туннель wireguard.
Я нашел комментарий на reddit о точно такой же проблеме, где рекомендовался MTU 1360 (по умолчанию для wg-quick — 1420), и действительно, это помогло:
ip link set mtu 1360 dev wg0
После этого я перезапустил клиент FileZilla, и все передачи файлов успешно завершились, даже для файлов размером в несколько гигабайт!
Ответ или решение
Проблема с загрузкой файлов в VSFTPD превышающего 14 Кб: подробное руководство по решению
Работа FTP-сервера на Ubuntu 16.04.3 LTS с использованием VSFTPD 3.0.3 может иногда сопровождаться рядом трудностей, одна из которых заключается в невозможности загрузки файлов превышающих 14 Кб. Данное ограничение может быть вызвано несколькими факторами, включая настройки MTU, параметры конфигурации VSFTPD и проблемы с сетью. Рассмотрим их подробно.
Возможные причины и решения проблемы
-
Настройки MTU (Maximum Transmission Unit)
Наиболее вероятной причиной вашей проблемы является неправильная конфигурация MTU при работе через VPN. Стандартное значение MTU часто составляет 1500 байт, однако при использовании VPN оно может быть уменьшено. Если MTU превышает максимальный размер пакета, это приводит к фрагментации, что может вызывать тайм-ауты при загрузке.
Для решения этой проблемы, вы можете временно уменьшить MTU вашего сетевого интерфейса до 1200 байт:
sudo ifconfig eth0 mtu 1200
Это изменение позволяет уменьшить вероятность фрагментации и обеспечить стабильные загрузки больших файлов.
-
Настройки конфигурации VSFTPD
Ваш файл конфигурации VSFTPD (
/etc/vsftpd.conf
) еще один важный аспект, который стоит проверить. Убедитесь, что следующие параметры установлены и настроены корректно:max_clients
иmax_per_ip
: если эти значения слишком малы, это может ограничивать вашу способность обслуживать запросы. Попробуйте увеличить эти параметры.data_connection_timeout
: ваше текущее значение этого параметра (120 секунд) может быть полезным, но если у вас длительные запросы на загрузку, возможно, имеет смысл увеличить его до 300 секунд.
-
Проблемы с VPN и сетью
Если вы используете WireGuard или другие VPN-сервисы, убедитесь, что значения MTU настроены правильно. Например, по умолчанию значение MTU для WireGuard составляет 1420, но иногда для решения проблем лучше установить его на 1360. Сделайте это с помощью команды:
ip link set mtu 1360 dev wg0
Это изменение может значительно улучшить результаты передачи данных.
-
Клиенты FTP и их настройки
Некорректные настройки клиента FTP также могут привести к проблемам с загрузкой файлов. Убедитесь, что вы используете обновленную версию вашего FTP-клиента, например, FileZilla, и проверьте его конфигурацию. Использование пассивного режима (PASV) может также помочь в решении проблем с NAT и брандмауэрами.
Заключение
Если после выполнения вышеперечисленных действий проблемы с загрузкой файлов все еще существуют, стоит обратиться к логам сервера (например, /var/log/vsftpd.log
или /var/log/xferlog
), чтобы более детально проанализировать причины отказов. В сочетании с предложенными изменениями, это может помочь выявить и устранить периферийные проблемы, влияющие на вашу систему.
Соблюдение всех рекомендаций поможет вам наладить эффективную работу вашего FTP-сервера и обеспечить стабильную загрузку файлов любого размера.