ProFTPD

Полная инструкция по ProFTPD для обычного пользователя и администратора с примерами конфигураций, чек‑листами и приёмами диагностики от лица профессионального разработчика.


ProFTPD — гибкий, модульный и производительный FTP‑сервер со стилем конфигурации, похожим на Apache, поддержкой FTPS (mod_tls), SFTP (mod_sftp), виртуальных пользователей и расширенного логирования.

ProFTPD

Что такое ProFTPD

ProFTPD ориентирован на безопасность и масштабируемость, имеет богатую экосистему модулей и понятный синтаксис конфигурации, что делает его удобным для продакшена и многоарендных сценариев.proftpd+1
Официальная документация включает FAQ, HOWTO и подробные страницы модулей, где описаны FTPS, SFTP, NAT, виртуальные пользователи и расширенные политики доступа.proftpd+1

Пользователю: подключение

Подключение по FTP выполняется к хосту и порту 21, для FTPS выбирается явный TLS (Explicit TLS) на порту 21 с командой AUTH TLS либо неявный TLS на выделенном порту (например, 990) при соответствующей настройке сервера.proftpd+1
SFTP в ProFTPD обеспечивает модуль mod_sftp по протоколу SSH2 и работает на одном TCP‑соединении, что предпочтительно за NAT и строгими файрволами по сравнению с FTPS, требующим дополнительных портов.proftpd

Режимы передачи (активный/пассивный)

FTP использует отдельные каналы: управляющий и данные; в активном режиме сервер инициирует канал данных, а в пассивном — клиент, что влияет на правила файрвола и необходимость открытия диапазонов портов.proftpd
На практике пассивный режим чаще стабилен через NAT и корпоративные сети, но требует на стороне сервера ограничить PassivePorts и корректно настроить внешний адрес, если сервер за NAT.proftpd

Возобновление и перезапись

Чтобы возобновление (REST) и перезапись работали, на сервере должны быть разрешены соответствующие директивы (например, AllowStoreRestart/AllowRetrieveRestart/AllowOverwrite); некоторые опции несовместимы друг с другом (например, HiddenStores с рестартом).proftpd
Если клиент не может продолжить загрузку/выгрузку или получать листинг, причиной часто являются запреты в конфигурации или проблемы с пассивными портами/файрволом.proftpd

Установка и запуск (Ubuntu/Debian)

В Ubuntu/Debian установка выполняется из репозитория, с последующим запуском и автозапуском через systemd, что позволяет быстро поднять базовый сервер.atlantic+1
Типичный порядок: apt-get install proftpd, проверка статуса systemctl status proftpd и включение модуля шифрования (proftpd-mod-crypto) и FTPS-конфигурации при необходимости.ubuntu+1

Структура конфигураций и режим запуска

Основной файл конфигурации — /etc/proftpd/proftpd.conf, часто используются включения из /etc/proftpd/conf.d/ и/или tls.conf/modules.conf для модульной структуры.ubuntu
Запуск возможен как standalone (ServerType standalone) или через super‑server (inetd/xinetd), что влияет на модель управления соединениями и масштабируемость.proftpd

Базовые параметры производительности

Для ускорения аутентификации и снижения задержек рекомендуется отключить reverse DNS и ident‑запросы: UseReverseDNS off и IdentLookups off.ubuntu
Также задаются ServerName, Umask, User/Group и включаемые файлы, после чего конфигурацию следует валидировать тестом перед рестартом демона.ubuntu

Изоляция пользователей (chroot)

DefaultRoot ~ «сажает» пользователя в его домашний каталог, ограничивая видимую часть файловой системы и уменьшая риск случайного доступа к чужим данным.proftpd
Важно обеспечить корректные владельцев/права домашних директорий и учитывать, что chroot требует привилегий на запуск соответствующего системного вызова.proftpd

Анонимный доступ

Блок <Anonymous> позволяет включить гостевой доступ: как правило чтение разрешено, а запись — только в специально выделенном incoming с запретом чтения/удаления, чтобы избежать утечек и злоупотреблений.proftpd
Для анонимного входа применяются UserAlias, AnonRequirePassword off и RequireValidShell off для служебной учётной записи, а права каталогов задаются жёстко.proftpd

Виртуальные пользователи (без системных аккаунтов)

Для учёток без системного доступа используются AuthUserFile/AuthGroupFile с форматом как в /etc/passwd и /etc/group, которые читает модуль mod_auth_file.proftpd+1
Файлы с паролями и группами должны иметь строгие права и не находиться в world‑writable директориях, иначе модуль откажется их использовать; записи удобно создавать утилитой ftpasswd.proftpd+1

Отображение владельцев в листингах

Для мультиарендных сценариев возможна «косметическая» подмена владельца/группы в листингах через DirFakeUser/DirFakeGroup, чтобы показывать файлы как принадлежащие залогиненному пользователю.proftpd
Этот приём не меняет реальных владельцев и может влиять на ожидания клиентов, поэтому при необходимости комбинируется с HideNoAccess и ограничениями по каталогам.proftpd

FTPS (TLS/SSL) через mod_tls

mod_tls реализует FTPS и требует загрузки модуля, указания сертификатов/ключей и явного включения движка TLS с заданием протоколов и политик.proftpd
Базовые директивы: TLSEngine on, TLSProtocol TLSv1.2 TLSv1.3, TLSRSACertificateFile/TLSRSACertificateKeyFile, TLSRequired on/ctrl, TLSOptions (например, NoSessionReuseRequired), TLSLog для отладки.proftpd+1

Имплицитный FTPS и особенности ALPN/NPN

Для неявного FTPS предусмотрен TLSOption UseImplicitSSL в отдельном виртуальном хосте (обычно порт 990), учитывая совместимость клиентов.proftpd+1
Поддержка ALPN/NPN (TLSNextProtocol) может снижать задержку рукопожатия у некоторых клиентов за счёт TLS False Start; включение управляется директивами модуля.proftpd

FTPS за NAT/балансировщиками

В сценариях DMZ/прокси для FTPS применяется TLSMasqueradeAddress — аналог MasqueradeAddress, но только для FTPS‑сессий, чтобы корректно указывать внешний адрес в ответах PASV/EPSV.proftpd
Это важно, потому что устройства не могут переписать зашифрованные ответы FTPS, и требуется явное указание публичного адреса именно для шифрованных сессий.proftpd

SFTP (SSH2) через mod_sftp

mod_sftp реализует протокол SSH2 и его подсистему SFTP, работает по одному TCP‑соединению и удобен за NAT/файрволами, поддерживая пароли, ключи, PAM/LDAP/SQL и прочие механизмы.proftpd
Обязательна настройка SFTPHostKey (RSA/ED25519/другие), выбор методов SFTPAuthMethods, шифров/диджестов, логирования SFTPLog и допустимых расширений SFTPExtensions.proftpd

Ключи и совместимость SFTP

Если используются ключи OpenSSH нового формата, модуль до 1.3.7 требует их конвертации в PEM; для формата RFC4716 публичных ключей применяются инструменты ssh-keygen -e.proftpd
Поддерживаются цепочки методов аутентификации (например, publickey+password) и ограничения алгоритмов (SFTPCiphers, SFTPDigests, SFTPKeyExchanges) для соответствия политике безопасности.proftpd

NAT, PassivePorts и MasqueradeAddress

За NAT требуется прописать внешний IP/имя через MasqueradeAddress и ограничить диапазон пассивных портов через PassivePorts, затем пробросить этот диапазон на периметре.proftpd
Иначе клиентам снаружи будут недоступны каналы данных в пассивном режиме, что проявляется ошибками листинга/передачи или таймаутами.proftpd

Ограничение доступа (<Limit>, <Directory>)

Глобально вход регулируется через <Limit LOGIN> с Allow/Deny для пользователей/групп/сетей, а по каталогам — через <Directory> и классы команд READ/WRITE/STOR/DELE и т.п.proftpd
Для SFTP часть ограничений сопоставляется с командами SFTP (READ/WRITE/SETSTAT/RENAME и др.), что позволяет переиспользовать модель <Limit> и для SFTP‑сессий.proftpd

Логи и отладка

Ошибки входа и события фиксируются в syslog (AUTH/AUTHPRIV), что является первичным источником диагностики эксплуатационных проблем.proftpd
Для глубокой отладки используется запуск в консоли с -n -d 9 и отдельные журналы модулей, например TLSLog и SFTPLog, а также проверка конфигурации перед рестартом.proftpd+2

Производительность и лимиты

Настраиваются MaxInstances/MaxClients и таймауты (TimeoutNoTransfer/TimeoutStalled/TimeoutIdle) исходя из нагрузки и профиля клиентов.proftpd
Квоты и ограничения на уровне модулей (например, mod_quotatab) применяются при необходимости контроля дискового потребления и скоростей.proftpd

Примеры конфигураций

Базовый proftpd.conf:ubuntu+1

textServerName                  "ProFTPD"
ServerType                  standalone
Port                        21
Umask                       022  022
UseReverseDNS               off
IdentLookups                off
User                        proftpd
Group                       nogroup

DefaultRoot                 ~
RequireValidShell           off

AllowOverwrite              on
AllowStoreRestart           on
AllowRetrieveRestart        on

<Limit LOGIN>
  AllowAll
</Limit>

# Логи
SyslogFacility              AUTH
SyslogLevel                 notice

# Включения
Include                     /etc/proftpd/conf.d/*.conf

Анонимный доступ (частный incoming):proftpd

text<Anonymous ~ftp>
  User                      ftp
  Group                     ftp
  UserAlias                 anonymous ftp
  AnonRequirePassword       off
  RequireValidShell         off

  <Directory *>
    <Limit WRITE>
      DenyAll
    </Limit>
  </Directory>

  <Directory incoming>
    Umask                   077  077
    <Limit STOR>
      AllowAll
    </Limit>
    <Limit READ RMD DELE>
      DenyAll
    </Limit>
  </Directory>
</Anonymous>

Виртуальные пользователи через AuthUserFile/AuthGroupFile:proftpd+1

textAuthOrder                   mod_auth_file.c
AuthUserFile                /etc/proftpd/ftpd.passwd
AuthGroupFile               /etc/proftpd/ftpd.group
RequireValidShell           off

# Пример создания:
# ftpasswd --passwd --name=myuser --uid=2001 --gid=2001 \
#   --home=/srv/ftp/myuser --shell=/bin/false \
#   --file=/etc/proftpd/ftpd.passwd

FTPS (mod_tls) — современная политика TLS:proftpd+1

text<IfModule mod_tls.c>
  TLSEngine                 on
  TLSProtocol               TLSv1.2 TLSv1.3
  TLSRSACertificateFile     /etc/ssl/certs/proftpd.crt
  TLSRSACertificateKeyFile  /etc/ssl/private/proftpd.key
  TLSOptions                NoSessionReuseRequired
  TLSRequired               on
  TLSLog                    /var/log/proftpd/tls.log

  # Для FTPS в DMZ/за балансировщиком:
  # TLSMasqueradeAddress    203.0.113.10
</IfModule>

SFTP (mod_sftp) — независим от sshd:proftpd

text<IfModule mod_sftp.c>
  SFTPEngine                on
  Port                      2222
  SFTPHostKey               /etc/ssh/ssh_host_ed25519_key
  SFTPAuthMethods           publickey password
  SFTPLog                   /var/log/proftpd/sftp.log

  # Примеры алгоритмических политик:
  # SFTPCiphers             aes128-ctr aes256-ctr chacha20-poly1305@openssh.com
  # SFTPDigests             hmac-sha2-256 hmac-sha2-512
  # SFTPKeyExchanges        curve25519-sha256 diffie-hellman-group-exchange-sha256
</IfModule>

Пассивные порты и NAT:proftpd

textPassivePorts                50000 50100
MasqueradeAddress           203.0.113.10

Установка FTPS на Ubuntu (пример)

Установка пакетов и включение сервиса через systemd выполняются стандартно, затем добавляется tls.conf, включается модуль mod_tls и указываются пути к сертификату/ключу.atlantic
Готовность проверяется через systemctl status proftpd и по логам TLSLog, после чего выполняется проверка клиентом с режимом «Require explicit FTP over TLS».atlantic

Частые ошибки и решения

Login incorrect — неверные учётные данные, запрет входа по политике <Limit LOGIN> или блокировка по сети; причины видны в системных логах (AUTH/AUTHPRIV).proftpd
Ошибки 425/550 при листинге/передаче — чаще всего не настроен пассивный диапазон/проброс портов или не задан MasqueradeAddress за NAT.proftpd

Чек‑лист перед вводом в эксплуатацию

  • Сертификаты/ключи читаемы процессом демона, TLSRequired и TLSProtocol заданы, модули загружены.proftpd+1
  • DefaultRoot и права каталогов/владельцев проверены, вход ограничен нужными пользователями/сетями.proftpd
  • Для NAT прописаны MasqueradeAddress и PassivePorts, файрвол проброшен согласно диапазонам.proftpd
  • Для SFTP заданы SFTPHostKey, методы аутентификации и логирование, ключи в поддерживаемом формате.proftpd

Быстрая диагностика

Проверка синтаксиса конфигурации и запуск с максимальной детализацией позволяют оперативно локализовать ошибки в аутентификации, правах и сетевом тракте.proftpd
Отдельные журналы модулей (TLSLog/SFTPLog) упрощают анализ рукопожатий, протокольных версий и несовместимостей клиентов.proftpd+1

Если требуется, можно подготовить готовые конфигурации под конкретный дистрибутив, интеграцию с PAM/LDAP/SQL, жёсткие криптополитики для FTPS/SFTP, схемы изоляции и многоарендные профили.proftpd+1

Источники информации

  1. http://www.proftpd.org/docs/
  2. http://www.proftpd.org/docs/faq/faq_full.html
  3. http://www.proftpd.org
  4. http://www.proftpd.org/docs/contrib/mod_tls.html
  5. http://www.proftpd.org/docs/howto/TLS.html
  6. http://www.proftpd.org/docs/contrib/mod_sftp.html
  7. http://www.proftpd.org/docs/howto/NAT.html
  8. https://www.atlantic.net/vps-hosting/how-to-set-up-an-ftp-server-with-proftpd-in-ubuntu/
  9. https://help.ubuntu.com/community/ProFTPD
  10. http://www.proftpd.org/docs/howto/AuthFiles.html
  11. http://www.proftpd.org/docs/modules/mod_auth_file.html
  12. http://www.proftpd.org/docs/contrib/index.html
  13. https://redos.red-soft.ru/base/redos-7_3/7_3-network/7_3-sett-proftpd/
  14. http://www.proftpd.org/docs/contrib/mod_tls_shmcache.html
  15. http://www.proftpd.org/docs/contrib/mod_sftp_pam.html
  16. https://rtfm.wiki/linux/letsencrypt_proftpd
  17. https://ics.uci.edu/~sources/proftpd/1.2.10/howto/NAT.html
  18. https://forum.directadmin.com/threads/proftpd-mod_tls.40957/
  19. http://www.proftpd.org/docs/contrib/mod_sftp_sql.html
  20. https://proftp-user.narkive.com/6jfsKWQi/proftpd-user-passive-mode-and-nat-classic
  21. https://opennet.ru/9042-proftpd
  22. https://www.linux.org.ru/forum/admin/6625746
  23. https://www.goline.ch/2022/06/22/proftpd-with-tls-support-on-ubuntu/
  24. https://cyrisk.com/security/mitigation-instructions-for-proftpd-mod_sftp/
  25. https://forum.netgate.com/topic/87346/proftpd-active-passive-error
  26. http://sobek.hsdn.org/Docs/proftpd/howto/TLS.html

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

Разработка и продвижение сайтов webseed.ru
Прокрутить вверх