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

6 myśli w temacie “sysadmin – ProFTPD z TLS”

  1. Po włączeniu TLS klient filezilla łączy się poprawnie z serwerem lecz nie może pobrać listy katalogów. Po wyłączeniu/zakomentowaniu TLS – serwer działa poprawnie.
    Nie wiem czy to kwestia konfiguracji proftpd czy może systemu (uprawnienia użytkowników i.t.p.)?

    1. Problem rozwiązany – zapomniałem przekierować porty pasywne na routerze.
      Powyższy artykuł bardzo mi pomógł przy konfiguracji za co Autorowi szczerze dziękuje.

  2. Witam,

    a ja mam dokladnie zrobione jak autor i co? nic. Proftpd dalej laczy sie bez ssl, mimo, ze nie powinien.
    Dodatkowo, jak konfiguruje fille zilla aby laczyl sie przez ssl, to niestety ale wywala blad.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *