НАСТРОЙКА FTP-СЕРВЕРА
Для начала, установим соответствующий пакет.
sudo apt install vsftpd -y
Затем отредактируем конфигурационный файл.
sudo nano /etc/vsftpd.conf
Здесь конфиг пассивного режима без шифрования с диапазоном портов от 31000 до 32000, их следует пробросить через NAT, равно как и 20-й. Запись разрешена, чрута нет, ip6 нет, подключение через 20 порт так же разрешено, шифрование отлючено, кодировка UTF8, гостевой доступ запрещен, папка по умолчанию "local_root=/data/webserver":
listen=YES listen_ipv6=NO local_enable=YES write_enable=YES dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=YES xferlog_file=/var/log/vsftpd.log ascii_upload_enable=YES ascii_download_enable=YES pam_service_name=vsftpd rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key ssl_enable=NO utf8_filesystem=YES guest_enable=NO guest_username=www-data local_root=/data/webserver seccomp_sandbox=NO pasv_enable=YES pasv_min_port=31000 pasv_max_port=32000
Бывает еще активный режим, в таком случае следует изменить пару строк:
pasv_enable=NO
Затем удалить или, лучше, закомментировать
#pasv_min_port=31000 #pasv_max_port=32000
Для шифрованного режима следует сгенерировать ключи, а для их создания необходимо убедиться в наличии пакета ssl-cert.
sudo apt install ssl-cert -y
Скорее всего, сертификаты будут установлены в вашей системе уже "из коробки", но если нет, их можно перепесать такой командой:
sudo make-ssl-cert generate-default-snakeoil --force-overwrite
Подчеркну, что приведенная выше команда именно переписывает их, а не создает новые. Будьте осторожны.
Пути по умолчанию будут такими:
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
Ну и наконец, необходимо опять залезть в /etc/vsftpd.conf и задать параметр
ssl_enable=YES
Итоговый конфиг будет следующим:
listen=YES listen_ipv6=NO local_enable=YES write_enable=YES dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=YES xferlog_file=/var/log/vsftpd.log ascii_upload_enable=YES ascii_download_enable=YES pam_service_name=vsftpd rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key ssl_enable=NO utf8_filesystem=YES guest_enable=NO guest_username=www-data local_root=/webserver seccomp_sandbox=NO # 🔒 БЕЗОПАСНЫЕ НАСТРОЙКИ PASV: pasv_enable=yes pasv_min_port=31000 pasv_max_port=31020 # Всего 20 портов pasv_address=ВАШ_ВНЕШНИЙ_IP # Важно для NAT! pasv_promiscuous=NO # Запретить обход PASV проверок # 🔒 ДОПОЛНИТЕЛЬНАЯ БЕЗОПАСНОСТЬ: anonymous_enable=NO local_umask=022 chroot_local_user=YES allow_writeable_chroot=YES userlist_enable=YES userlist_file=/etc/vsftpd.userlist userlist_deny=NO tcp_wrappers=YES
Напоследок, перезагрузим службу.
sudo service vsftpd restart
По факту, от первого варианта отличается всего лишь тремя символами. На этом пока все.
... А, нет, не все. Отмечу, что sftp у меня заработал только с плагином для Total Commander для Android и, вроде бы, на машинах под Linux. Windows ни в какую не хочет работать в шифрованном режиме.
Настраиваем безопасный FTPS-сервер (vsftpd + Let’s Encrypt) в 2025 году
Полный гайд для тех, кто устал получать «530 Non-anonymous sessions must use encryption»
1. Ставим vsftpd + OpenSSL
sudo apt update sudo apt install vsftpd openssl
2. Делаем нормальный сертификат Let’s Encrypt (чтобы не мучаться со snakeoil)
sudo apt install certbot # Временно останавливаем веб-сервер, если он висит на 80 порту sudo systemctl stop apache2 # или nginx sudo certbot certonly --standalone -d ficus.ard-s.ru sudo systemctl start apache2 # возвращаем обратно
Сертификат и ключ будут здесь:
/etc/letsencrypt/live/ficus.ard-s.ru/fullchain.pem
/etc/letsencrypt/live/ficus.ard-s.ru/privkey.pem
3. Правим конфиг /etc/vsftpd.conf (рабочий конфиг 2025 года)
listen=YES listen_ipv6=NO local_enable=YES write_enable=YES dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=YES xferlog_file=/var/log/vsftpd.log ascii_upload_enable=YES ascii_download_enable=YES pam_service_name=vsftpd # ←←←←←←←←←←←←←←← ВАЖНЫЕ СТРОКИ ДЛЯ TLS →→→→→→→→→→→→→→→ rsa_cert_file=/etc/letsencrypt/live/ficus.ard-s.ru/fullchain.pem rsa_private_key_file=/etc/letsencrypt/live/ficus.ard-s.ru/privkey.pem ssl_enable=YES allow_anon_ssl=NO force_local_data_ssl=YES force_local_logins_ssl=YES ssl_tlsv1=YES ssl_sslv2=NO ssl_sslv3=NO # Пассивный режим (обязательно пробрось порты в роутере/iptables!) pasv_enable=YES pasv_min_port=31010 pasv_max_port=31020 # Остальное под себя utf8_filesystem=YES local_root=/webserver seccomp_sandbox=NO
sudo systemctl restart vsftpd sudo systemctl status vsftpd # должен быть зелёненький active (running)
4. Проброс портов (не забудь!)
- 21/tcp → FTPS управление
- 31010-31020/tcp → пассивный режим (можно другой диапазон, главное указать в конфиге)
Если 80 порт занят другим сервером — на время получения сертификата останавливай веб-сервер (как в пункте 2).
5. Настройка Double Commander (чтобы больше не ругался на OpenSSL)
- Скачай последние OpenSSL-длл (64-бит):
libssl-1_1-x64.dll + libcrypto-1_1-x64.dll - Распакуй и кинь оба файла в папку с doublecmd.exe
- Создай новое соединение:
• Сервер: ficus.ard-s.ru
• Порт: 21
• Протокол: FTPS (FTP через явный TLS)
• Шифрование: Требовать явный FTP через TLS
• Логин/пароль обычный - Подключайся — всё работает!
Готово!
Теперь у тебя полностью рабочий FTPS-сервер с нормальным сертификатом и без древних snakeoil-ошибок
Обновлять сертификат раз в 90 дней:
sudo certbot renew && sudo systemctl restart vsftpd
✨ Работает в 2025 году на Ubuntu 22.04/24.04 и Debian 12/13 — проверено на коленке! ✨
