При интеграции 1С с внешними системами через протокол FTP разработчики и администраторы часто сталкиваются с проблемой, когда обычные клиенты (например, FileZilla или WinSCP) работают мгновенно, а код на стороне 1С:Предприятия «зависает» на 30–60 секунд при каждой операции. Особенно остро эта проблема проявляется при использовании vsftpd на операционных системах семейства Linux (CentOS, Ubuntu), развернутых в облачных инфраструктурах.
Разберем подробно причины возникновения таких задержек и найдем способы их устранения, основываясь на практическом опыте настройки связки 1С и vsftpd.
Прежде всего проанализируем типичный сценарий. Сервер 1С обращается к FTP-серверу для загрузки или выгрузки файлов. В коде 1С это обычно выглядит следующим образом:
ИмяFTPСервера = "192.168.1.100"; // Внешний IP сервера
ПортFTPСоединения = 21;
ПользовательFTPСоединения = "ftp_user";
ПарольFTPСоединения = "secret_password";
ПассивноеFTPСоединение = Истина;
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
Соединение = Новый FTPСоединение(ИмяFTPСервера, ПортFTPСоединения,
ПользовательFTPСоединения, ПарольFTPСоединения, ,
ПассивноеFTPСоединение, , ЗащищенноеСоединение,
УровеньИспользованияЗащищенногоСоединенияFTP.Требовать);
Если мы посмотрим на логи vsftpd (обычно находятся в /var/log/vsftpd.log), мы увидим, что соединение устанавливается, авторизация проходит успешно, но на команде PASV или EPSV (переход в пассивный режим) возникает длительная пауза. Выясним причину этого поведения.
Самая частая причина «тормозов» в облачных средах (Яндекс Облако, AWS, Azure) заключается в том, что сервер находится за NAT. Внутренний IP-адрес сетевого интерфейса сервера не совпадает с внешним публичным IP.
Когда 1С отправляет команду PASV, сервер vsftpd по умолчанию сообщает клиенту свой внутренний адрес. 1С пытается подключиться к этому внутреннему адресу, не получает ответа по таймауту, и только после этого пытается использовать альтернативные механизмы. Рассмотрим, как это исправить в конфигурационном файле /etc/vsftpd/vsftpd.conf.
Необходимо явно указать внешний адрес сервера:
sudo nano /etc/vsftpd/vsftpd.conf.
# Включаем пассивный режим
pasv_enable=YES
# Указываем диапазон портов для данных (должны быть открыты в фаерволе)
pasv_min_port=21000
pasv_max_port=21100
# КРИТИЧНО: указываем публичный IP вашего сервера
pasv_address=84.201.150.22
После внесения изменений обязательно перезапустите службу: systemctl restart vsftpd. Это заставит сервер отдавать правильный адрес клиенту 1С, и установка соединения для передачи данных станет мгновенной.
Проанализируем другой важный аспект. При каждом подключении vsftpd пытается выполнить операцию Reverse DNS Lookup — узнать доменное имя по IP-адресу клиента. Если DNS-сервер провайдера работает медленно или не настроена обратная зона, это создает задержку в 10–20 секунд еще до начала авторизации.
Посмотрим на параметр reverse_lookup_enable. По умолчанию в некоторых версиях он включен. Рекомендуется принудительно его отключить:
# Отключаем попытки определить имя клиента по IP
reverse_lookup_enable=NO
Это особенно актуально, если ваши клиенты 1С подключаются из разных динамических сетей, для которых нет записей в мировых DNS-таблицах.
Поскольку 1С использует объект ЗащищенноеСоединениеOpenSSL, процесс установления связи включает в себя «рукопожатие» (handshake). Если в логах видны ошибки типа 421 Data timeout. Reconnect. Sorry, это может быть связано с тем, что 1С и vsftpd не могут договориться о переиспользовании сессии (SSL Session Reuse).
Платформа 1С:Предприятие часто создает новое соединение для каждой операции с файлом, но при этом может некорректно обрабатывать требование сервера о переиспользовании существующей SSL-сессии. Проанализируем параметр require_ssl_reuse:
# Для обеспечения совместимости с 1С отключаем обязательное переиспользование сессий
require_ssl_reuse=NO
# Настраиваем доступные шифры для лучшей производительности
ssl_ciphers=HIGH
Установка require_ssl_reuse=NO снижает уровень безопасности (теоретически возможна атака перехватом сессии данных), но на практике это часто является единственным способом заставить защищенный FTP работать стабильно с платформой 1С.
Соберем воедино все рекомендации для создания идеального конфига vsftpd, который будет быстро работать с 1С. Рассмотрим по шагам итоговые настройки:
# Основные настройки
listen=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
# Настройки для 1С и стабильности
reverse_lookup_enable=NO
pasv_enable=YES
pasv_min_port=21000
pasv_max_port=21100
pasv_address=ВАШ_ВНЕШНИЙ_IP
pasv_addr_resolve=NO
# Настройки безопасности SSL/TLS
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
require_ssl_reuse=NO
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
Не забудем, что для работы пассивного режима в 1С недостаточно открыть только 21 порт. Выясним, какие порты должны быть доступны. Если мы указали диапазон 21000-21100, их нужно разрешить в firewalld (CentOS):
firewall-cmd --permanent --add-port=21/tcpfirewall-cmd --permanent --add-port=21000-21100/tcpfirewall-cmd --reloadВажный совет для облачных пользователей: Если вы используете Yandex Cloud или AWS, убедитесь, что эти же порты открыты в Security Groups (Группах безопасности) в консоли управления облаком. Сетевой экран внутри Linux — это лишь второй рубеж защиты, первый находится на уровне инфраструктуры облака.
Таким образом, комбинируя настройку pasv_address для преодоления NAT, отключение reverse_lookup_enable для ускорения входа и корректировку require_ssl_reuse для совместимости с SSL 1С, мы получаем максимально производительную систему обмена данными.