Cum să securizați un server FTP utilizând SSL/TLS pentru transferul securizat de fișiere în CentOS 7


Prin designul său original, FTP (File Transfer Protocol) nu este sigur, ceea ce înseamnă că nu criptează datele transmise între două mașini, împreună cu datele de conectare ale utilizatorului. Acest lucru reprezintă o amenințare masivă la adresa datelor, precum și a securității serverului.

În acest tutorial, vom explica cum să activați manual serviciile de criptare a datelor într-un server FTP în CentOS/RHEL 7 și Fedora; vom parcurge diferiți pași de securizare a serviciilor VSFTPD (Very Secure FTP Daemon) folosind certificate SSL/TLS.

Cerințe preliminare:

  1. Trebuie să fi instalat și configurat un server FTP în CentOS 7

Înainte de a începe, rețineți că toate comenzile din acest tutorial vor fi executate ca root, în caz contrar, utilizați comanda sudo pentru a obține privilegii de root dacă nu controlați serverul folosind contul root.

Pasul 1. Generarea certificatului SSL/TLS și a cheii private

1. Trebuie să începem prin a crea un subdirector sub: /etc/ssl/ unde vom stoca certificatul SSL/TLS și fișierele cheie :

mkdir /etc/ssl/private

2. Apoi rulați comanda de mai jos pentru a crea certificatul și cheia pentru vsftpd într-un singur fișier, iată explicația fiecărui indicator utilizat.

  1. req – este o comandă pentru gestionarea cererii de semnare a certificatului (CSR) X.509.
  2. x509 – înseamnă gestionarea datelor certificatului X.509.
  3. zile – definește numărul de zile pentru care certificatul este valabil.
  4. newkey – specifică procesorul cheii de certificat.
  5. rsa:2048 – procesorul de chei RSA, va genera o cheie privată de 2048 de biți.
  6. keyout – setează fișierul de stocare a cheilor.
  7. out – setează fișierul de stocare a certificatului, rețineți că atât certificatul, cât și cheia sunt stocate în același fișier: /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

Comanda de mai sus vă va cere să răspundeți la întrebările de mai jos, nu uitați să utilizați valori care se aplică scenariului dvs.

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 

Pasul 2. Configurarea VSFTPD pentru a utiliza SSL/TLS

3. Înainte de a efectua orice configurație VSFTPD, să deschidem porturile 990 și 40000-50000 pentru a permite conexiuni TLS și gama de porturi de porturi pasive pentru a defini în fișierul de configurare VSFTPD respectiv:

firewall-cmd --zone=public --permanent --add-port=990/tcp
firewall-cmd --zone=public --permanent --add-port=40000-50000/tcp
firewall-cmd --reload

4. Acum, deschideți fișierul de configurare VSFTPD și specificați detaliile SSL în el:

vi /etc/vsftpd/vsftpd.conf

Căutați opțiunea ssl_enable și setați valoarea acesteia la YES pentru a activa utilizarea SSL, în plus, deoarece TSL este mai sigur decât SSL, vom restricționa VSFTPD să folosească TLS în schimb, utilizând opțiunea ssl_tlsv1_2:

ssl_enable=YES
ssl_tlsv1_2=YES
ssl_sslv2=NO
ssl_sslv3=NO

5. Apoi, adăugați liniile de mai jos pentru a defini locația certificatului SSL și a fișierului cheie:

rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem

6. În continuare, trebuie să împiedicăm utilizatorii anonimi să folosească SSL, apoi să forțăm toate conexiunile non-anonime să utilizeze o conexiune SSL securizată pentru transferul de date și să trimită parola în timpul conectării:

allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES

7. În plus, putem adăuga opțiunile de mai jos pentru a spori securitatea serverului FTP. Când opțiunea require_ssl_reuse este setată la YES, atunci toate conexiunile de date SSL sunt necesare pentru a prezenta reutilizarea sesiunii SSL; demonstrând că cunosc același secret principal ca și canalul de control.

Prin urmare, trebuie să-l oprim.

require_ssl_reuse=NO

Din nou, trebuie să selectăm ce cifruri SSL va permite VSFTPD pentru conexiunile SSL criptate cu opțiunea ssl_ciphers. Acest lucru poate limita foarte mult eforturile atacatorilor care încearcă să forțeze un anumit cifr în care probabil au descoperit vulnerabilități în:

ssl_ciphers=HIGH

8. Acum, setați intervalul de porturi (portul minim și maxim) pentru porturile pasive.

pasv_min_port=40000
pasv_max_port=50000

9. Opțional, permiteți depanarea SSL, ceea ce înseamnă că diagnosticarea conexiunii openSSL este înregistrată în fișierul jurnal VSFTPD cu opțiunea debug_ssl:

debug_ssl=YES

Salvați toate modificările și închideți fișierul. Apoi, să repornim serviciul VSFTPD:

systemctl restart vsftpd

Pasul 3: Testarea serverului FTP cu conexiuni SSL/TLS

10. După ce ați efectuat toate configurațiile de mai sus, testați dacă VSFTPD utilizează conexiuni SSL/TLS încercând să utilizați FTP din linia de comandă, după cum urmează:

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>

Din captura de ecran de mai sus, putem vedea că există o eroare care ne informează că VSFTPD poate permite utilizatorului să se autentifice numai de la clienți care acceptă servicii de criptare.

Linia de comandă nu oferă servicii de criptare producând astfel eroarea. Deci, pentru a vă conecta în siguranță la server, avem nevoie de un client FTP care acceptă conexiuni SSL/TLS, cum ar fi FileZilla.

Pasul 4: Instalați FileZilla pentru a vă conecta în siguranță la un server FTP

11. FileZilla este un client FTP modern, popular și, important, multiplatform, care acceptă implicit conexiuni SSL/TLS.

Pentru a instala FileZilla în Linux, executați comanda de mai jos:

--------- On CentOS/RHEL/Fedora --------- 
yum install epel-release filezilla

--------- On Debian/Ubuntu ---------
sudo apt-get install  filezilla   

12. Când instalarea se încheie (sau dacă o aveți deja instalată), deschideți-o și accesați File=>Manager site-uri sau (apăsați Ctrl+S ) pentru a obține interfața Manager site de mai jos.

Faceți clic pe butonul Site nou pentru a adăuga detalii despre conexiunea unui nou site/gazdă.

13. Apoi, setați numele gazdei/site-ului, adăugați adresa IP, definiți protocolul de utilizat, criptarea și tipul de conectare ca în captura de ecran de mai jos (utilizați valorile care se aplică scenariului dvs.):

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. Apoi faceți clic pe Conectați pentru a introduce parola din nou, apoi verificați certificatul utilizat pentru conexiunea SSL/TLS și faceți clic o dată pe OK mai multe pentru a vă conecta la serverul FTP:

În această etapă, ar fi trebuit să ne logăm cu succes la serverul FTP printr-o conexiune TLS, verificați secțiunea privind starea conexiunii pentru mai multe informații din interfața de mai jos.

15. Nu în ultimul rând, încercați să transferați fișiere de pe computerul local pe serverul FTP din folderul de fișiere, aruncați o privire la capătul de jos al interfeței FileZilla pentru a vedea rapoarte privind transferurile de fișiere.

Asta e tot! Rețineți întotdeauna că FTP nu este securizat în mod implicit, cu excepția cazului în care îl configuram să utilizeze conexiuni SSL/TLS, așa cum v-am arătat în acest tutorial. Împărtășiți-vă părerile despre acest tutorial/subiect prin intermediul formularului de feedback de mai jos.