====== 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"