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

filezilla-srvmgr

Если не получилось соединиться, то стоит еще раз проверить наличие в vsftpd.conf опций require_ssl_reuse и ssl_ciphers. Чтобы развеять сомнения прилагаю картинку с настройками. Есть ещё одна, замечательная опция для лечения паранойи. Это listen_port=номер порта. Опция добавляется в vsftpd.conf и необходимо указать явно порт в настройках клиента. Таким образом меняется порт по умолчанию с 21 на произвольный. Стоит отметить, что если нужно использовать Implicit FTPS (старая версия протокола), то для него надо открывать другой, отличный от стандартного порт. Обычно используется порт 990. В нашем примере используется более новый протокол — Explicit FTPS (FTPES), который работает с тем же портом, что и FTP сервер.

One Comment

  1. klnm:

    Замороченно. Использую против паранойи такое решение (через fuse)

    sshfs user@server.com:/var/www /mnt/server

    Проблема бывает только с разрывами связи — система несколько минут ещё думает, что ветка ФС примонтирована.

Leave a Reply

*