Протокол FTP широко используется для доступа к файлам на серверах. В связи с его популярностью, он встроен во многие инструменты управления файлами (mc, Filezilla, Windows Commander, Windows Explorer), текстовые редакторы, системы резервного копирования и другие инструменты.
FTP — это очень старый протокол, который появился в 1971 году, когда обмен файлам в незащищенных сетях не использовался. В связи с этим, в изначальном протоколе отсутствуют средства для обеспечения безопасности передачи данных между клиентом и сервером, соответственно, FTP нельзя использовать для передачи чувствительных данных вне доверенных сетей.
Для FTP существует расширение стандарта FTPS, которое позволяет клиенту требовать шифрование соединения с помощью протокола TLS, что делает защиту данных безопасной.
В этой статье мы рассмотрим как можно настроить сервер ProFTP для поддержки защищенной передачи данных с помощью сертификата SSL Let’s Encrypt. Фактически, вы можете использовать самостоятельно сгенерированный сертификат, а не Let’s Encrypt, однако, это приведет к тому, что клиентские приложения будут выдавать предупреждение или просто не будут работать, в зависимости от их реализации.
Установка Certbot
Для работы с сертификатами Let’s Encrypt требуется установить специальный пакет, который называется Certbot:
Debian, Ubuntu
sudo apt update && sudo apt install -y certbot
CentOS 7
sudo yum install -y certbot
Получение сертификата для сервера
Убедитесь, что команда hostname —fqdn отдает корректное доменное имя сервера в полном формате. После этого можно запустить команду получения сертификата для домена:
sudo certbot certonly -n --standalone -m user@site.com --agree-tos -d $(hostname --fqdn)
Результат работы команды приведен ниже:
Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator standalone, Installer None Obtaining a new certificate Performing the following challenges: http-01 challenge for proftp.cs2.netpoint-dc.com Waiting for verification... Cleaning up challenges IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/proftp.cs2.netpoint-dc.com-0001/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/proftp.cs2.netpoint-dc.com-0001/privkey.pem Your cert will expire on 2019-07-05. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
Автоматическое обновление сертификата
Важно настроить автопродление сертификата. Сертификаты LE требуется продлевать каждые 90 дней. Мы просто настроим ежедневную задачу CRON, которая будет это делать. Для этого создайте файл /etc/cron.daily/le-renew со следующим содержимым:
#/bin/bash certbot renew
Пометьте его как исполняемый и проверьте, что он работает:
sudo chmod 755 /etc/cron.daily/le-renew sudo /etc/cron.daily/le-renew
Установка и настройка PROFTPD
Мы будем использовать надежный, хорошо зарекомендовавший себя сервер PROFTPD для реализации защищенного FTP.
Debian, Ubuntu
sudo apt install -y proftpd
CentOS 7
sudo yum install -y proftpd proftpd-utils systemctl enable proftpd
После установки ProFTPd сразу готов обслуживать доступ по небезопасному протоколу FTP. Для активации FTPS требуется совершить ряд дополнительных настроек, которые приведены ниже. Вы должны заменить %WEBSITE% на имя домена, указанного при генерации сертификата Let’s Encrypt.
<IfModule mod_tls.c> TLSEngine on TLSLog /var/log/proftpd/tls.log TLSProtocol SSLv23 TLSRequired yes TLSRSACertificateFile /etc/letsencrypt/live/%WEBSITE%-0001/cert.pem TLSRSACertificateKeyFile /etc/letsencrypt/live/%WEBSITE%-0001/privkey.pem TLSCACertificateFile /etc/letsencrypt/live/%WEBSITE%-0001/chain.pem </IfModule>
Debian, Ubuntu. Данный код можно добавить в /etc/proftpd/tls.conf.
CentOS 7. В CentOS 7 создайте файл /etc/proftpd/disabled_mod/tls.conf с вышеприведенным содержимым и активируйте модуль:
ln -s /etc/proftpd/disabled_mod/tls.conf /etc/proftpd/enabled_mod/ systemctl restart proftpd
Теперь вы можете проверить работу FTPS, соединившись с сервером, например, с помощью LFTP:
touch file lftp -e 'put file' ftp://administrator@proftp.cs2.netpoint-dc.com Пароль: lftp administrator@proftp.cs2.netpoint-dc.com:~> ls -rw-r--r-- 1 administrator administrator 0 Apr 6 22:59 file lftp administrator@proftp.cs2.netpoint-dc.com:~>
В процессе соединения LFTP должен сообщить об установке защищенного соединения. Поскольку мы принудительно требуем установки защищенного соединения с помощью директивы TLSRequired yes, то клиенты без поддержки TLS не смогут работать с сервером. Если вы хотите разрешить им выполнять загрузку в небезопасном режиме, установите TLSRequired в значение no.
На этом базовая настройка сервера FTP, обеспечивающего безопасные сессии пользователей по протоколу FTPS завершена.