Протокол ftp — много было написано о его не безопасности и возможности перехвата паролей идущих по этому протоколу.
Как продвинутый пользователь я отказался от всяких ftp клиентов не умеющих шифровать данные. После некоторого изучения был выбран клиент staff-ftp. В описании сказано что по умолчанию он шифрует данные. На этом и успокоился. Однако во время очередного аудита собственного сайта с ужасом увидел что пароли в момент установлении сессии по ftp по прежнему передаются в открытом виде.
Поскольку подобное положение вещей меня совсем не устраивало, начал копать проблему. Выяснилось что для того что бы клиент шифровал данные необходимо что бы и на сервере демон ftp тоже должен был запущен с функцией шифрования.
OC на сервере FreeBSD, демон proftpd, однако по умолчанию он ставится как раз без поддержки шифрования
Для начала накатил новое дерево портов.
Далее при сборке порта поставил галочку напротив подключения по SSL. После инсталляции порта идем в /ucr/local/etc/
Файл конфигурации называется proftpd.conf (я не рассматриваю всю настройку этого файла). В конце пишем (если нету) следующие строки:
<IfModule mod_tls.c> TLSEngine on TLSLog /var/log/proftpd/proftpd-tls.log TLSProtocol SSLv3 TLSOptions NoCertRequest TLSRSACertificateFile /usr/local/etc/proftpd_ssl/proftpd.cert.pem TLSRSACertificateKeyFile /usr/local/etc/proftpd_ssl/proftpd.key.pem TLSVerifyClient on TLSRequired off </IfModule>
И создаем сертификаты:
/usr/local/etc/#mkdir proftpd_ssl
/usr/local/etc/#cd proftpd_ssl/
#openssl req -new -x509 -days 365 -nodes -out /usr/local/etc/proftpd_ssl/proftpd.cert.pem -keyout /usr/local/etc/proftpd_ssl/proftpd.key.pem
Запускаем, смотрим на что ругается (файлы логов мы же не забыли предварительно создать).
Наслаждаемся безопасностью.