Как да защитите 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 Certificate Signing Request (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, освен това, тъй като TSL е по-сигурен от 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. Когато инсталацията завърши (или ако вече сте я инсталирали), отворете я и отидете на File=>Sites Manager или (натиснете 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 връзки, както ви показахме в този урок. Споделете мислите си относно този урок/тема чрез формата за обратна връзка по-долу.