Поиск по сайту:

Как защитить FTP-сервер с помощью SSL/TLS для безопасной передачи файлов в CentOS 7


По своему первоначальному замыслу, FTP (Протокол передачи файлов) не является безопасным, что означает, что он не шифрует данные, передаваемые между двумя машинами, а также учетные данные пользователя. Это представляет собой огромную угрозу как для данных, так и для безопасности сервера.

В этом руководстве мы объясним, как вручную включить службы шифрования данных на FTP-сервере в CentOS/RHEL 7 и Fedora; мы пройдем через различные этапы защиты служб VSFTPD (Очень безопасный FTP-демон) с использованием сертификатов SSL/TLS.

Предпосылки :

  1. Вы должны установить и настроить FTP-сервер в CentOS 7

Прежде чем мы начнем, обратите внимание, что все команды в этом руководстве будут выполняться от имени root, в противном случае используйте команду sudo, чтобы получить привилегии root, если вы не управляете сервером с учетной записью root.

Шаг 1. Генерация SSL/TLS сертификата и закрытого ключа

1. Нам нужно начать с создания подкаталога в: /etc/ssl/, где мы будем хранить файлы сертификата и ключа SSL/TLS:

# mkdir /etc/ssl/private

2. Затем выполните приведённую ниже команду, чтобы создать сертификат и ключ для vsftpd в одном файле, ниже приведено объяснение каждого используемого флага.

  1. req - это команда для управления запросами на подпись сертификатов X.509 (CSR).
  2. x509 - означает управление данными сертификатов X.509.
  3. дней - определяет количество дней, в течение которых сертификат действителен.
  4. newkey - задаёт процессор ключей сертификата.
  5. rsa:2048 - процессор ключей RSA, сгенерирует приватный ключ длиной 2048 бит.
  6. keyout - задаёт файл хранения ключа.
  7. 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>

Проверить безопасное SSL-соединение 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), чтобы открыть интерфейс Диспетчера сайтов ниже.

Нажмите на кнопку Новый сайт, чтобы добавить данные о новом соединении с сайтом/хостом.

Добавить новый FTP-сайт в Filezilla

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

Добавьте данные FTP-сервера в Filezilla

14. Затем нажмите Подключиться, чтобы снова ввести пароль, а затем проверьте сертификат, используемый для SSL/TLS-соединения, и снова нажмите OK, чтобы подключиться к FTP-серверу:

Проверить SSL-сертификат FTP

На этом этапе мы должны были успешно войти на FTP-сервер через TLS-соединение, проверьте раздел состояния соединения для получения дополнительной информации из интерфейса ниже.

Подключено к FTP-серверу через TLS/SSL

15. И наконец, попробуйте перенести файлы с локального компьютера на FTP-сервер в папку файлов, взгляните на нижнюю часть интерфейса FileZilla, чтобы просмотреть отчёты о передаче файлов.

Безопасная передача файлов с использованием FTP

Вот и всё! Всегда имейте в виду, что FTP по умолчанию не является безопасным, если мы не настроим его на использование соединений SSL/TLS, как мы показали вам в этом руководстве. Обязательно поделитесь своими мыслями о этом руководстве/теме через форму обратной связи ниже.