FTP Server s podporou TLS

Tímto krátkým článkem bych chtěl navázat na povídání o Ftp Serveru ProFTPD a jen stručně jej doplnit o možnost zabezpečení.

29.3.2005 06:00 | Petr | přečteno 8990×

Úvodem ...

Cílem tohoto článku je doplnit povídání o FTP Serveru, které začal Martin Pruša. Jelikož se dnes komunikace neobejde bez pořádného zabezpečení, rozhodl jsem se reagovat na vydaný článek tím, že jej doplním o možnost provozovat FTP server s podporou TLS a stručně vysvětlím jak tuto vlastnost aplikovat.

Kde najít Proftpd s podporou tls a jak instalovat

Archiv se zdrojovými soubory najdete zde. Stáhnete, rozbalíte a klasickou trojkombinací configure make a make install nacpete do svého počítače. Jen než s těmito otřepanými kroky začnete, nahlédněte do podadresáře modules adresáře ProFTPd-x.x.x-tls, zdali je zdrojový soubor mod_tls.c přítomen. Vyhnete se tím zbytečných rozpaků nad neúspěšnou kompilací. Také ověřte přítomnost OpenSSL knihoven, bez kterých by kompilace rovněž neproběhla. Máte-li vše potřebné, pak spusťte první z trojce příkazů s následujícími parametry:

#./configure –with-modules=mod_tls –sysconfdir=/etc

Druhým parametrem dosáhneme toho, že konfigurační soubor proftpd.conf bude uložen v adresáři /etc (ne v /usr/local/etc) jak by nastalo v případě implicitního nastavení. Dále stačí prosté make a make install. Poslední z příkazů zařídí, že se do adresáře /usr/local/sbin uloží démon serveru proftpd a další zkompilované nástroje(tak jak bylo uvedeno v předešlém povídání).

Konfigurace TLS

Pro aktivaci tls šifrování musíme do konfiguračního souboru připsat direktivu, která vypadá obdobně jako u konfigurace serveru Apache. Příklad konfigurace může vypadat takto:

<IfModule mod_tls.c>
TLSEngine on
TLSLog /var/ftpd/tls.log
#TLSProtocol TLSv1
TLSProtocol SSLv3

# Are clients required to use FTP over TLS when talking to this server?
TLSRequired on

# Server's certificate
TLSRSACertificateFile /etc/ssl/private/ftpd-rsa.pem
TLSRSACertificateKeyFile /etc/ssl/private/ftpd-rsa-key.pem

# Authenticate clients that want to use FTP over TLS?
#TLSVerifyClient off
TLSOptions NoCertRequest
</IfModule>

Spuštění Serveru

Server spustíme příkazem:

# ./proftpd

Před samotným spuštěním musíme mít vygenerován příslušný certifikát a privátní klíč. Využijeme k tomu rozhraní Openssl knihovny. Následující příkaz nám vygeneruje certifikát a privátní klíč.

#openssl req -new -x509 -days 365 -nodes -out ftpd-rsa.pem -keyout ftpd-rsa-key.pem

A pokud chcete využít dsa šifrování pak příkaz pro vygenerování certifikátu a klíče bude následující:

#openssl dsaparam -out dsap-tmp 1024 #openssl req -newkey dsa:dsap-tmp -x509 -days 365 -nodes -out ftpd-dsa.pem -keyout ftpd-dsa-key.pem

Soubory můžete uložit kamkoliv. Je potřeba v konfiguraci serveru k příslušným parametrům doplnit správnou cestu k těmto vygenerovaným souborům. Jen stručně k certifikátu. Jedná se o tzv. Self Signed Certificate, certifikát, který jsme si sami podepsali. Pokud by jsme chtěli certifikát podepsaný některou ze společností, která tyto certifikáty vlastní nebo která certifikáty podepisuje, musíme si připravit hodně nadutou peněženku. A proto nám pro vlastní použití bude stačit výše zmíněná varianta vygenerování self signed certifikátu a privátního klíče.

FTP Klienti s podporou šifrované komunikace

Aby jsme mohli požívat zabezpečený protokol, potřebujeme nejen podporu ze strany serveru, ale i ze strany klienta. Vybral jsem tři zástupce, u kterých je příslušná vlastnost podporována.

Ftp-tls a lftp - klienti pro konzolové použití. Jejich kompilace je opravdu jednoduchá a příkazy netřeba nijak zvlášť rozebírat. Pro připojení k serveru stačí napsat příkaz:

#ftp host

kde host je server ke kterému se chcete připojit. Výstup pak vypadá přibližně takto:

Connected to localhost.
220 ProFTPD 1.2.9rc1 Server (ProFTPD Default Installation) [mandrake10]
234 AUTH TLS successful
[Starting SSL/TLS negotiation...]
WARNING: Server's certificate is self signed.
[Subject: C = CZ, ST = x, L = x, O = x, OU = x, CN = x, emailAddress = x]
[Issuer: C = CZ, ST = x, L = x, O = x, OU = x, CN = x, emailAddress = x]
[Cipher: DHE-DSS-AES256-SHA (256 bits)]
Name (localhost:root): user
331 Password required for user.
Password:
230 User user logged in.
Remote system type is UNIX.
Using binary mode to transfer files.

Obdobné je i použití klienta lftp. Potom co se povede klienta zkompilovat stačí se k serveru přihlásit pomocí příkazu:

#lftp localhost -u user_name

kde parametr user_name je jméno uživatele, který má povolen přístup na serveru.

IglooFTP PRO

Vlastní kompilací klienta nebo instalaci některého z binárních balíčků nechám na jindy. Teď se zaměřím jen na nastavení šifrované komunikace. Nastavení najdete v menu Options položka Preferences a záložka Security. Tady je důležitou volbou Protocol, Encrypt a Method pro nastavení Password Encryption.

Protocol - zvolíte typ protokolu podle toho který je podporován serverem. Oba zmíněné servery podporují TSLv1 i SSLv2 a v3.

Encryption – zde nastavíme pro co se má šifrování použít. Možnosti jsou:


Auto – tuto volbu doporučuji pokud nevíte jakou metodu zvolit (která je podporována serverem).

Nastavení uložíte kliknutím na tlačítko save. Vyplníte-li pak položky FTP Host, User a Password, měl by se klient bezpečně přihlásit na váš server. Během přihlašovacího procesu se klient dotáže na přijmutí/odmítnutí server certifikátu tak jak je ukázáno na obrázku. Po přijmutí certifikátu už na vás vyskočí jen okno s úspěšným přihlášením k serveru.

Závěrem ....

Doufám, že se problematika mnohým osvědčí i v praxi a pomůže ke zlepšení bezpečnosti. Pokud by chtěl někdo vyzkoušet podporu TLS i u jiných FTP serverů, mohou vyzkoušet např. server wu_ftpd.

Odkazy:

Online verze článku: http://www.linuxsoft.cz/article.php?id_article=764