Wyszukiwanie w witrynie

Jak zabezpieczyć serwer FTP za pomocą protokołu SSL/TLS do bezpiecznego przesyłania plików w CentOS 7


Ze względu na swoją oryginalną konstrukcję FTP (protokół przesyłania plików) nie jest bezpieczny, co oznacza, że nie szyfruje danych przesyłanych między dwoma maszynami, wraz z poświadczeniami użytkownika. Stanowi to ogromne zagrożenie dla danych i bezpieczeństwa serwerów.

W tym samouczku wyjaśnimy, jak ręcznie włączyć usługi szyfrowania danych na serwerze FTP w CentOS/RHEL 7 i Fedorze; przejdziemy przez różne etapy zabezpieczania usług VSFTPD (Very Secure FTP Daemon) za pomocą certyfikatów SSL/TLS.

Warunki wstępne:

  1. Musisz mieć zainstalowany i skonfigurowany serwer FTP w CentOS 7

Zanim zaczniemy, pamiętaj, że wszystkie polecenia opisane w tym samouczku zostaną uruchomione jako root. W przeciwnym razie użyj polecenia sudo, aby uzyskać uprawnienia roota, jeśli nie kontrolujesz serwera przy użyciu konta root.

Krok 1. Generowanie certyfikatu SSL/TLS i klucza prywatnego

1. Musimy zacząć od utworzenia podkatalogu pod: /etc/ssl/ gdzie będziemy przechowywać certyfikat SSL/TLS oraz pliki kluczy :

mkdir /etc/ssl/private

2. Następnie uruchom poniższe polecenie, aby utworzyć certyfikat i klucz dla vsftpd w jednym pliku. Oto wyjaśnienie każdej użytej flagi.

  1. req – to polecenie służące do zarządzania żądaniami podpisania certyfikatu X.509 (CSR).
  2. x509 – oznacza zarządzanie danymi certyfikatu X.509.
  3. dni – określa liczbę dni ważności certyfikatu.
  4. newkey – określa procesor klucza certyfikatu.
  5. rsa:2048 – procesor kluczy RSA, wygeneruje 2048-bitowy klucz prywatny.
  6. keyout – ustawia plik przechowywania kluczy.
  7. out – ustawia plik przechowywania certyfikatów. Należy pamiętać, że zarówno certyfikat, jak i klucz są przechowywane w tym samym pliku: /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

Powyższe polecenie poprosi Cię o odpowiedź na poniższe pytania. Pamiętaj, aby użyć wartości, które dotyczą Twojego scenariusza.

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 

Krok 2. Konfigurowanie VSFTPD do korzystania z protokołu SSL/TLS

3. Zanim wykonamy jakąkolwiek konfigurację VSFTPD, otwórzmy porty 990 i 40000-50000, aby umożliwić połączenia TLS i zakres portów pasywnych zdefiniować odpowiednio w pliku konfiguracyjnym VSFTPD:

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

4. Teraz otwórz plik konfiguracyjny VSFTPD i podaj w nim szczegóły protokołu SSL:

vi /etc/vsftpd/vsftpd.conf

Poszukaj opcji ssl_enable i ustaw jej wartość na YES, aby aktywować korzystanie z protokołu SSL, dodatkowo, ponieważ TSL jest bezpieczniejszy niż SSL, ograniczymy VSFTPD do stosowania TLS zamiast tego użyj opcji ssl_tlsv1_2:

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

5. Następnie dodaj poniższe linie, aby określić lokalizację certyfikatu SSL i pliku klucza:

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

6. Następnie musimy uniemożliwić anonimowym użytkownikom korzystanie z protokołu SSL, a następnie zmusić wszystkie nieanonimowe logowania do korzystania z bezpiecznego połączenia SSL do przesyłania danych i wysyłania hasła podczas logowania:

allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES

7. Dodatkowo możemy dodać poniższe opcje, aby zwiększyć bezpieczeństwo serwera FTP. Gdy opcja require_ssl_reuse jest ustawiona na YES, wówczas wszystkie połączenia danych SSL muszą wykazywać ponowne użycie sesji SSL; udowadniając, że znają ten sam główny sekret, co kanał kontrolny.

Dlatego musimy to wyłączyć.

require_ssl_reuse=NO

Ponownie musimy wybrać, które szyfry SSL VSFTPD pozwolą na szyfrowane połączenia SSL za pomocą opcji ssl_ciphers. Może to znacznie ograniczyć wysiłki atakujących, którzy próbują wymusić konkretny szyfr, w którym prawdopodobnie odkryli luki:

ssl_ciphers=HIGH

8. Teraz ustaw zakres portów (min. i maks.) portów pasywnych.

pasv_min_port=40000
pasv_max_port=50000

9. Opcjonalnie zezwól na debugowanie SSL, co oznacza, że diagnostyka połączenia openSSL jest rejestrowana w pliku dziennika VSFTPD z opcją debug_ssl:

debug_ssl=YES

Zapisz wszystkie zmiany i zamknij plik. Następnie zrestartujmy usługę VSFTPD:

systemctl restart vsftpd

Krok 3: Testowanie serwera FTP z połączeniami SSL/TLS

10. Po wykonaniu wszystkich powyższych konfiguracji sprawdź, czy VSFTPD używa połączeń SSL/TLS, próbując użyć protokołu FTP z wiersza poleceń w następujący sposób:

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>

Na powyższym zrzucie ekranu widać błąd informujący nas, że VSFTPD może zezwolić użytkownikowi na logowanie się tylko z klientów obsługujących usługi szyfrowania.

Wiersz poleceń nie oferuje usług szyfrowania, powodując błąd. Aby więc bezpiecznie połączyć się z serwerem, potrzebujemy klienta FTP obsługującego połączenia SSL/TLS, takiego jak FileZilla.

Krok 4: Zainstaluj FileZilla, aby bezpiecznie połączyć się z serwerem FTP

11. FileZilla to nowoczesny, popularny i co ważne wieloplatformowy klient FTP, który domyślnie obsługuje połączenia SSL/TLS.

Aby zainstalować FileZilla w systemie Linux, uruchom poniższe polecenie:

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

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

12. Po zakończeniu instalacji (lub jeśli już ją masz zainstalowaną), otwórz ją i przejdź do Plik=>Menedżer witryn lub (naciśnij Ctrl+S ), aby uzyskać poniższy interfejs Menedżera witryny.

Kliknij przycisk Nowa witryna, aby dodać szczegóły połączenia nowej witryny/hosta.

13. Następnie ustaw nazwę hosta/strony, dodaj adres IP, zdefiniuj używany protokół, szyfrowanie i typ logowania jak na zrzucie ekranu poniżej (użyj wartości, które dotyczą Twojego scenariusza):

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. Następnie kliknij Połącz, aby ponownie wprowadzić hasło, a następnie sprawdź certyfikat używany do połączenia SSL/TLS i kliknij raz OK więcej, aby połączyć się z serwerem FTP:

Na tym etapie powinniśmy pomyślnie zalogować się do serwera FTP za pośrednictwem połączenia TLS. Sprawdź sekcję stanu połączenia, aby uzyskać więcej informacji z poniższego interfejsu.

15. Na koniec spróbuj przesłać pliki z komputera lokalnego na serwer FTP w folderze plików. Aby wyświetlić, spójrz na dolną część interfejsu FileZilla raporty dotyczące transferów plików.

To wszystko! Zawsze pamiętaj, że FTP nie jest domyślnie bezpieczny, chyba że skonfigurujemy go tak, aby korzystał z połączeń SSL/TLS, jak pokazaliśmy w tym samouczku. Podziel się swoimi przemyśleniami na temat tego samouczka/tematu, korzystając z poniższego formularza opinii.