Как защитить FTP-сервер с помощью SSL/TLS для безопасной передачи файлов в CentOS 7
По своему первоначальному замыслу, FTP (Протокол передачи файлов) не является безопасным, что означает, что он не шифрует данные, передаваемые между двумя машинами, а также учетные данные пользователя. Это представляет собой огромную угрозу как для данных, так и для безопасности сервера.
В этом руководстве мы объясним, как вручную включить службы шифрования данных на FTP-сервере в CentOS/RHEL 7 и Fedora; мы пройдем через различные этапы защиты служб VSFTPD (Очень безопасный FTP-демон) с использованием сертификатов SSL/TLS.
Предпосылки :
- Вы должны установить и настроить FTP-сервер в CentOS 7
Прежде чем мы начнем, обратите внимание, что все команды в этом руководстве будут выполняться от имени root, в противном случае используйте команду sudo, чтобы получить привилегии root, если вы не управляете сервером с учетной записью root.
Шаг 1. Генерация SSL/TLS сертификата и закрытого ключа
1. Нам нужно начать с создания подкаталога в: /etc/ssl/, где мы будем хранить файлы сертификата и ключа SSL/TLS:
# mkdir /etc/ssl/private
2. Затем выполните приведённую ниже команду, чтобы создать сертификат и ключ для vsftpd в одном файле, ниже приведено объяснение каждого используемого флага.
- req - это команда для управления запросами на подпись сертификатов X.509 (CSR).
- x509 - означает управление данными сертификатов X.509.
- дней - определяет количество дней, в течение которых сертификат действителен.
- newkey - задаёт процессор ключей сертификата.
- rsa:2048 - процессор ключей RSA, сгенерирует приватный ключ длиной 2048 бит.
- keyout - задаёт файл хранения ключа.
- out - задаёт файл хранения сертификата, обратите внимание, что и сертификат, и ключ хранятся в одном файле: /etc/ssl/private/vsftpd.pem.
# openssl req -x509 -nodes -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem -days 365 -newkey rsa:2048
Вышеуказанная команда попросит вас ответить на вопросы ниже, не забывайте использовать значения, которые подходят для вашего сценария.
Country Name (2 letter code) [XX]:IN
State or Province Name (full name) []:Lower Parel
Locality Name (eg, city) [Default City]:Mumbai
Organization Name (eg, company) [Default Company Ltd]:TecMint.com
Organizational Unit Name (eg, section) []:Linux and Open Source
Common Name (eg, your name or your server's hostname) []:tecmint
Email Address []:[email
Шаг 2. Настройка VSFTPD для использования SSL/TLS
3. Прежде чем выполнять какие-либо настройки VSFTPD, давайте откроем порты 990 и 40000-50000, чтобы разрешить TLS-подключения и диапазон пассивных портов для определения в конфигурационном файле VSFTPD соответственно:
# firewall-cmd --zone=public --permanent --add-port=990/tcp
# firewall-cmd --zone=public --permanent --add-port=40000-50000/tcp
# firewall-cmd --reload
4. Теперь откройте файл конфигурации VSFTPD и укажите в нём данные SSL:
# vi /etc/vsftpd/vsftpd.conf
Ищите опцию ssl_enable и установите её значение в YES, чтобы активировать использование SSL. Кроме того, поскольку TLS безопаснее, чем SSL, мы ограничим использование VSFTPD только TLS, используя опцию ssl_tlsv1_2:
ssl_enable=YES
ssl_tlsv1_2=YES
ssl_sslv2=NO
ssl_sslv3=NO
5. Затем добавьте следующие строки, чтобы указать местоположение SSL-сертификата и файла ключа:
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
6. Далее нам нужно предотвратить использование SSL анонимными пользователями, а затем заставить всех пользователей с неанонимной регистрацией использовать безопасное соединение SSL для передачи данных и отправки пароля при входе:
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
7. Кроме того, мы можем добавить приведённые ниже параметры для повышения безопасности FTP-сервера. Когда параметр require_ssl_reuse установлен в YES, все SSL-данные соединения обязаны демонстрировать повторное использование SSL-сессии; доказывая, что они знают тот же мастер-ключ, что и управляющий канал.
Следовательно, нам нужно его выключить.
require_ssl_reuse=NO
Снова нам нужно выбрать, какие SSL-шифры VSFTPD будет разрешать для зашифрованных SSL-соединений с помощью опции ssl_ciphers. Это может значительно ограничить усилия злоумышленников, которые пытаются навязать определённый шифр, в котором они, вероятно, обнаружили уязвимости:
ssl_ciphers=HIGH
8. Теперь установите диапазон портов (минимальный и максимальный порт) для пассивных портов.
pasv_min_port=40000
pasv_max_port=50000
9. При желании, разрешите отладку SSL, то есть диагностика соединений openSSL записывается в файл журнала VSFTPD с помощью опции debug_ssl:
debug_ssl=YES
Сохраните все изменения и закройте файл. Затем перезапустим сервис VSFTPD:
# systemctl restart vsftpd
Шаг 3: Тестирование FTP-сервера с подключениями SSL/TLS
10. После выполнения всех вышеописанных настроек проверьте, использует ли VSFTPD соединения SSL/TLS, попытавшись использовать FTP из командной строки следующим образом:
# ftp 192.168.56.10
Connected to 192.168.56.10 (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : ravi
530 Non-anonymous sessions must use encryption.
Login failed.
421 Service not available, remote server has closed connection
ftp>
Из скриншота выше мы видим, что появляется ошибка, сообщающая нам о том, что VSFTPD может разрешать пользователю входить только с клиентов, которые поддерживают службы шифрования.
Командная строка не предоставляет услуги шифрования, что и вызывает ошибку. Поэтому для безопасного подключения к серверу нам нужен FTP-клиент, поддерживающий соединения SSL/TLS, такой как FileZilla.
Шаг 4: Установите FileZilla для безопасного подключения к FTP-серверу
11. FileZilla — это современный, популярный и, что важно, кроссплатформенный FTP-клиент, который по умолчанию поддерживает соединения SSL/TLS.
Чтобы установить FileZilla в Linux, выполните следующую команду:
--------- On CentOS/RHEL/Fedora ---------
# yum install epel-release filezilla
--------- On Debian/Ubuntu ---------
$ sudo apt-get install filezilla
12. Когда установка завершится (или если она уже установлена), откройте программу и перейдите в Файл=>Диспетчер сайтов или (нажмите Ctrl+S), чтобы открыть интерфейс Диспетчера сайтов ниже.
Нажмите на кнопку Новый сайт, чтобы добавить данные о новом соединении с сайтом/хостом.
13. Далее установите имя хоста/сайта, добавьте IP-адрес, определите используемый протокол, шифрование и тип входа, как показано на скриншоте ниже (используйте значения, которые подходят для вашего сценария):
Host: 192.168.56.10
Protocol: FTP - File Transfer Protocol
Encryption: Require explicit FTP over #recommended
Logon Type: Ask for password #recommended
User: username
14. Затем нажмите Подключиться, чтобы снова ввести пароль, а затем проверьте сертификат, используемый для SSL/TLS-соединения, и снова нажмите OK, чтобы подключиться к FTP-серверу:
На этом этапе мы должны были успешно войти на FTP-сервер через TLS-соединение, проверьте раздел состояния соединения для получения дополнительной информации из интерфейса ниже.
15. И наконец, попробуйте перенести файлы с локального компьютера на FTP-сервер в папку файлов, взгляните на нижнюю часть интерфейса FileZilla, чтобы просмотреть отчёты о передаче файлов.
Вот и всё! Всегда имейте в виду, что FTP по умолчанию не является безопасным, если мы не настроим его на использование соединений SSL/TLS, как мы показали вам в этом руководстве. Обязательно поделитесь своими мыслями о этом руководстве/теме через форму обратной связи ниже.





