Archiwa tagu: SSL

sysuser – Szyfrowane połączenie FTP przez Total Commander

Chyba nie ma (średnio lub bardziej zaawansowanego) użytkownika komputera, który nie zna narzędzia o nazwie Total Commander. Menadżer plików, stworzony przez szwajcarskiego programistę Christiana Ghislera, wspiera szyfrowane połączenie FTP po SSL/TLS. Posiada on wbudowany mechanizm obsługi bibliotek OpenSSL, które nie są dostarczane wraz z programem. W celu zestawienia szyfrowanego połączenia FTP konieczne będzie odnalezienie skompilowanych bibliotek oraz umieszczenie ich w katalogu, w którym zainstalowany jest Total Commander.
Z tego artykułu dowiesz się jak przygotować narzędzie Total Commander do łączenia się z FTP przy pomocy szyfrowanego protokołu SSL/TLS.
Z mojego wcześniejszego artykułu mogłeś dowiedzieć się w jaki sposób skonfigurować serwer ProFTPD z TLS.

Skompilowane biblioteki OpenSSL

OpenSSL jest projektem o otwartym kodzie źródłowym, który dostarcza w pełni funkcjonalny zestaw narzędzi dla protokołów Transport Layer Security (TLS) i Secure Sockets Layer (SSL). Jest to kryptograficzna biblioteka ogólnego przeznaczenia. Projekt OpenSSL nie rozpowszechnia kodu w formie binarnej oraz oficjalnie nie wspiera żadnej konkretnej dystrybucji binarnej. Nieformalną listę produktów firm trzecich można znaleźć na stronie wiki projektu.
Osobiście polecam korzystanie ze strony indy.fulgan.com. Systematycznie są tam umieszczane zaktualizowane i skompilowane biblioteki dla Win32/64 bez zależności zewnętrznych (takich jak Microsoft Visual Studio Runtime DLLs), z wyjątkiem dostarczanej wraz z systemem Windows biblioteki msvcrt.dll.

Total Commander i OpenSSL

W celu przygotowania Total Commandera do połączenia FTP przez szyfrowany protokół SSL/TLS konieczne jest dogranie do niego bibliotek OpenSSL.

  1. Zakładam, że masz już zainstalowany Total Commander. Jeśli nie, pobierz go z tej strony a następnie zainstaluj.
  2. Pobierz najnowsze, skompilowane biblioteki OpenSSL z tej strony. Potrzebujesz biblioteki w tej samej architekturze procesora co zainstalowany Total Commander (32-bit lub 64-bit).
  3. Rozpakuj biblioteki OpenSSL.
  4. Skopiuj pliki libeay32.dll oraz ssleay32.dll do folderu, w którym zainstalowałeś Total Commander. Domyślnie jest to: C:\totalcmd\.
  5. Uruchom Total Commander i skonfiguruj połączenie FTP. Pamiętaj aby zaznaczyć opcję SSL/TLS w konfigurowanym połączeniu, jeśli chcesz korzystać z szyfrowanego protokołu.
    FTP01
  6. Pamiętaj aby aktualizować biblioteki OpenSSL! W tym celu należy powtórzyć kroki od 2 do 4. Koniecznie pobierz najnowszą dostępną wersję bibliotek.

Jeśli wszystko wykonałeś poprawnie, Twój Total Commander jest gotowy do połączenia się z serwerem FTP z wykorzystaniem szyfrowanego protokołu SSL/TLS.

sysadmin – ProFTPD z TLS

Protokół FTP (File Transfer Protocol) nie jest bezpieczny ze względu na to, że proces uwierzytelniania użytkownika odbywa się w postaci czystego tekstu. Łatwo jest więc podsłuchać login oraz hasło uwierzytelniające użytkownika na serwerze FTP. Przy użyciu protokołu TLS (Transport Layer Security) cała transmisja będzie szyfrowana a protokół FTP stanie się bardziej bezpieczny.
Dzięki temu artykułowi dowiesz się, jak zainstalować oraz skonfigurować ProFTPD wraz z protokołem TLS szyfrującym komunikację między serwerem a klientem. Dowiesz się również jak skonfigurować firewall oraz ProFTPD znajdujące się za NATem aby umożliwić pasywną komunikację z serwerem.
Zakładam, że znasz podstawową obsługę edytora nano.

Instalacja oraz wstępna konfiguracja usługi ProFTPD

Pierwszym krokiem, który należy wykonać jest zainstalowanie ProFTPD w systemie oraz jego wstępne skonfigurowanie do działania i przyjmowania nowych połączeń od użytkowników. W tej części artykułu dowiesz się również o podstawowej konfiguracji protokołu komunikacyjnego IP w wersji 6.

Instalacja i wstępna konfiguracja ProFTPD w systemie Debian Linux:

  1. Jako użytkownik z uprawnieniami administratora systemu zainstaluj ProFTPD następującym poleceniem:
    sudo apt-get install proftpd
  2. Zadane Ci zostanie pytanie: Czy chcesz aby ProFTPD działało w trybie inetd czy standalone? Przeczytaj opis obu trybów i wybierz ten, który pasuje do Twojego rodzaju serwera.
  3. Otwórz plik konfiguracyjny ProFTPD następującym poleceniem:
    sudo nano /etc/proftpd/proftpd.conf
    
  4. Usuń znak # przed linią Include /etc/proftpd/tls.conf aby wyglądała następująco:
    Include /etc/proftpd/tls.conf
  5. Ze względów bezpieczeństwa można zmienić następujące opcje:
    DefaultRoot ~
    IdentLookups on
    

    Opcja DefaultRoot ~ uwięzi uwierzytelniających się użytkowników w ich domowych katalogach, dzięki czemu nie będą w stanie zobaczyć katalogów wyższego poziomu (w tym także katalogów innych użytkowników).
    Opcja IdentLookups informuje serwer o tym, czy powinien szukać nazwy hostów uwierzytelniających się użytkowników.

  6. Zapisz plik konfiguracyjny ProFTPD i wyjdź z edytora nano.

Podstawowa konfiguracja protokołu komunikacyjnego IPv6:

  1. Jeśli nie korzystasz z IPv6 odnajdź opcję UseIPv6 w pliku konfiguracyjnym ProFTPD i zmień ją na off
    UseIPv6 off
  2. Jeśli korzystasz z IPv6 i podczas uruchamiania bądź restartowania usługi ProFTPD wyświetlany jest następujący komunikat:
    Starting ftp server: proftpd - IPv6 getaddrinfo 'localhost' error: Name or service not known

    edytuj plik hosts następującym poleceniem:

    sudo nano /etc/hosts

    i dopisz do niego następującą linię:

    ::1 localhost ip6-localhost ip6-loopback

Tworzenie certyfikatu SSL dla protokołu TLS

W celu wdrożenia protokółu TLS w konfiguracji ProFTPD konieczne jest stworzenie certyfikatu SSL. Przy jego pomocy połączenie klient-serwer i serwer-klient będzie szyfrowane.  Służy do tego darmowe oprogramowanie OpenSSL. W tej części artykułu dowiesz się jak stworzyć certyfikat SSL dla protokołu TLS.

Tworzenie certyfikatu SSL:

  1. Zainstaluj OpenSSL w systemie następującym poleceniem:
    sudo apt-get install openssl

    Jeśli OpenSSL jest zainstalowane w systemie zostaniesz o tym powiadomiony a instalacja zostanie przerwana.

  2. Stwórz certyfikat SSL przy pomocy następującego polecenia:
    sudo openssl req -x509 -newkey rsa:2048 -keyout /etc/ssl/private/proftpd.key -out /etc/ssl/certs/proftpd.crt -nodes -days 365

    Zostanie uruchomiony kreator certyfikatu SSL, w którym zostaniesz zapytany o informacje, na kogo wystawiony ma zostać generowany certyfikat. Wygenerowany certyfikat będzie ważny przez 365 dni (rok).
    Parametr -days możesz modyfikować do woli.

Twój certyfikat SSL został wygenerowany i jesteś gotowy aby wdrożyć szyfrowanie protokołu FTP przy pomocy TLS.

Włączanie szyfrowania TLS w ProFTPD

Ostatnim krokiem do bezpiecznego i szyfrowanego protokołu FTP jest skonfigurowanie ProFTPD do korzystania z szyfrującego protokołu TLS. Wykorzystamy do tego wcześniej wystawiony certyfikat SSL.

Włączanie szyfrowania TLS w ProFTPD:

  1. Otwórz plik konfiguracyjny ProFTPD TLS następującym poleceniem:
    sudo nano /etc/proftpd/tls.conf
  2. Odszukaj blok opcji rozpoczynający się od <IfModule mod_tls.c> który powinien wyglądać następująco:
    <IfModule mod_tls.c>
    TLSEngine off
    </IfModule>
  3. Zmodyfikuj blok opcji aby wyglądał następująco:
    <IfModule mod_tls.c>
    TLSEngine on
    TLSLog /var/log/proftpd/tls.log
    TLSProtocol TLSv1
    TLSRSACertificateFile /etc/ssl/certs/proftpd.crt
    TLSRSACertificateKeyFile /etc/ssl/private/proftpd.key
    TLSOptions NoCertRequest EnableDiags
    TLSVerifyClient off
    TLSRequired on
    </IfModule>

    Użycie opcji TLSRequired on powoduje, że każde połączenie jest szyfrowane przy pomocy protokołu TLS. Serwer odrzuci każdą próbę połączenia z FTP bez protokołu szyfrującego TLS. Jeśli chcesz aby oba sposoby połączenia były możliwe (szyfrowane oraz nieszyfrowane) – możesz przełączyć opcję TLSRequired na off lub skomentować tę opcję wstawiając na początku linii znak #.

  4. Zapisz plik konfiguracyjny ProFTPD TLS i wyjdź z edytora nano.

Konfiguracja firewalla oraz ProFTPD za NATem

Komunikacja z ProFTPD jest możliwa wówczas, gdy firewall serwera jest odpowiednio skonfigurowany. Jeśli Twój serwer oraz użytkownicy znajdują się w kompletnie innych sieciach lokalnych (znajdują się za maskaradą – NAT) musisz zezwolić na komunikację pasywną.

Konfiguracja firewalla do komunikacji pasywnej:

  1. Jeśli korzystasz z iptables (a powinieneś!) dodaj do jego konfiguracji następującą regułę:
    -A INPUT -p tcp --dport 21 -j ACCEPT

    Reguła ta zezwala na rozpoczęcie komunikacji klienta z serwerem na standardowym porcie FTP: 21.

Konfiguracja pasywnego połączenie FTP:

  1. Jeśli Twój serwer ProFTPD oraz użytkownicy są za NATem, konieczne jest zezwolenie na komunikację pasywną. W tym celu do konfiguracji iptables dodaj następującą regułę:
    -I INPUT 2 -p tcp --dport 49152:65534 -j ACCEPT

    Reguła ta wraz z odpowiednią konfiguracją serwera ProFTPD pozwoli zestawić pasywną komunikację klienta z serwerem.

  2. Wróć do pliku konfiguracyjnego ProFTPD następującym poleceniem:
    sudo nano /etc/proftpd/proftpd.conf

    Odnajdź opcję PassivePorts oraz usuń znak # na początku linii. Opcja ta powinna wyglądać następująco:

    PassivePorts 49152 65534

    Odnajdź opcję MasqueradeAddress oraz usuń znak # na początku linii. Edytuj jej wartość wstawiając globalny adres IP Twojego serwera. Opcja ta powinna wyglądać przykładowo tak:

    MasqueradeAddress 193.242.138.70
    MasqueradeAddress sobolewski.pl

    Możesz dodać drugą opcję MasqueradeAddress z nazwą hosta tak jak na przykładzie powyżej.

  3. Uruchom ponownie usługę ProFTPD przy pomocy następującego polecenia:
    sudo services proftpd restart

To wszystko. Twój serwer FTP jest gotowy do szyfrowanego połączenia. Można się w nim uwierzytelnić przy pomocy kont użytkowników systemu. Możliwe jest też zestawienie pasywnego połączenie z użytkownikami znajdującymi się w osobnej sieci lokalnej. Teraz możesz spróbować połączyć się za pomocą klienta FTP. Konieczne będzie skonfigurowanie klienta aby korzystał z szyfrowanego połączenia przy pomocy protokołu TLS (konieczne w przypadku kiedy użyłeś opcji TLSRequired on).

Jeśli masz problemy z TLS możesz zapoznać się z komunikatami pozostawionymi przez ProFTPD w pliku log wydając następujące polecenie:

sudo tail -n 20 /var/log/proftpd/tls.log