Нельзя просто оставлять доступ к сайту компании для обмена файлами через банальный FTP доступ с одной лишь авторизацией через связку логин и пароль и порт 21. Я объяснил своему непосредственному руководителю, то делая как было мы

  • во-первых подвергаем ресурс опасности
  • во-вторых тратим ресурсы сервера на обработку подбора аутентификационных данных.

Моя рекомендация которую лично я использую — это использовать только sftp доступ, но раз здесь и сейчас используем сервис proftpd, то доработаем заметку использования ProFTPd путем настройки работы через SSL/TLS и только через него. Все дальнейшие шаги применяются где сервис ProFTPd развернут на Ubuntu 18.04. Других операционных систем не приемлю.

Шаг №1: Сперва идет заметка «Как применять ProFTPD на Ubuntu 18.04»

Шаг №2: Т.к. я сперва все делаю на своем полигоне, то работа сервиса ProFTPd будет на самоподписанном сертификате. Когда будет на боевом то на помощь придет утилита certbot где будет получен сертификат на 3 месяца + задание в планировщике на последующее автопродление. Никакого ручного способа, как в заметке «Как обновить сертификат Let’s Encrypt через DNS»

ekzorchik@srv-bionic:~$ sudo mkdir /etc/ssl/proftpd

ekzorchik@srv-bionic:~$ sudo openssl req -x509 -days 3650 -nodes -newkey rsa:4096 -keyout /etc/ssl/proftpd/proftpd.key -out /etc/ssl/proftpd/proftpd.crt

Country Name (2 letter code) [AU]:RU

State or Province Name (full name) [Some-State]:Russian

Locality Name (eg, city) []:Moscow

Organization Name (eg, company) [Internet Widgits Pty Ltd]:ekzorchik

Organizational Unit Name (eg, section) []:ekzorchik

Common Name (e.g. server FQDN or YOUR name) []:172.33.33.21

Email Address []:support@ekzorchik.ru

ekzorchik@srv-bionic:~$ sudo chmod 600 /etc/ssl/proftpd/proftpd.key

ekzorchik@srv-bionic:~$ ls -l /etc/ssl/proftpd/

total 8

-rw-r--r-- 1 root root 2155 Apr 8 20:12 proftpd.crt

-rw------- 1 root root 3268 Apr 8 20:12 proftpd.key

Шаг №3: Защитим созданные файлы сертификатов:

ekzorchik@srv-bionic:~$ sudo chmod 600 /etc/ssl/proftpd/proftpd.*

Шаг №4: Добавляю в /etc/proftpd/proftpd.conf строку где указано что работать сервис должен с использованием самоподписанного сертификата:

ekzorchik@srv-bionic:~$ sudo nano /etc/proftpd/proftpd.conf

Include /etc/proftpd/modules.conf

# Отключаем использование протокола IPv6

UseIPv6 off

IdentLookups off

# Имя FTP-сервера

ServerName "srv-bionic"

# Режим запуска FTP-сервера

ServerType standalone

DeferWelcome off

MultilineRFC2228 on

DefaultServer on

ShowSymlinks on

# Таймаут на передачу: вошел и не начал передачу выраженное в мили секундах

TimeoutNoTransfer 600

# Подвисание во время передачи файлов выраженное в мили секундах

TimeoutStalled 600

# Таймаут бездействия после входа выраженное в мили секундах

TimeoutIdle 1200

DisplayLogin welcome.msg

DisplayChdir .message true

ListOptions "-l"

# Запретить закачивать файлы, начинающиеся на точку

DenyFilter \*.*/

DefaultRoot ~

AuthUserFile /etc/proftpd/ftpd.passwd

Port 21

# запрещаем подключать от имени суперпользователя

RootLogin off

PassivePorts 49152 65534

<IfModule mod_dynmasq.c>

</IfModule>

# Максимальное количество дочерних процессов

MaxInstances 30

# Пользователь и группа, под которой работает демон

User proftpd

Group nogroup

# маска для ограничения создания директорий и файлов

Umask 022 022

# Разрешить перезаписывать существующие файлы

AllowOverwrite on

DebugLevel 10

TransferLog /var/log/proftpd/xfer.log

SystemLog /var/log/proftpd/proftpd.log

ExtendedLog /var/log/proftpd/auth.log AUTH auth

SetEnv TZ :/etc/localtime

<IfModule mod_quotatab.c>

QuotaEngine off

</IfModule>

<IfModule mod_ratio.c>

Ratios off

</IfModule>

<IfModule mod_delay.c>

DelayEngine on

</IfModule>

<IfModule mod_ctrls.c>

ControlsEngine off

ControlsMaxClients 2

ControlsLog /var/log/proftpd/controls.log

ControlsInterval 5

ControlsSocket /var/run/proftpd/proftpd.sock

</IfModule>

<IfModule mod_ctrls_admin.c>

AdminControlsEngine off

</IfModule>

#вот эта строчка ниже должна быть для работы через SSL/TLS

Include /etc/proftpd/tls.conf

Include /etc/proftpd/conf.d/

ekzorchik@srv-bionic:~$ sudo nano /etc/proftpd/tls.conf

<IfModule mod_tls.c>

TLSEngine on

TLSLog /var/log/proftpd/tls.log

TLSProtocol TLSv1.2

TLSCipherSuite AES128+EECDH:AES128+EDH

TLSOptions NoCertRequest AllowClientRenegotiations

TLSRSACertificateFile /etc/ssl/proftpd/proftpd.crt

TLSRSACertificateKeyFile /etc/ssl/proftpd/proftpd.key

TLSVerifyClient off

TLSRequired off

RequireValidShell no

</IfModule>

ekzorchik@srv-bionic:~$ sudo nano /etc/default/proftpd

CONFIG_FILE=/etc/proftpd/proftpd.conf

RUN="yes"

OPTIONS="-DTLS"

ekzorchik@srv-bionic:~$ sudo systemctl restart proftpd && sudo netstat -tulpn | grep proftpd

tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 740/proftpd: (accep

ekzorchik@srv-bionic:~$

ekzorchik@srv-bionic:~$ sudo tail -f /var/log/proftpd/tls.log

2020-04-08 20:52:48,601 mod_tls/2.6[936]: Protection set to Private

2020-04-08 20:52:48,612 mod_tls/2.6[936]: starting TLS negotiation on data connection

2020-04-08 20:52:48,613 mod_tls/2.6[936]: client reused SSL session for data connection

2020-04-08 20:52:48,613 mod_tls/2.6[936]: TLSv1.2 data connection accepted, using cipher ECDHE-RSA-AES128-GCM-SHA256 (128 bits)

Шаг №5: Проверяю, как будет выглядеть подключение через клиент FileZilla с моей рабочей системы Ubuntu 18.04 Desktop ноутбука Lenovo E555

ekzorchik@navy:~$ sudo apt-get install -y filezilla

ekzorchik@navy:~$ filezilla
  • Хост: 172.33.33.21
  • Имя пользователя: ftp1
  • Пароль: Aa1234567
  • Порт: 21

и нажимаю «Быстрое соединение»

в ответ окно, что для соединения с сервисом используется «Неизвестный сертификат«, отмечаю галочкой «Всегда принимать сертификат в будущих сессиях» и нажимаю OK.

Если подключение к FTP сервису на базе ProFTPD с использование самоподписанного сертификата

И я успешно подключился, вижу статус подключения, что подключение используется только с использованием сертификата:

Подключение к ProFTPd с самоподписанным сертификатом - успешно!

Отлично. Теперь перехватить передаваемые аутентификационные данные уже затруднительно.

Шаг №6: Вот только если использовать директиву TLSRequired off в tls.conf в этом значении, то подключение возможно как с использование сертификата так и нет, а мне это не нужно, значит изменяю ее на TLSRequired on

ekzorchik@srv-bionic:~$ sudo nano /etc/proftpd/tls.conf

TLSRequired On

ekzorchik@srv-bionic:~$ sudo systemctl restart proftpd

Шаг №7: Проверяю, так ли это что я изменил значение параметра TLSRequired на значение On в «Шаг №6»

ekzorchik@navy:~$ filezilla

Редактирование - Настройки - Интерфейс

(Passwords)

  • Save passwords: отмечаю

и нажимаю ОК

Создаю подключение:

Файл - Менеджер сайтов - Новый сайт

вкладка «Общие»

  • Хост: 172.33.33.21
  • Порт: 21
  • Протокол: FTP-Протокол передачи файлов
  • Шифрование: Использовать обычный FTP (небезопасно)
  • Тип входа: Нормальный
  • Пользователь: ftp1
  • Пароль: Aa1234567

и нажимаю OK, а после снова Файл - Менеджер сайтов — выбираю созданное подключение и нажимаю «Соединиться» и получаю лог:

Статус: Соединяюсь с 172.33.33.21:21...

Статус: Соединение установлено, ожидание приглашения...

Ответ: 220 ProFTPD 1.3.5e Server (srv-bionic) [172.33.33.21]

Команда: USER ftp1

Ответ: 550 SSL/TLS required on the control channel

Ошибка: Невозможно подключиться к серверу

Статус: Ожидание повтора...

Статус: Соединяюсь с 172.33.33.21:21...

Статус: Соединение установлено, ожидание приглашения...

Ответ: 220 ProFTPD 1.3.5e Server (srv-bionic) [172.33.33.21]

Команда: USER ftp1

Ответ: 550 SSL/TLS required on the control channel

Ошибка: Невозможно подключиться к серверу

Если подключение явное без указании опции TLS то оно не пройдет

Работает, теперь только подключение с использованием сертификата. Изменяю сохраненное подключение с Файл - Менеджер сайтов - сохраненное подключение

  • Шифрование: Использовать обычный FTP (небезопасно)

на

  • Шифрование: Требовать FTP через TLS (явный)

и нажимаю «ОК» для сохранения внесенных изменений. И только после этого подключение к сервису становится возможным.

Задача выполнена. На этом пока все, с уважением автор блога Олло Александр aka ekzorchik.