VSFTPD и FTPS
Мрачный вид из окна, череда неудачных событий на прошедшей неделе и полное отсутствие позитивных мыслей совокупились в параноид?
Симптомы и течение:
При попытке отправить на FTP сервер логин и пароль в открытом виде, к больному приходят черти и тащат его в кипящий котёл.
Лечение:
В качестве традиционного лечения применяются протоколы FTPS (FTP+SSL) и SFTP (SSH). Стоит сфокусировать внимание на том, что это два разных протокола. SFTP (SSH File Transfer Protocol) не имеет никакого отношения к FTP серверам, в том смысле, в котором мы привыкли их понимать. Протокол SFTP следует понимать как расширение возможностей SSH, позволяющее осуществлять операции с файлами поверх безопасного соединения. В сети часто хвалят решение на основе SFTP, как наименее прожорливое по отношению к ресурсам. Но далее речь пойдет исключительно о FTPS, так как именно этот протокол поддерживается большинством клиентов и веб-приложений.
Настройка vsFTPd 2.3.0 + SSL (FTPS)
Теперь можно завесить шторы, выключить свет и под психоделический эмбиент сотворить следующие действия в консоли:
Генерируем самоподписанный сертификат на 365 дней с помощью openssl.
cd /etc/vsftpd/
/usr/bin/openssl req -x509 -nodes -days365-newkeyrsa:1024-keyoutvsftpd.pem-outvsftpd.pem
В процессе создания сертификата нужно ответить на несколько вопросов, например так:
Country Name (2 letter code) [AU]:RU
State or Province Name (full name) [Some-State]:Moskovskaya
Locality Name (eg, city) []:Klin
Organization Name (eg, company) [Internet Widgits Pty Ltd]:public
Organizational Unit Name (eg, section) []:ftp
Common Name (e.g. server FQDN or YOUR name) []:sergey
Email Address []:admin@rskl.ru
Теперь нужно включить SSL для FTP сервера в /etc/vsftpd.conf и настроить несколько опций, чтобы это всё заработало или сломалось окончательно. Чуть не забыл, обязательно бэкапим vsftpd.conf!
sudo nano /etc/vsftpd.conf
ssl_enable=YES
ssl_sslv2=NO
ssl_sslv3=NO
ssl_tlsv1=YES
ssl_ciphers=HIGH
require_ssl_reuse=NO
force_local_logins_ssl=YES
force_local_data_ssl=YES
rsa_cert_file=/etc/vsftpd/vsftpd.pem
Примечательно, что клиент FileZilla наотрез отказался соединяться без опций:
require_ssl_reuse=NO
ssl_ciphers=HIGH
Перезапустим FTP сервер, перед тем как тянуться к его портам.
sudo /etc/init.d/vsftpd restart
Подробно об опциях vsftpd.conf:
Включаем SSL:
ssl_enable=YES
Если включено, и vsftpd был скомпилирован с поддержкой OpenSSL, vsftpd будет поддерживать безопасность соединения с помощью SSL. Это позволяет контролировать соединения (включая входы в систему) и также передачу данных.
Используем только протокол TLS:
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
Выбираем какие SSL шифры будут разрешены для шифрования SSL соединений:
ssl_ciphers=HIGH
Такие ограничения шифров могут использоваться в целях предосторожности, предотвращая использования отдаленными сторонами шифра с которым были обнаружены проблемы.
Default: DES-CBC3-SHA.
Собственно, об значении HIGH в man ciphers говорят следующее:
HIGH
«high» encryption cipher suites. This currently means those with
key lengths larger than 128 bits, and some cipher suites with
128-bit keys.
Многократное использование одной сессии:
require_ssl_reuse=NO
Без установки вышеуказанной опции клиент FileZilla (v.3.5.3) получает ошибку при получении списка каталогов.
Шифрование процедуры логина и всех передаваемых данных внутри сессии:
force_local_logins_ssl=YES
force_local_data_ssl=YES
Указываем расположение RSA сертификата для использования в SSL зашифрованных соединениях:
rsa_cert_file=/etc/vsftpd/vsftpd.pem
Настройка клиента FileZilla
Если не получилось соединиться, то стоит еще раз проверить наличие в vsftpd.conf опций require_ssl_reuse и ssl_ciphers. Чтобы развеять сомнения прилагаю картинку с настройками. Есть ещё одна, замечательная опция для лечения паранойи. Это listen_port=номер порта. Опция добавляется в vsftpd.conf и необходимо указать явно порт в настройках клиента. Таким образом меняется порт по умолчанию с 21 на произвольный. Стоит отметить, что если нужно использовать Implicit FTPS (старая версия протокола), то для него надо открывать другой, отличный от стандартного порт. Обычно используется порт 990. В нашем примере используется более новый протокол — Explicit FTPS (FTPES), который работает с тем же портом, что и FTP сервер.
Замороченно. Использую против паранойи такое решение (через fuse)
sshfs user@server.com:/var/www /mnt/server
Проблема бывает только с разрывами связи — система несколько минут ещё думает, что ветка ФС примонтирована.