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
czy standalone?
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).
Opcja IdentLookups
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ą na off
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
na off
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