Не удается подключиться к vsftpd на порту 21 при попытке установить FTP-соединение.

Вопрос или проблема

Я установил vsftpd на свою инстанцию Linux Ubuntu 21.04 с помощью следующей команды:

sudo apt-get install vsftpd

Я включил FTP в своем фаерволе ufw с помощью следующей команды:

sudo ufw allow ftp

Мой файл /etc/vsftpd.conf содержит следующее:

# Пример конфигурационного файла /etc/vsftpd.conf
#
# Стандартные настройки довольно параноидальные. Этот образец файла
# немного смягчает ситуацию, чтобы сделать демона ftp более удобным.
# Пожалуйста, смотрите vsftpd.conf.5 для всех стандартных настроек.
#
# ПРОЧИТАЙТЕ ЭТО: Этот файл примера НЕ является исчерпывающим списком опций vsftpd.
# Пожалуйста, обратитесь к руководству vsftpd.conf.5, чтобы получить полное представление о возможностях vsftpd.
#
#
# Работать автономно? vsftpd может работать как из inetd, так и как автономный
# демон, запускаемый из скрипта инициализации.
listen=YES
#
# Эта директива позволяет прослушивать сокеты IPv6. По умолчанию прослушивание
# на адресе "any" IPv6 (::) будет принимать соединения от IPv6 и IPv4 клиентов.
# Не обязательно прослушивать *оба* сокета IPv4 и IPv6. Если вы хотите этого (возможно, потому что хотите прослушивать конкретные
# адреса), тогда необходимо запускать две копии vsftpd с двумя конфигурационными
# файлами.
listen_ipv6=NO
#
# Разрешить анонимное 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. Время,
# возвращаемое командой MDTM FTP также затронуто этой опцией.
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.
# Обратите внимание, что расположение лог-файла по умолчанию в этом случае /var/log/xferlog.
#xferlog_std_format=YES
#
# Вы можете изменить значение по умолчанию для времени ожидания неактивной сессии.
#idle_session_timeout=600
#
# Вы можете изменить значение по умолчанию для времени ожидания соединения с данными.
#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.
#
# Вы можете указать файл запрещенных для анонимных пользователей e-mail адресов. Это, кажется,
# полезно для борьбы с определенными атаками 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, убедитесь, что
# пользователь не имеет прав на запись в директорию верхнего уровня внутри
# chroot)
#chroot_local_user=YES
#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=vsftpd
#
# Эта опция указывает местоположение сертификата RSA, который будет использоваться для шифрованных соединений SSL.
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=NO

#
# Раскомментируйте это, чтобы указать, что vsftpd использует файловую систему utf8.
#utf8_filesystem=YES

user_sub_token=$USER
local_root=/home/$USER/ftp_user

userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO

Я добавил своего предполагаемого пользователя ftpuser в /etc/vsftpd.user_list. Следующее содержится в выводе команды netstat -tanp:

tcp        0      0 0.0.0.0:27017           0.0.0.0:*               LISTEN      939/docker-proxy
tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN      585614/vsftpd
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      582461/systemd-reso
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      581200/sshd: /usr/s

Вышеуказанное, кажется, указывает на то, что vsftpd прослушивает порт 21, как и должно быть. Однако, я не могу подключиться к нему, используя WinSCP на порту 21 с протоколом FTP. Однако странно то, что я могу подключиться на порту 22 с использованием протокола SFTP.

Также стоит упомянуть, что ранее у меня уже был установлен и настроен vsftpd для SFTP. Я выполнил sudo apt-get purge vsftpd и с тех пор пытаюсь переустановить.

Изменение Даже когда я выполняю команду ftp localhost, я получаю сообщение об ошибке: ftp: connect: Connection timed out

Вот шаги, которые я теперь предпринял.

Установить VSFTPD

sudo apt update
sudo apt install vsftpd
sudo service vsftpd status

Настроить фаервол

sudo ufw allow 20/tcp
sudo ufw allow 21/tcp
sudo ufw allow 40000:50000/tcp
sudo ufw allow 990/tcp
sudo ufw allow openssh
sudo ufw enable
sudo ufw status

Создать ftpuser и директории

sudo adduser ftpuser
sudo mkdir /home/ftpuser/ftp
sudo chown nobody:nogroup /home/ftpuser/ftp
sudo chmod a-w /home/ftpuser/ftp
sudo mkdir /home/ftpuser/ftp/files
sudo chown ftpuser:ftpuser /home/ftpuser/ftp/files

Настроить конфигурацию VSFTPD

sudo nano /etc/vsftpd.conf

С следующими записями

listen=NO
listen_ipv6=YES
anonymos_enable=NO
local_enable=YES
write_enable=YES
local_mask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
force_dot_files=YES
pasv_min_port=400000
pasv_max_port=500000

user_sub_token=$USER
local_root=/home/$USER/ftp

Перезапустить VSFTPD, чтобы изменения вступили в силу

sudo systemctl restart vsftpd.service

Попробуйте подключиться с помощью Filezilla и WinSCP. Ничего не удалось. Однако, так же как и ранее, я смог подключиться через SFTP на порту 22.

Что я делаю не так?

Я переустановил Ubuntu 21.04 и следовал шагам из этого руководства: https://www.digitalocean.com/community/tutorials/how-to-set-up-vsftpd-for-a-user-s-directory-on-ubuntu-18-04, и теперь всё работает как ожидалось.

Ответ или решение

Проблема с подключением к vsftpd на порту 21 может возникнуть из-за нескольких причин, которые касаются настройки и конфигурации FTP-сервера на вашей системе Ubuntu 21.04. Рассмотрим основные шаги по устранению неполадок и возможные решения этой проблемы.

Первоначальная диагностика

  1. Проверка статуса службы: Убедитесь, что служба vsftpd запущена и работает корректно. Это можно сделать командой:

    sudo systemctl status vsftpd

    Если служба неактивна, запустите её с помощью:

    sudo systemctl start vsftpd
  2. Проверка сетевых подключений: Команда netstat -tanp показывает, что vsftpd слушает на порту 21. Однако, для дальнейшей проверки используйте:

    sudo lsof -i -P -n | grep LISTEN

    Это поможет убедиться, что никакие другие процессы не конфликтуют с vsftpd.

Конфигурация брандмауэра

  1. Настройки UFW: Вы уже добавили правила, позволяющие трафик на порты 20, 21, и порты 40000-50000 для пассивного режима. Проверьте статус UFW:

    sudo ufw status

    Убедитесь, что все необходимые порты действительно разрешены.

Конфигурация vsftpd

  1. Проверка конфигурационного файла: В вашем конфигурационном файле /etc/vsftpd.conf присутствует потенциальная ошибка в строках, связанных с пассивным режимом. Параметры pasv_min_port и pasv_max_port должны быть установлены в допустимые диапазоны значений. Например:

    pasv_min_port=40000
    pasv_max_port=50000

    Убедитесь, что нет ошибок, таких как опечатки в именах параметров, например, anonymos_enable вместо anonymous_enable.

  2. Перезапуск vsftpd: Чтобы применить изменения в конфигурации, перезапустите vsftpd:

    sudo systemctl restart vsftpd

Локальная диагностика

  1. Локальное тестирование: Попробуйте подключиться к FTP-серверу локально, используя команду:

    ftp localhost

    Если подключение не удаётся, обратите внимание на сообщения об ошибках, которые могут указать на конкретные проблемы.

Общие рекомендации

  • Проверка системных логов: Логи системы помогут выявить возможные ошибки или предупреждения. Используйте команды:

    sudo journalctl -u vsftpd
  • Обновление системы: Убедитесь, что ваша система и все установленные пакеты обновлены:

    sudo apt update && sudo apt upgrade

Следуя этим указаниям, вы сможете выявить и устранить проблему с подключением к vsftpd на порту 21. Если проблема не решится, рекомендую обратиться к документации vsftpd или специальным форумам для получения более детальной помощи.

Оцените материал
Добавить комментарий

Капча загружается...