Настройка FTPS сервера с шифрованием данных и Let's Encrypt: vsftpd и FileZilla Server | AdminWiki
Timeweb Cloud — сервера, Kubernetes, S3, Terraform. Лучшие цены IaaS.
Попробовать

Настройка FTPS сервера с шифрованием данных и Let's Encrypt: vsftpd и FileZilla Server

01 апреля 2026 8 мин. чтения

В этом руководстве вы получите готовое, проверенное решение для настройки безопасного FTPS сервера с обязательным использованием TLS и бесплатными SSL-сертификатами Let's Encrypt. Мы подробно разберем настройку двух популярных серверов — vsftpd для Linux и FileZilla Server для Windows — с акцентом на принудительное шифрование всех передаваемых данных и автоматическое обновление сертификатов. Инструкция содержит конкретные команды, конфигурационные файлы и методы проверки, которые гарантированно работают в production-среде и не сломают вашу систему.

Зачем переходить на FTPS и как работает шифрование данных

Обычный FTP (File Transfer Protocol) передает все данные, включая логины, пароли и содержимое файлов, в открытом виде. Это делает его неприемлемым для передачи конфиденциальной информации и не соответствующим современным стандартам безопасности, таким как PCI DSS или GDPR. FTPS (FTP Secure) решает эту проблему, добавляя слой шифрования TLS/SSL поверх FTP-протокола, аналогично тому, как HTTPS защищает HTTP. В отличие от SFTP (SSH File Transfer Protocol), который является отдельным протоколом поверх SSH, FTPS — это расширение классического FTP, что часто упрощает интеграцию с legacy-системами и клиентами.

Уязвимости обычного FTP: почему данные нужно шифровать

Основная угроза незашифрованного FTP — перехват данных (sniffing) в сети. Злоумышленник, имеющий доступ к сетевому сегменту (например, в публичной Wi-Fi сети или даже внутри корпоративной сети при недостаточной сегментации), может:

  • Перехватить учетные данные (логин и пароль) при авторизации.
  • Считать или модифицировать передаваемые файлы.
  • Провести атаку "человек посередине" (MITM), подменив сервер или команды.

Кроме того, plain FTP не обеспечивает целостность данных — невозможно гарантировать, что файл не был изменен при передаче. Для соответствия требованиям безопасности в 2026 году использование незашифрованных протоколов для передачи данных считается грубым нарушением.

Let's Encrypt: бесплатные SSL-сертификаты для автоматизации

Let's Encrypt — это некоммерческий центр сертификации, выдающий бесплатные SSL/TLS сертификаты, доверенные всеми основными браузерами и операционными системами. Его ключевое преимущество для DevOps и системных администраторов — полная автоматизация жизненного цикла сертификата через ACME-протокол. Вместо ручного процесса запроса, оплаты, установки и ежегодного обновления платных сертификатов, Let's Encrypt позволяет автоматизировать все эти шаги с помощью клиента Certbot. Это идеально вписывается в практики CI/CD и инфраструктуру как код, исключая человеческий фактор и простои из-за просроченных сертификатов.

Подготовка сервера и получение SSL-сертификата Let's Encrypt

Перед началом убедитесь, что у вас есть:

  • Сервер с публичным IP-адресом.
  • Зарегистрированное доменное имя (например, ftp.example.com).
  • Настроенные DNS A-записи, указывающие доменное имя на IP-адрес вашего сервера.
  • Открытые порты 80 (HTTP) и/или 443 (HTTPS) для прохождения ACME-челленджа при получении сертификата. После настройки FTPS эти порты можно закрыть, если на сервере не запущены веб-сервисы.

Установка и первичная настройка Certbot

Установите клиент Certbot. Команды зависят от дистрибутива Linux:

Ubuntu/Debian:

sudo apt update
sudo apt install certbot

CentOS/RHEL/Rocky Linux/AlmaLinux (с включенным EPEL):

sudo dnf install epel-release
sudo dnf install certbot

Получите standalone-сертификат для вашего домена. Этот метод временно запускает веб-сервер на порту 80 для проверки владения доменом:

sudo certbot certonly --standalone -d ftp.example.com

После успешного выполнения команды сертификаты будут размещены в каталоге /etc/letsencrypt/live/ftp.example.com/. Ключевые файлы:

  • fullchain.pem — цепочка сертификатов (ваш сертификат + промежуточные CA).
  • privkey.pem — приватный ключ.

Убедитесь, что у приватного ключа корректные права доступа (только для чтения владельцем):

sudo chmod 600 /etc/letsencrypt/live/ftp.example.com/privkey.pem

Настройка автоматического обновления сертификатов через cron

Сертификаты Let's Encrypt действительны 90 дней. Certbot может автоматически обновлять их. Сначала выполните тестовый запуск:

sudo certbot renew --dry-run

Если тест прошел успешно, настройте автоматическое обновление с помощью cron. Откройте crontab для пользователя root:

sudo crontab -e

Добавьте строку для еженедельного запуска обновления (например, каждое воскресенье в 3:00 ночи):

0 3 * * 0 /usr/bin/certbot renew --quiet --post-hook "systemctl reload vsftpd"

Флаг --quiet подавляет вывод, --post-hook выполняет команду только в случае успешного обновления (здесь — перезагрузка vsftpd для применения новых сертификатов). Рекомендуется также настроить отправку уведомлений об ошибках (например, через mail или в систему мониторинга) на случай сбоя обновления.

Настройка vsftpd с обязательным использованием TLS (TLS enforcement)

Vsftpd (Very Secure FTP Daemon) — стандартный и надежный FTP-сервер для большинства Linux-дистрибутивов. Установите его:

Ubuntu/Debian: sudo apt install vsftpd
CentOS/RHEL: sudo dnf install vsftpd

Основной конфигурационный файл обычно находится в /etc/vsftpd.conf или /etc/vsftpd/vsftpd.conf. Создайте резервную копию, затем отредактируйте файл, добавив или изменив следующие директивы:

# Базовые настройки
listen=YES
listen_ipv6=NO
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES

# Настройки пассивного режима (важно для работы из-за фаервола)
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=50000
pasv_address=ВАШ_PUBLIC_IP  # Укажите публичный IP сервера

# === КРИТИЧНО: Настройки SSL/TLS для FTPS ===
ssl_enable=YES                # Включить поддержку SSL
allow_anon_ssl=NO             # Запретить анонимным пользователям SSL
force_local_data_ssl=YES      # Принудительное шифрование данных для локальных пользователей
force_local_logins_ssl=YES    # Принудительное шифрование при логине
ssl_tlsv1=YES                 # Разрешить TLSv1.2 и TLSv1.3 (безопасные версии)
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH              # Использовать стойкие шифры

# Указание путей к сертификатам Let's Encrypt
rsa_cert_file=/etc/letsencrypt/live/ftp.example.com/fullchain.pem
rsa_private_key_file=/etc/letsencrypt/live/ftp.example.com/privkey.pem

Критичные параметры конфигурации для шифрования данных

Директивы force_local_data_ssl=YES и force_local_logins_ssl=YES — ключевые для "TLS enforcement". Они гарантируют, что сервер будет отклонять любые команды AUTH, кроме AUTH SSL или AUTH TLS, и не позволит передавать данные в незашифрованном виде. Клиенты, не поддерживающие TLS, просто не смогут подключиться. Параметр ssl_ciphers=HIGH настраивает использование только стойких алгоритмов шифрования (например, AES256-GCM).

Решение частых проблем с vsftpd и TLS

  • Ошибки доступа к сертификатам: Убедитесь, что пользователь, от имени которого запущен vsftpd (обычно ftp или root), имеет права на чтение файлов fullchain.pem и privkey.pem. Права 600 для приватного ключа обязательны.
  • Проблемы с пассивным режимом: Если клиент подключается, но не может получить список файлов, откройте в фаерволе диапазон портов, указанных в pasv_min_port и pasv_max_port (в примере 40000-50000). Для iptables команда может выглядеть так: sudo iptables -A INPUT -p tcp --dport 40000:50000 -j ACCEPT.
  • Ошибка "GnuTLS error -15": Часто возникает из-за несовпадения имени в сертификате и имени хоста, к которому подключается клиент. Убедитесь, что в сертификате для ftp.example.com клиент подключается именно по этому имени, а не по IP-адресу.

После настройки перезагрузите vsftpd и добавьте в автозагрузку:

sudo systemctl restart vsftpd
sudo systemctl enable vsftpd

Настройка FileZilla Server на Windows с поддержкой Let's Encrypt

Для Windows-сред популярным решением является FileZilla Server. Основная сложность — преобразование сертификатов Let's Encrypt (формат PEM) в формат PFX (PKCS#12), который понимает Windows.

Конвертация сертификатов Let's Encrypt для Windows

Выполните эту команду на Linux-сервере, где получены сертификаты, или на любой машине с OpenSSL, предварительно скопировав туда файлы fullchain.pem и privkey.pem:

openssl pkcs12 -export -out certificate.pfx -inkey privkey.pem -in fullchain.pem

Вам будет предложено задать пароль для экспортируемого файла. Запомните его. Скопируйте полученный файл certificate.pfx на ваш Windows-сервер.

На Windows-сервере импортируйте сертификат в хранилище:

  1. Нажмите Win+R, введите certlm.msc и нажмите Enter (оснастка "Управление сертификатами (локальный компьютер)").
  2. Перейдите в Личные -> Сертификаты.
  3. В меню выберите Действие -> Все задачи -> Импорт....
  4. В мастере импорта укажите путь к файлу certificate.pfx, введите пароль, установите флаг "Пометить этот ключ как экспортируемый" (опционально) и поместите сертификат в хранилище "Личные".

Установите FileZilla Server с официального сайта. После запуска интерфейса администратора:

  1. Перейдите в Edit -> Settings.
  2. В разделе General settings -> Listen on this port... укажите стандартный порт 21.
  3. В разделе SSL/TLS settings:
    • Установите флаг Enable FTP over SSL/TLS support (FTPS).
    • В поле Private key file нажмите Browse и выберите импортированный сертификат из хранилища Windows.
    • Введите пароль от файла .pfx.
    • Для максимальной безопасности выберите Force explicit FTP over TLS. Это аналог "TLS enforcement" в vsftpd.
  4. В разделе Autoban рекомендуется включить защиту от брутфорса.
  5. В разделе Users создайте необходимых пользователей, назначьте пароли и домашние каталоги.

Нажмите OK и перезапустите сервер.

Проверка и тестирование работы безопасного FTPS-сервера

После настройки критически важно убедиться, что сервер работает корректно и отклоняет незашифрованные соединения.

Командная строка: глубокая проверка TLS-рукопожатия

Используйте утилиту OpenSSL для детальной проверки. Эта команда имитирует FTPS-клиента и показывает полную информацию о рукопожатии:

openssl s_client -connect ftp.example.com:21 -starttls ftp

В выводе обратите внимание на:

  • Строку Verify return code: 0 (ok) — означает, что сертификат доверенный.
  • Секцию Certificate chain — должен присутствовать ваш сертификат для ftp.example.com.
  • Строку Subject: CN = ftp.example.com — имя в сертификате.
  • Секцию Cipher — используемый алгоритм шифрования (должен быть стойким, например, ECDHE-RSA-AES256-GCM-SHA384).

Для проверки принудительного шифрования попробуйте подключиться обычным telnet и отправить любую команду (например, USER test). Сервер должен ответить ошибкой 530 Non-anonymous sessions must use encryption. или разорвать соединение.

Тестовое подключение через FileZilla Client

  1. Запустите FileZilla Client.
  2. В "Менеджере сайтов" создайте новый сайт.
  3. Укажите:
    • Хост: ftp.example.com
    • Порт: 21
    • Протокол: FTP — File Transfer Protocol
    • Шифрование: Требуется явный FTP через TLS
    • Тип входа: Обычный
    • Пользователь и пароль: ваши учетные данные.
  4. Нажмите "Соединиться".

В строке состояния вверху должно появиться сообщение типа: "Соединение установлено, ожидание приветствия...", а затем "TLS-соединение установлено" и список файлов. Это подтверждает успешное защищенное подключение. Попробуйте передать тестовый файл.

Дополнительная безопасность и адаптация под вашу среду

Базовая настройка обеспечивает безопасное соединение. Для усиления защиты в production-среде рекомендуется:

  • Настройка Fail2ban: Установите и настройте Fail2ban для отслеживания неудачных попыток входа в логах vsftpd (/var/log/vsftpd.log) и временной блокировки IP-адресов при брутфорсе.
  • Строгая настройка файервола: Откройте только необходимые порты: 21 (FTP), и диапазон пассивных портов (например, 40000-50000). Закройте все остальные.
  • Особенности для TrueNAS: В TrueNAS Scale/Core используйте встроенный механизм ACME для получения сертификатов Let's Encrypt через веб-интерфейс. При настройке службы FTP укажите путь к этим сертификатам и обязательно включите опции, требующие TLS.
  • Регулярное обновление: Следите за обновлениями vsftpd, FileZilla Server и OpenSSL для установки исправлений уязвимостей. Автоматизируйте этот процесс, где это возможно.

Для управления сложными приложениями и их зависимостями, которые могут передаваться по FTP, рассмотрите использование контейнеризации. В нашей базе знаний есть полное практическое руководство по Docker для системных администраторов и DevOps, которое объясняет, как контейнеры решают проблемы изоляции, воспроизводимости и управления зависимостями в реальных рабочих сценариях.

Поделиться:
Сохранить гайд? В закладки браузера