ProFTPD a obsluha FTPS spojení
FTP server Proftpd je známý a často používaný FTP server s bohatými možnostmi konfigurace. Jednou z mnoha užitečných a v dněšní době téměř nezbytných vlastností FTP serveru je podpora šifrovaných přenosů – FTPS. Důležité v tomto směru je nezaměňovat protokoly SFTP a FTPS. Jedná se o dva zcela rozdílné protokoly, kdy FTPS je TLS šifrování nad běžným FTP protokolem, ktežto SFTP je protokol postavený nad SSH.
SSL/TLS certifikát pro FTPS
Protože FTPS je postaveno nad FTP protokolem s TLS šifrováním – konkrétně v Proftpd se jedná o podporu Explicit TLS (starší systém přístupu Implicit TLS podporován není) je potřeba nejprve vygenerovat patřičné certifikáty. Postup generování SSL certifikátů je na internetu popsán na mnoha místech a stačí použít hlavu a google nebo přímo následující odkaz do dokumentace k OpenSSL – http://www.openssl.org/docs/HOWTO/certificates.txt. Pro vygenerování jednoduchého self-signed certifikátu můžete vužít například následující přikaz:
openssl req -new -x509 -days 365 -nodes \ -out /etc/proftpd/proftpd.crt.pem \ -keyout /etc/proftpd/proftpd.key.pem
Modul mod_tls.c
Obsluha TLS je v Proftpd řešena modulem mod_tls.c. Pokud tento modul neobsahuje váš distribuční balíček, je potřeba při kompilaci explicitně zapnout jako volbu u příkazu configure. Např:
./configure --with-modules=mod_tls \ --with-includes=/usr/local/openssl/include \ --with-libraries=/usr/local/openssl
Konfigurace
V konfiguračním souboru se poté povolí TLS a nastaví jeho parametry. Mnou doporučená konfigurace vypadá následovně:
LoadModule mod_tls.c <IfModule mod_tls.c> TLSEngine on TLSLog /var/log/proftpd-tls.log TLSProtocol TLSv1 TLSRequired off TLSRSACertificateFile /etc/proftpd/server.crt.pem TLSRSACertificateKeyFile /etc/proftpd/server.key.pem TLSVerifyClient off TLSRenegotiate required off </IfModule>
Z důvodu chyby v implementaci TLS protokolu je důležíté mít na paměti nezapomenout na volbu TLSRenegotiate required off, jinak by tato chyba mohla mít fatální následky. S těmito hodnotami bude FTP server dostupný jak bez šifrování tak s ním. Pokud je potřeba přístup omezit na pouze šifrované přenosy, stačí změnit hotnotu u řádku TLSRequired z off na on. Pokud stačí šifrovat pouze řídící spojení obsahující přístupové údaje ale není potřeba šifrovat data, čož může být vhodné u více zatížených FTP serverů, je možné hodnotu TLSRequired nastavit na ctrl, čímž bude ochráněno pouze řídící spojení.
FTPS a certifikační autorita
Ještě upozorním že pokud se v implementaci zabezpečeného FTP spojení dostanete do fáze kdy budete chtít využít certifikát vystavený nějakou uznávanou certifikační autoritou, je důležité přidat ještě řádku TLSCACertificateFile a jako parametr dát cestu ke kořenovému certifikátu nebo případně řetězu certifikátů použité autority.
Testování
Po spuštění Proftpd po této úpravě už stačí jen šifrování vyzkoušet. Osobně pro takovéto testy doporučuji použit jako klienta program FileZilla, kde se dá s FTP poměrně slušně pracovat a umí potřebné režimy šifrování.
RPM balík pro RHEL/CentOS
Pro uživatele distribucí RHEL a CentOS tu mám připravený RPM balík s proftpd doplněný o modul mod_tls a nějaké další drobnosti jako například podpora antiviru (Proftpd a mod_clamav – ochrana stránek před malware útoky) nebo scp ke které se vrátím v některém dalším článku a vysvětlím výhody a nevýhody používáni proftpd pro obsluhu SCP.
Download: proftpd-1.3.3-4.src.rpm

Implicit TLS jde zapnout nastavením „TLSOptions UseImplicitSSL“
http://www.proftpd.org/docs/howto/TLS.html#TLSImplicit
Ano, je pravde ze od verze 1.3.3 to zapnout jde. Ale ma to nejaky vyznam? ImplicitTLS je stejne oznacejo jako zastarale a neni dobre ho pouzivat, protoze specifikace RFC4217 a RFC2228 tam maji stejne kolizi a z toho vyplyvajici problemy v implementaci Data Channel Protection Level.
Hodí se to, protože pak je možný povolit v iptables jen jeden port pro ftps. Alespoň to je moje praktické pozorování.