НАСТРОЙКА 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)

  1. Скачай последние OpenSSL-длл (64-бит):
    libssl-1_1-x64.dll + libcrypto-1_1-x64.dll
  2. Распакуй и кинь оба файла в папку с doublecmd.exe
  3. Создай новое соединение:
    • Сервер: ficus.ard-s.ru
    • Порт: 21
    • Протокол: FTPS (FTP через явный TLS)
    • Шифрование: Требовать явный FTP через TLS
    • Логин/пароль обычный
  4. Подключайся — всё работает!

Готово!

Теперь у тебя полностью рабочий FTPS-сервер с нормальным сертификатом и без древних snakeoil-ошибок
Обновлять сертификат раз в 90 дней:
sudo certbot renew && sudo systemctl restart vsftpd

✨ Работает в 2025 году на Ubuntu 22.04/24.04 и Debian 12/13 — проверено на коленке! ✨