Установка и защита VSFTPD на CentOS 8 с TLS
Введение
FTP — широко используемый протокол для передачи файлов между сервером и клиентом. Среди популярных серверов — vsftpd, proftpd, pure-ftpd и другие. vsftpd (Very Secure FTP Daemon) считается быстрым и безопасным FTP-сервером и поддерживает IPv6, явный (explicit) и явный/неявный FTPS, а также интеграцию с SSL/TLS.
В этом руководстве пошагово показано, как установить и настроить vsftpd на CentOS 8, включить шифрование TLS, открыть нужные порты в firewalld и учесть правила SELinux. В конце — чек-листы, тесты, рекомендации по безопасности и варианты альтернатив.
Предварительные условия
- Сервер с CentOS 8 (локальный или облачный). При необходимости замените на совместимый дистрибутив (Rocky Linux / AlmaLinux) при окончании срока поддержки CentOS 8.
- root-доступ или пользователь с sudo.
- Базовые знания командной строки Linux.
Быстрый план действий
- Установить пакет vsftpd.
- Запустить и включить сервис.
- Создать FTP-пользователя.
- Отредактировать /etc/vsftpd/vsftpd.conf.
- Настроить SELinux и firewalld.
- Сгенерировать SSL-сертификат и включить TLS в конфиге.
- Протестировать подключение через клиент, поддерживающий TLS (например, FileZilla).
Установка VSFTPD
VSFTPD доступен в репозитории CentOS 8. Выполните установку следующей командой:
dnf install vsftpd -yПосле установки запустите сервис и включите автозапуск:
systemctl start vsftpd
systemctl enable vsftpdТеперь сервер vsftpd установлен и работает.
Создание пользователя для FTP
Рекомендуется создавать отдельного локального пользователя для доступа по FTP. Пример создания пользователя vyom:
adduser vyomУстановите пароль для него:
passwd vyomПри необходимости ограничьте доступ пользователя в домашнюю директорию и настройте права файлов.
Начальная конфигурация vsftpd
Откройте основной конфигурационный файл:
nano /etc/vsftpd/vsftpd.confНайдите и измените (или добавьте) следующие параметры:
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=NOСохраните файл и перезапустите сервис:
systemctl restart vsftpd
systemctl status vsftpdОжидаемый вывод сервиса примерно такой (перевод см. далее):
? vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
Active: active (running) since Fri 2020-02-21 00:43:57 EST; 6s ago
Process: 2698 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
Main PID: 2699 (vsftpd)
Tasks: 1 (limit: 6102)
Memory: 1020.0K
CGroup: /system.slice/vsftpd.service
??2699 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
Feb 21 00:43:57 centos8 systemd[1]: Stopped Vsftpd ftp daemon.
Feb 21 00:43:57 centos8 systemd[1]: Starting Vsftpd ftp daemon...
Feb 21 00:43:57 centos8 systemd[1]: Started Vsftpd ftp daemon.Если сервис не запускается — посмотрите журналы через journalctl -u vsftpd.
Настройка SELinux и firewalld
CentOS 8 использует SELinux по умолчанию. Разрешите полный доступ для ftpd (сохранится между перезагрузками):
setsebool -P allow_ftpd_full_access=1Откройте сервис FTP в firewalld:
firewall-cmd --zone=public --permanent --add-service=ftp
firewall-cmd --reloadЕсли вы используете пассивный режим FTP, дополнительно откройте диапазон пассивных портов в конфигурации и в firewalld — см. раздел ниже.
Подключение к серверу VSFTPD (проверка работы без TLS)
С клиентской машины можно попробовать подключиться через стандартный ftp-клиент:
ftp 172.20.10.3Пример сессии:
Connected to 172.20.10.3.
220 (vsFTPd 3.0.3)
Name (172.20.10.3:root): vyom
331 Please specify the password.
Password:
230 Login successful.В режиме без шифрования передача паролей незашифрована — поэтому далее мы включим TLS.
Подключение через TLS (FTPS): подготовка сертификата
Для шифрования соединений с FTP-сервером используйте SSL/TLS. Для тестов можно сгенерировать самоподписанный сертификат.
Установите OpenSSL, если он не установлен:
dnf install openssl -yСоздайте директорию для приватного ключа и сертификата:
mkdir -p /etc/ssl/private
chmod 700 /etc/ssl/privateСгенерируйте самоподписанный сертификат RSA 2048 бит:
openssl req -newkey rsa:2048 -nodes -keyout /etc/ssl/private/vsftpd.key -x509 -days 365 -out /etc/ssl/private/vsftpd.crtВы увидите приглашения для ввода данных сертификата (Country, State, Common Name и т.д.). В поле Common Name укажите имя сервера (или FQDN).
Включение TLS в конфигурации vsftpd
Откройте конфигурацию:
nano /etc/vsftpd/vsftpd.confДобавьте в конец файла следующие строки, чтобы включить шифрование:
# Path of the SSL certificate
rsa_cert_file=/etc/ssl/private/vsftpd.crt
rsa_private_key_file=/etc/ssl/private/vsftpd.key
# Enable the SSL/TLS
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
# TSL/SSL versions: включаем TLSv1.2 как минимум
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH
# Enable SSL debugging
debug_ssl=YESПримечание: параметр require_ssl_reuse=NO нужен для некоторых клиентов, но может снизить безопасность повторного использования сессий. Оцените требования к безопасности вашей инфраструктуры.
Перезапустите сервис:
systemctl restart vsftpdПроверка TLS-подключения
Проба подключиться через стандартный ftp-клиент покажет ошибку, так как он не поддерживает FTPS:
ftp 172.20.10.3Ожидаемый вывод:
Connected to 172.20.10.3.
220 (vsFTPd 3.0.2)
Name (172.20.10.3:root): vyom
530 Non-anonymous sessions must use encryption.
Login failed.
421 Service not available, remote server has closed connection
ftp>Используйте FTP-клиент с поддержкой FTPS, например FileZilla.

Откройте Site Manager в FileZilla и создайте новый сайт. Укажите IP, протокол FTP и выберите Use explicit FTP over TLS. Попросите запрашивать пароль и укажите пользователя vyom.


При подключении FileZilla покажет диалог проверки сертификата — подтвердите и сохраните, если сертификат приемлем.



Важные дополнительные настройки (пассивный режим, chroot, ограничения)
FTP использует два канала: управляющий (порт 21) и канал передачи данных (порт 20 или динамический для пассивного режима). Для стабильной работы в пассивном режиме укажите диапазон пассивных портов и пробросьте их через брандмауэр.
Пример настроек для пассивного диапазона в /etc/vsftpd/vsftpd.conf:
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30100
pasv_address=YOUR.PUBLIC.IP.OR.FQDNОткройте диапазон пассивных портов в firewalld:
firewall-cmd --permanent --add-port=30000-30100/tcp
firewall-cmd --reloadЧтобы ограничить пользователей их домашними директориями, включите chroot:
chroot_local_user=YES
allow_writeable_chroot=YESЕсли вы используете SELinux, убедитесь, что метки для директорий заданы корректно и ftpd имеет доступ:
semanage fcontext -a -t public_content_t "/home/vyom(/.*)?"
restorecon -Rv /home/vyom(Если отсутствует semanage, установите пакет policycoreutils-python-utils.)
Рекомендации по безопасности
- Используйте TLS 1.2 или выше, отключите SSLv2/SSLv3.
- По возможности используйте сертификат от доверенного центра (Let’s Encrypt). Для FTPS с публичным FQDN можно получить сертификат и указать пути rsa_cert_file/rsa_private_key_file.
- Отключите анонимный доступ (anonymous_enable=NO).
- Включите chroot для локальных пользователей (chroot_local_user=YES).
- Разрешите только сильные шифры (ssl_ciphers) и протестируйте совместимость с клиентами.
- Рассмотрите использование fail2ban для блокировки повторных неудачных попыток входа.
- Логи: включите xferlog и debug_ssl для отладки, затем анализируйте /var/log/messages или /var/log/xferlog.
Альтернативы и когда FTPS не подходит
- SFTP (SSH File Transfer Protocol) — передача файлов по SSH. Работает на порту 22, прост в настройке (openssh), лучше интегрируется с механизмами авторизации Unix и обычно проще в настройке NAT/пассивных портов. Используйте SFTP вместо FTPS если вам не требуется совместимость с устаревшими FTP-клиентами.
- WebDAV поверх HTTPS — если требуется доступ к файлам через веб и браузеры.
Когда FTPS предпочтителен:
- Необходима совместимость с существующими FTP-интеграциями и клиентами, которые поддерживают FTPS.
Когда FTPS не подходит:
- Среда с сложным NAT, где управление пассивными портами затруднено.
Отладка и распространённые проблемы
- Проблема: клиент не может подключиться в пассивном режиме.
- Проверьте, открыт ли диапазон пассивных портов в firewalld.
- Укажите pasv_address публичный IP сервера (или FQDN).
- Проблема: ошибка “530 Non-anonymous sessions must use encryption” при попытке через обычный ftp-клиент.
- Означает, что сервер требует TLS; используйте FTPS-клиент.
- Проблема: SELinux блокирует доступ.
- Посмотрите AVC-повреждения в audit.log: ausearch -m avc -ts recent или journalctl -t setroubleshoot.
- Настройте boolean allow_ftpd_full_access=1 или метки файлов.
- Проблема: сертификат самоподписан — клиент предупреждает.
- Для продуктивной среды используйте сертификат от CA или настройте доверие клиентских приложений.
Чек-лист для роли администратора
- Установлен пакет vsftpd и запущен сервис.
- Создан FTP-пользователь с ограниченной домашней директорией.
- Отключён анонимный доступ.
- Включён chroot для локальных пользователей.
- Настроен пассивный диапазон портов и проброшен в firewall.
- SELinux настроен, либо поправлены контексты и boolean-переменные.
- Настроено шифрование TLS и доступен сертификат.
- Протестировано подключение через FileZilla (explicit FTP over TLS).
- Включен логирование и установлены средства обнаружения аномалий (fail2ban).
Критерии приёмки
- Пользователь может подключиться по FTPS (explicit FTP over TLS) и передать файл (UPLOAD/DOWNLOAD) без ошибок.
- При подключении по обычному FTP (без TLS) не удаётся войти, если требуется шифрование.
- Сертификат корректно отдаются сервером и клиент видит TLS-сессию (версия TLS ≥ 1.2).
- Передача данных работает в пассивном и активном режимах (если требуется).
- Логи фиксируют успешный логин и операции передачи; нет критических ошибок SELinux.
Мини-методология развертывания (SOP)
- Подготовка сервера: обновление, резервная копия конфигураций.
- Установка vsftpd и OpenSSL.
- Создание пользователей и домашней структуры.
- Настройка конфигурации vsftpd (chroot, pasv, логирование).
- Генерация/установка сертификата и включение TLS.
- Настройка firewalld и SELinux.
- Тестирование: FileZilla, transfer sanity checks, мониторинг логов.
- Документирование и включение alert/backup процедур.
Тестовые сценарии и приёмочные тесты
- Тест 1: Успешный вход по FTPS, передача файла 1 МБ.
- Тест 2: Попытка входа без TLS возвращает ошибку 530.
- Тест 3: Передача в пассивном режиме через NAT работает корректно.
- Тест 4: Повторная неудачная аутентификация блокируется fail2ban (если настроено).
Миграция и совместимость
CentOS 8 имеет жизненный цикл; при окончании поддержки рассмотрите миграцию на Rocky Linux или AlmaLinux. Конфигурация vsftpd переносится редактированием /etc/vsftpd/vsftpd.conf и копированием сертификатов и ключей.
Заключение
В руководстве показаны шаги по установке vsftpd на CentOS 8, созданию пользователя, базовой конфигурации, настройке firewalld и SELinux, генерации сертификата и включению TLS/FTPS. Дополнительно приведены рекомендации по безопасности, чек-листы и тесты приёмки.
Если нужна помощь с конкретной конфигурацией (например, интеграция с LDAP, настройка SFTP вместо FTPS, или получение сертификата от Let’s Encrypt для FTPS), опишите окружение — подскажу точные команды и последовательность действий.
Важно: в продуктивной среде рекомендуется использовать сертификаты от доверенных CA и ограничивать доступ по IP/сетям, а также включать мониторинг и автоматическое обновление пакетов.
Факто-бокс: ключевые порты и параметры
- Управляющий порт FTP: 21/TCP
- Активный режим передачи данных: порт 20/TCP
- Пасcивный диапазон: настраивается (например, 30000-30100)
- Рекомендуемая версия TLS: TLSv1.2 и выше
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента