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:
- Jako użytkownik z uprawnieniami administratora systemu zainstaluj ProFTPD następującym poleceniem:
sudo apt-get install proftpd
- Zadane Ci zostanie pytanie: Czy chcesz aby ProFTPD działało w trybie
inetd
czystandalone?
Przeczytaj opis obu trybów i wybierz ten, który pasuje do Twojego rodzaju serwera. - Otwórz plik konfiguracyjny ProFTPD następującym poleceniem:
sudo nano /etc/proftpd/proftpd.conf
- Usuń znak
#
przed liniąInclude /etc/proftpd/tls.conf
aby wyglądała następująco:Include /etc/proftpd/tls.conf
- 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).
OpcjaIdentLookups
informuje serwer o tym, czy powinien szukać nazwy hostów uwierzytelniających się użytkowników. - Zapisz plik konfiguracyjny ProFTPD i wyjdź z edytora nano.
Podstawowa konfiguracja protokołu komunikacyjnego IPv6:
- Jeśli nie korzystasz z IPv6 odnajdź opcję
UseIPv6
w pliku konfiguracyjnym ProFTPD i zmień ją naoff
UseIPv6 off
- 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:
- 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.
- 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:
- Otwórz plik konfiguracyjny ProFTPD TLS następującym poleceniem:
sudo nano /etc/proftpd/tls.conf
- 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>
- 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
naoff
lub skomentować tę opcję wstawiając na początku linii znak#
. - 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:
- 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:
- 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.
- 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. - 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
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.)?
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.
Cieszę się, że artykuł był pomocny.
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.
Witaj Igor, dziękuję za komentarz. Sugeruję ponowne przejrzenie konfiguracji. Łukaszowi się udało 🙂