Нельзя просто оставлять доступ к сайту компании для обмена файлами через банальный 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
.
И я успешно подключился, вижу статус подключения, что подключение используется только с использованием сертификата:
Отлично. Теперь перехватить передаваемые аутентификационные данные уже затруднительно.
Шаг №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
Ошибка: Невозможно подключиться к серверу
Работает, теперь только подключение с использованием сертификата. Изменяю сохраненное подключение с Файл - Менеджер сайтов - сохраненное подключение
—
Шифрование: Использовать обычный FTP (небезопасно)
на
Шифрование: Требовать FTP через TLS (явный)
и нажимаю «ОК
» для сохранения внесенных изменений. И только после этого подключение к сервису становится возможным.
Задача выполнена. На этом пока все, с уважением автор блога Олло Александр aka ekzorchik.