====== ProFTPd ====== ===== FTP ===== Соединение осуществляется по двум каналам, передача команд и передача данных, данные могут передаваться в двух режимах:\\ **Активный режим** - клиент начинает слушать у себя определенный порт и просит сервер подключится по нему\\ **Пассивный режим** - клиент сам подключается к серверу по порту из его диапазона\\ В обоих случаях нужно настраивать файер на входящие соединения, в первом на клиенте, во втором на сервере\\ ===== Установка ===== # apt install proftpd # systemctl enable proftpd ===== Базовая конфигурация ===== Основной конфигурационный файл **/etc/proftpd/proftpd.conf** UseIPv6 off PassivePorts 3000 3020 DefaultRoot ~ # Ограничить пользователей только домашней папкой # Ограничение входа AllowUser user1,user2 DenyAll # Определение клиента, для корректности работы через NAT From 192.168.0.0/21[24] MasqueradeAddress public-ip Изначально работает в UTF8, русские символы в ней поддерживаются, если создать их в другой кодировке то с utf естественно правильно не отобразятся, сменить у сервера кодировку:\\ #LangDefault ru_RU.UTF8 #LangPath /usr/share/locale #LangEngine on #UseEncoding UTF-8 WINDOWS-1251 ===== Виртуальный пользователь ===== Создаем виртуального пользователя: # ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=username --uid=33 --gid=33 --home=/../folder-ftp --shell=/usr/sbin/nologin **Uid и Gid** можно указывать **любые**, существующие или нет, в примере указан как у системного пользователя **www-data**. Так же, можно **нескольким пользователям** задавать **одинаковые id**.\\ Создаем дополнительный конфиг **/etc/proftpd/conf.d/virtual_file.conf**: RequireValidShell off AuthUserFile /etc/proftpd/ftpd.passwd AuthPAM off LoadModule mod_auth_file.c AuthOrder mod_auth_file.c Возможно имеет смысл создать отдельного пользователя, с минимальными правами, что бы использовать его ID-шники, а не www-data. ===== Настройка доступа ===== После создания **виртуальных пользователей**, выбранную папку можно **задать им домашней**, и включить директиву **DefaultRoot**, что бы **ограничить их** только этой папкой, так же, **доступ** должен соответствовать на **уровне ФС**.\\ Далее, создаем отдельный конфиг для директорий **/etc/proftpd/conf.d/example.conf** Order deny,allow AllowUser username ===== ===== Список активных модулей, находится в файле: **/etc/proftpd/modules.conf** * **mod_delay.c** - разработан что бы усложнить определенный тип утечки информации, «временная атака» * **mod_ctrls.c** - реализует серверную часть сокета Unix, для связи с запущенным proftpd-демоном * **mod_quotatab.c** - для использования квот * **mod_ratio.c** - позволяет установить ограничения на скорость * **mod_ifsession** - позволяет применять конфигурации к определенным сеансам, разграничивать их ===== Шифрование TLS ===== В основном файле конфигурации раскомментируем строку **Include /etc/proftpd/tls.conf**.\\ Идем в этот файл и убираем комментарий со следующих строк: TLSEngine on TLSLog /var/log/proftpd/tls.log TLSProtocol SSLv23 ... TLSRSACertificateFile /etc/ssl/certs/proftpd.crt TLSRSACertificateKeyFile /etc/ssl/private/proftpd.key ... TLSOptions NoCertRequest EnableDiags NoSessionReuseRequired ... TLSVerifyClient off ... TLSRequired on Затем, генерируем сертификат: # openssl req -x509 -nodes -newkey rsa:2048 -keyout /etc/ssl/private/proftpd.key -out /etc/ssl/certs/proftpd.crt -subj "/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=ftp.hostname.local/CN=ftp"