pondělí 22. července 2013

Zabezpečené FTP pomocí SSL nebo TLS

Úvod

Původní návrh protokolu FTP nepočítá s žádným typem zabezpečení při vzájemné komunikaci klient-server. Znamená to tedy, že přenášené heslo a následně i přenášená data jsou velmi snadno zachytitelná a tedy i zneužitelná. Používání samotného FTP bez dalšího rozšíření je velmi riskantní.

Jak tedy zajistit zabezpečený přenos dat, např. skrz Internet? Shrnutí možností je např. v tomto článku na root.cz. Osobně bych vybíral pouze mezi SFTP (obsaženo v rámci OpenSSH) a FTPS (FTP + SSL/TLS vrstva). Pokud máme server kam se připojují uživatelé, kteří potřebují i shell a jsou pro nás důvěryhodní, tak je to jasné a zvolíme SFTP.
Na druhou stranu, pokud jsme doteť na serveru poskytovali standardní FTP přístup pro různý druh uživatelů, kterým nechceme umožnit nic jiného, než jen stahovat a ukládat data, pak je FTPS jasná volba.

V tomto článku je tedy popsáno, jak doplnit klasický FTP server o zabezpečenou "nadstavbu" pomocí protokolu SSL nebo TLS.

Instalace

Instalaci jsem prováděl na distribuci Raspbian určené pro zařízení Raspberry Pi, ale nevidím důvod proč by tento návod neměl fungovat na klasickém Debianu, nebo Ubuntu.

Nejprve nainstalujeme FTP deamona, pokud ještě nemáte. Já jsem použil vsftpd které je myslím hodně rozšířené a dostatečně prověřené.
sudo apt-get install vsftpd
Dále potřebujeme implementaci protokolů SSL a TLS. Nejběžnější je volně šiřitelné OpenSSL. V Raspbianu je myslím už obsaženo. Pro jistotu:
sudo apt-get install openssl
Nyní si můžeme vytvořit vlastní SSL certifikát. Není to sice nutnost, ale proč toho nevyužít. Certifikáty jsou umístěny v /etc/ssl/private.
Pokud složka zatím neexistuje, vytvoříme ji takto:
mkdir -p /etc/ssl/private
A změníme oprávnění
chmod 700 /etc/ssl/private
Pomocí OpenSSL vygenerujeme certifikát takto:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
Jen ve zkratce co je v příkazu: platnost 1 rok, použité šifrování je RSA s délkou 2048 bitů. Pro další podrobnosti doporučuji další článek na root.cz.

Nyní se postupně objeví série položek které je potřeba "nějak rozumně" vyplnit.
Country Name (2 letter code) [AU]: CZ
State or Province Name (full name) [Some-State]:
Czech Republic
Locality Name (eg, city) []:
Město
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Název společnosti
Organizational Unit Name (eg, section) []:
Název oddělení.
Common Name (eg, YOUR name) []:
Celé jméno
Email Address []:
Váš email
Ted je na řadě konfigurace vsftpd. Konkrétně úprava souboru vsftpd.conf.
sudo nano /etc/vsftpd.conf
Do souboru přidejte (např. na konec) následující:
# Zapne SSL
ssl_enable=YES

# Povoluje anonymnim uzivatelum pouzivat zabezpecene SSL.
allow_anon_ssl=YES

# Vsichni neanonymni uzivatele jsou povinni pouzivat SSL pri prenosu.
force_local_data_ssl=YES

# Vsichni neanonymni uzivatele jsou povinni pouzivat SSL pri zadavani hesla.
force_local_logins_ssl=YES

# Povoluje pripojeni pomoci protokolu TLS v1. TLS v1 je preferovano.
ssl_tlsv1=YES

# Povoluje pripojeni pomoci protokolu SSL v2. TLS v1 je preferovano.
ssl_sslv2=NO

# Povoluje pripojeni pomoci protokolu SSL v3. TLS v1 je preferovano.
ssl_sslv3=NO

# Vypne znovuuziti SSL (vyzadovano v WinSCP)
require_ssl_reuse=NO

# Vyber SSL sifry, kterou vsftpd bude pouzivat pro 
#sifrovani SSL spojeni (vyzadovano ve FileZille)
ssl_ciphers=HIGH

# Cesta k ulozenym RSA certifikatum.
rsa_cert_file=/etc/ssl/private/vsftpd.pem
Pokud necháme nastaveno force_local_logins_ssl=YES a force_local_data_ssl=YES bude pro přihlášení i přenos souborů použito výhradně TLS. Pokud bude mít uživatel klienta, který TLS nepodporuje, nelze se přihlásit. Pokud u těchto dvou možností změníme hodnoty na NO, umožníme klientům spojení i jinak, než přes TLS, tedy např SSL v2 a v3. Klienti, jako je WinSCP a FileZilla nemají problém ani s jedním.

Restartujeme vsftpd.
sudo /etc/init.d/vsftpd restart

Připojení ve Windows

Jako jednoduchého klienta lze doporučit FileZillu . Zde by mělo fungovat rychlé přihlášení v horní liště programu. Klient ale měl problém rozpoznat typ a verzi šifrovacího protokolu, proto je lepší vytvořit ve Správci míst nové připojení, viz. obrázek č. 1.
Obrázek č.1: Správce míst ve FileZille.
Při prvním přihlášením se vám zobrazí podrobnosti o certifikátu který jsme vygenerovali dříve.

Někdy se stane, že si klient úplně nerozumí se serverem v otázce SSL/TLS zahájení spojení. U WinSCP je nutné v možnostech přímo nastavit explicitní šifrování SSL/TLS jinak nebude přihlášení fungovat. Používaný port je stále 21.

Připojení v Linuxu

Jelikož je FileZilla opensource, nevidím důvod ji nepoužít i v GNU/Linuxu. Osobně vyzkoušeno v Lubuntu 12.04 s verzí 3.5.3 bez problémů.
Pro nainstalování použijeme:
sudo apt-get install filezilla

Řešení problémů

Během přihlášení hlásí FTP klient 
530 Login incorrect
Řešení: otevřít konfigurační soubor
sudo nano /etc/vsftpd.conf
a zde změnit řádek
pam_service_name=vsftpd
na
pam_service_name=ftp
Uložíme (Ctrl+X a poté Y) a provedeme restart procesu:
sudo /etc/init.d/vsftpd restart

Seznam změn:
  • 15-3-2015 - přidáno řešení problémů
  • 9-11-2014 - délka šifry navýšena na 2048 bitů.

Zdroj: HowtoForge

Žádné komentáře:

Okomentovat