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 komentarzy do “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 e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *