Безопасный FTP с ProFTPd и TLS на Ubuntu 16.04
Коротко: стандартный FTP передаёт пароли и данные в открытом виде — используйте TLS (FTPS) для шифрования соединения. В этой инструкции показано, как установить ProFTPd, сгенерировать самоподписанный сертификат, включить TLS, добавить FTP-пользователя и подключиться безопасно через FileZilla. В конце — чеклисты, варианты и план действий при проблемах.
1 Предварительное замечание
В этой инструкции используется имя хоста server1.example.com и IP 192.168.1.100. Замените эти значения на ваши, где это необходимо.
Все шаги нужно выполнять с правами root. Вы можете либо предварять команды sudo, либо получить root-произвольную оболочку командой:
sudo -sЯ буду использовать редактор nano для правки конфигурационных файлов. Если хотите тоже его установить, выполните:
apt-get -y install nanoВажно: FTP без TLS небезопасен — пароли и содержимое передаются в открытом виде. TLS шифрует канал, поэтому используйте его всегда, если клиент и сервер это поддерживают.
2 Установка ProFTPd и OpenSSL
OpenSSL необходим для TLS. Установите ProFTPd и OpenSSL одной командой:
apt-get -y install proftpd opensslИнсталлятор спросит: Run proftpd: <– standalone — выберите режим, подходящий для вашей системы (standalone чаще используется на серверах).
Для повышения безопасности добавьте в /etc/proftpd/proftpd.conf следующие строки (пример настройки):
nano /etc/proftpd/proftpd.conf[...]
DefaultRoot ~
ServerIdent on "FTP Server ready."
[...]DefaultRoot переводит пользователей в их домашние каталоги (chroot). ServerIdent позволяет показывать нейтральное сообщение без деталей о версии сервера и ОС — это уменьшает раскрытие информации потенциальному злоумышленнику.
3 Создание SSL-сертификата для TLS
Чтобы включить TLS, нужно создать SSL-сертификат. Я буду хранить его в /etc/proftpd/ssl — сначала создадим директорию:
mkdir /etc/proftpd/sslЗатем сгенерируем самоподписанный сертификат и приватный ключ:
openssl req -new -x509 -days 365 -nodes -out /etc/proftpd/ssl/proftpd.cert.pem -keyout /etc/proftpd/ssl/proftpd.key.pemПри генерации заполните поля, например:
- Country Name (2 letter code) — код вашей страны, например “DE”.
- State or Province Name — регион или область.
- Locality Name — город.
- Organization Name — название организации или компании.
- Organizational Unit Name — подразделение, например “IT”.
- Common Name — полное доменное имя сервера, например server1.example.com.
- Email Address — контактный e‑mail.
Защитите файлы сертификата и ключа правами доступа:
chmod 600 /etc/proftpd/ssl/proftpd.*Важно: самоподписанный сертификат подойдёт для внутренних лабораторий и небольших инфраструктур, но для публичных серверов используйте сертификат от доверенного центра (CA) или бесплатный от Let’s Encrypt.
4 Включение TLS в ProFTPd
Откройте основной конфигурационный файл:
nano /etc/proftpd/proftpd.confРаскомментируйте строку Include /etc/proftpd/tls.conf, чтобы подключить конфигурацию TLS:
[...]
#
# This is used for FTPS connections
#
Include /etc/proftpd/tls.conf
[...]Теперь отредактируйте файл /etc/proftpd/tls.conf так, чтобы он содержал следующие настройки:
nano /etc/proftpd/tls.conf
TLSEngine on
TLSLog /var/log/proftpd/tls.log
TLSProtocol TLSv1.2
TLSCipherSuite AES128+EECDH:AES128+EDH
TLSOptions NoCertRequest AllowClientRenegotiations
TLSRSACertificateFile /etc/proftpd/ssl/proftpd.cert.pem
TLSRSACertificateKeyFile /etc/proftpd/ssl/proftpd.key.pem
TLSVerifyClient off
TLSRequired on
RequireValidShell no
Пояснения к ключевым параметрам:
- TLSEngine on — включает TLS.
- TLSProtocol TLSv1.2 — принудительный выбор TLS 1.2 (безопаснее старых версий). При необходимости можно разрешить TLSv1.3, если ваша версия ProFTPd/OpenSSL это поддерживает.
- TLSCipherSuite — подбор безопасных шифров.
- TLSRequired on — запретить нешифрованные подключения. Включайте, когда все клиенты поддерживают TLS.
После внесения изменений перезапустите сервис:
systemctl restart proftpd.serviceЕсли возникнут ошибки TLS, проверьте лог: /var/log/proftpd/tls.log
Важно: при включённом TLSRequired off/закомментированном параметре будут разрешены как TLS, так и не-TLS соединения — это уменьшает безопасность, но улучшает совместимость со старыми клиентами.
5 Добавление FTP-пользователя
ProFTPD по умолчанию аутентифицирует пользователей через системные учётные записи (/etc/passwd, /etc/shadow). Для FTP-учёта мы создадим пользователя tom без shell-доступа.
Создайте пользователя без интерактивного шелла:
useradd --shell /bin/false tomСоздайте домашнюю директорию и назначьте владельца:
mkdir /home/tom
chown tom:tom /home/tom/Альтернатива: указать другой каталог домашней директории и создать её автоматически:
useradd --home /srv/tomftp --create-home --shell /bin/false tomЗатем задайте пароль для tom:
passwd tomВведите пароль дважды.
Примечание: /bin/false предотвращает вход по SSH, но разрешает FTP-подключение. При необходимости используйте более гранулированную политику доступа через PAM или отдельный механизм аутентификации.
6 Настройка FileZilla для TLS
Для подключения используйте FTP‑клиент с поддержкой TLS, например FileZilla.
Откройте «Диспетчер сайтов» (Site Manager) в FileZilla.

Выберите запись сервера, в качестве протокола укажите FTP, а в поле менеджера шифрования — Требовать явный TLS (Explicit FTP over TLS) или аналогичный пункт в вашей локализации.

При подключении FileZilla запросит пароль пользователя.

При первом соединении вы увидите запрос на принятие SSL‑сертификата сервера — проверьте отпечаток и подтвердите, если всё верно.

Если всё настроено правильно, вы увидите успешный вход и список файлов в вашей домашней директории.

7 Скачивание готовой виртуальной машины (опционально)
Готовая конфигурация, описанная в этой инструкции, доступна как виртуальная машина в формате OVA/OVF (VMWare/VirtualBox). Параметры примерной VM:
- SSH-пользователь: administrator / пароль: howtoforge (имеет sudo).
- FTP-пользователь: tom / пароль: howtoforge.
- IP: 192.168.1.100 — меняется в /etc/network/interfaces.
Обязательно смените пароли перед использованием в продуктиве.
8 Ссылки
- ProFTPd: http://www.proftpd.org/
- FileZilla: http://filezilla-project.org/
- Ubuntu: http://www.ubuntu.com/
Дополнительные рекомендации и практическая ценность
Ниже собраны практические добавки: альтернативы, чеклисты, runbook при проблемах и критерии приёмки. Эти материалы помогут администратору принять решение и безопасно внедрить ProFTPd с TLS.
Когда этот подход не подходит
- Если вам нужен доступ по SFTP (SSH File Transfer Protocol), то ProFTPd+TLS не заменит SFTP — это другой протокол поверх SSH. SFTP часто проще для управления ключами и более совместим со средствами автоматизации.
- Если у вас много пользователей и нужна централизованная аутентификация (LDAP/Active Directory), рассмотрите интеграцию ProFTPd с PAM/LDAP или используйте решение, которое уже поддерживает такую интеграцию нативно.
- Для публичных сервисов с высокой нагрузкой и строгими требованиями к журналированию имеет смысл сравнить производительность и возможности логирования с другими FTP/FTPS-серверами.
Альтернативные подходы
- SFTP (через OpenSSH): безопасный протокол, работает поверх SSH, не требует отдельного TLS. Подходит для сценариев, где важна интеграция с SSH-ключами.
- vsftpd: лёгкий FTP-сервер с хорошей репутацией безопасности и поддержкой SSL/TLS.
- ProFTPd с модулем mod_sftp: если хотите объединить возможности ProFTPd и SFTP.
Критерии выбора: совместимость клиентов, требования к шифрованию, упрощение управления пользователями и ключами.
Мини‑методология внедрения (шаги)
- Подготовить тестовую среду (VM) с IP и FQDN.
- Установить ProFTPd и OpenSSL.
- Сгенерировать сертификат и настроить права доступа.
- Включить TLS в конфигурации, настроить шифры и протокол.
- Добавить тестового пользователя и проверить chroot.
- Проверить подключение из FileZilla и других клиентов.
- Перенести изменения в production, обеспечить мониторинг логов.
Чеклист администратора перед запуском
- Сгенерирован сертификат и установлен в /etc/proftpd/ssl/.
- Приваты ключи защищены chmod 600.
- TLSEngine включён, TLSRequired настроен в соответствии с политикой.
- Проверен TLSLog (/var/log/proftpd/tls.log) на ошибки.
- Пользователи находятся в chroot (DefaultRoot ~).
- Логи вращаются и архивируются (logrotate).
- Настроен брандмауэр: разрешён только нужный порт (обычно 21 + диапазон пассивных портов).
- Документированы отпечатки сертификатов для администраторов и клиентов.
Чеклист для ролей
Администратор сервера:
- Настроить сервер и сертификаты.
- Настроить резервное копирование конфигураций.
- Мониторить TLS-логи и доступность.
Оператор поддержки:
- Проверять логи при жалобах пользователей.
- Помогать принять/проверить сертификат клиента.
Пользователь FTP:
- Подключаться только по FTPS (Explicit TLS).
- Проверять отпечаток сертификата при первом подключении.
Runbook: распространённые проблемы и устранение
Проблема: Клиент не может установить TLS‑соединение.
- Шаг 1: Проверить /var/log/proftpd/tls.log на сообщения об ошибке.
- Шаг 2: Убедиться, что сертификат и ключ существуют и права доступа 600.
- Шаг 3: Проверить соответствие путей TLSRSACertificateFile и TLSRSACertificateKeyFile.
- Шаг 4: Убедиться, что OpenSSL поддерживает выбранную версию TLS (openssl version).
- Шаг 5: Если используется TLSProtocol TLSv1.2, попробовать временно разрешить TLSv1.1/1.0 для диагностики (только в тесте).
Проблема: После включения TLSRequired on часть клиентов не подключается.
- Решение: временно вернуть TLSRequired off и уведомить пользователей о необходимости обновить клиенты; затем постепенно включайте TLSRequired снова.
Проблема: Ошибка передачи данных в пассивном режиме.
- Убедитесь, что правильно настроен диапазон пассивных портов и они открыты в брандмауэре/нате.
- Пропишите PassivePorts в конфигурации proftpd и проверьте external IP/NAT settings.
Критерии приёмки
- Установлено зашифрованное соединение (TLS) и передача данных проходит по шифрованному каналу.
- Пользователь tom подключается и видит только свой домашний каталог.
- TLS логи не содержат критических ошибок в течение 24 часов тестовой нагрузки.
- Сертификат корректно отображается клиентом и отпечатки сверены с документацией.
Факты и короткие числа
- Стандартная продолжительность самоподписанного сертификата в примере: 365 дней.
- Рекомендуемый минимальный протокол: TLS 1.2 (TLS 1.3 — если поддерживается).
Короткий словарь (1‑строчные определения)
- FTPS: FTP поверх TLS/SSL (шифрует управляющий канал и/или данные).
- TLS: Transport Layer Security — криптографический протокол для защиты трафика.
- SFTP: файл-протокол по SSH (не путать с FTPS).
- chroot: механизм ограничения доступа процесса к части файловой системы.
Безопасность и примечания для GDPR/конфиденциальности
- Шифрование канала (TLS) защищает персональные данные при передаче.
- Хранение паролей остаётся на сервере ( /etc/shadow ) — соблюдайте общие политики хранения и rotation паролей.
- Логи могут содержать метаданные доступа — определите политику хранение/удаления логов согласно требованиям соответствия.
Резюме
Использование ProFTPd с TLS значительно повышает безопасность передачи файлов по сравнению с нешифрованным FTP. Следуйте чеклистам, контролируйте логирование и хранение сертификатов, а для публичных сервисов предпочтительно использовать сертификат от доверенного CA. В идеале рассмотрите SFTP как альтернативу для сценариев со строгим управлением доступом.
Важно: перед переводом сервера в продуктив обязательно провести тесты совместимости клиентов и восстановления конфигурации из резервной копии.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента