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

sysadmin – Instalacja serwera TeamSpeak w systemie Linux

Istnieje świetne i darmowe narzędzie ułatwiające komunikację, dające możliwość rozmowy na żywo – a przy tym nieobciążające systemu operacyjnego w znaczący sposób. Narzędzie to nazywa się TeamSpeak. Jest ono bardzo często wykorzystywane przez graczy komputerowych.
W tym artykule dowiesz się w jaki sposób uruchomić serwer TeamSpeak na własnym serwerze Linux oraz jak skonfigurować automatyczne uruchomienie serwera TeamSpeak po restarcie serwera Linux.

Instalacja oraz uruchomienie serwera TeamSpeak

W celu komunikacji za pomocą narzędzia TeamSpeak konieczne jest podłączenie oprogramowania klienta do serwera. Istnieje wiele publicznych i tematycznych serwerów. W zależności od potrzeb możliwe jest uruchomienie własnego serwera.

Uruchamianie własnego serwera TeamSpeak:

  1. Po pierwsze należy stworzyć użytkownika z ograniczonymi uprawnieniami, który będzie uruchamiał oprogramowanie serwera. Stwórz użytkownika wykonaj następujące polecenie:
    useradd -m nazwa_użytkownika

    Nadaj własną nazwę użytkownika w miejsce nazwa_użytkownika, np: ts3srv.
    Zostanie stworzony użytkownik o zadanej nazwie wraz z katalogiem domowym.

  2. Nadaj hasło stworzonemu użytkownikowi wykonując następujące polecenie:
    passwd nazwa_użytkownika

    W miejsce nazwa_użytkownika wstaw nazwę stworzonego przez siebie użytkownika.

  3. Zaloguj się jako stworzony użytkownik wykonując następujące polecenie:
    su nazwa_użytkownika

    W miejsce nazwa_użytkownika wstaw nazwę stworzonego przez siebie użytkownika.
    Zostaniesz zapytany o hasło.

  4. Przejdź do katalogu domowego użytkownika wykonując następujące polecenie:
    cd
  5. Do katalogu domowego użytkownika pobierz pliki serwera TeamSpeak. Pliki serwera TeamSpeak możesz pobrać z tej strony. Pamiętaj aby wybrać wersję dla systemu Linux oraz dla odpowiedniej architektury procesora. W moim wypadku będzie to amd64.
    wget http://dl.4players.de/ts/releases/3.0.11.2/teamspeak3-server_linux-amd64-3.0.11.2.tar.gz

    W katalogu roboczym zostanie zapisane skompresowane archiwum zawierające pliki serwera TeamSpeak.

  6. Wyodrębnij oraz dekompresuj pliki serwera TeamSpeak z archiwum wykonując następujące polecenie:
    tar -xvfz teamspeak3-server_linux-amd64-3.0.11.2.tar.gz

    Zostanie stworzony folder o nazwie teamspeak3-server_linux-amd64-3.0.11.2 zawierający pliki serwera TeamSpeak.

  7. Przejdź do rozpakowanego katalogu wykonując następujące polecenie:
    cd teamspeak3-server_linux-amd64-3.0.11.2
  8. Uruchom serwer TeamSpeak wykonując następujące polecenie:
    ./ts3server_startscript.sh start

    Na ekranie zostanie wyświetlona nazwa użytkownika administrator, jego hasło oraz jednorazowy token autentykacji. Użyj ich aby uzyskać prawa administratora serwera.

  9. Pamiętaj o zmodyfikowaniu reguły firewalla (jeśli go używasz – a powinieneś!) tak, aby pozwalał na łączenie się z serwerem TeamSpeak na używanych przez niego portach. Konieczne jest przepuszczenie ruchu na portach TCP: 10011, 30033 oraz UDP: 9987. Możesz skorzystać z przygotowanych przeze mnie reguł iptables.
    -A INPUT -p tcp --dport 10011 -j ACCEPT
    -A INPUT -p tcp --dport 30033 -j ACCEPT
    -A INPUT -p udp --dport 9987 -j ACCEPT

To wszystko. Twój serwer TeamSpeak jest gotowy do podłączenia. Zaloguj się w nim jako administrator, co umożliwi zarządzanie serwerem, tworzenie pokoi oraz szereg innych operacji administracyjnych.

Automatyczne uruchamianie serwera TeamSpeak po restarcie serwera Linux

Jeśli chcesz aby twój serwer TeamSpeak uruchamiał się automatycznie po restarcie serwera Linux musisz dodać odpowiednią linię do tabeli cron użytkownika, który uruchamia serwer TeamSpeak.

Konfiguracja crontab do automatycznego uruchamiania serwera TeamSpeak po restarcie:

  1. Będąc zalogowanym jako użytkownik, który ma uruchamiać serwer TeamSpeak (np: ts3srv), wykonaj następujące polecenie:
    crontab -e

    Zostanie uruchomiona edycja tabeli cron w domyślnym edytorze tekstu.

  2. W nowej linii tabeli cron dodaj polecenie uruchomienia serwera TeamSpeak po restarcie serwera Linux. Pamiętaj aby podać dokładną ścieżkę do Twojego serwera TeamSpeak!
    @reboot /home/nazwa_użytkownika/teamspeak3-server_linux-amd64/ts3server_startscript.sh start
    

    W miejsce nazwa_użytkownika wstaw nazwę użytkownika uruchamiającego serwer TeamSpeak.

  3. Zapisz tabelę cron oraz zamknij jej edycję.

To wszystko. Serwer TeamSpeak powinien zostać uruchomiony ponownie po każdym restarcie serwera Linux przez użytkownika, którego tabelę cron edytowałeś.