Проблема идентификации пользователя по IP-адресу при работе через Веб-клиент является классической для системных администраторов и разработчиков 1С. По умолчанию в Журнале регистрации при неудачной попытке входа в поле «Компьютер» отображается либо имя сервера, на котором опубликован веб-ресурс, либо его внутренний IP-адрес (например, 127.0.0.1). Это происходит потому, что для платформы 1С «клиентом» выступает сам веб-сервер (Apache или IIS), который перенаправляет запросы. Разберем подробно, как можно обойти это ограничение и получить реальные данные о злоумышленнике или забывчивом пользователе.
Для того чтобы платформа 1С начала «видеть» реальные IP-адреса клиентов за веб-сервером или прокси-сервером (например, Nginx), необходимо правильно настроить файл публикации. Рассмотрим ситуацию, когда перед 1С стоит реверс-прокси или когда мы хотим, чтобы веб-сервер передавал информацию о клиенте платформе.
Проанализируем структуру файла default.vrd. В нем существует специальный параметр trustedProxies, который позволяет платформе доверять заголовкам, переданным от определенных узлов. Если мы не укажем доверенные прокси, 1С будет игнорировать заголовок X-Forwarded-For, считая его небезопасным.
Выполним следующие шаги по настройке:
default.vrd в каталоге публикации информационной базы.
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
base="/MyBase"
ib="Srvr=Server1C;Ref=MyBase;">
<ws>
<point name="Mobile" alias="mob.1cws"/>
</ws>
<httpServices trustedProxies="127.0.0.1, 192.168.1.10"/>
</point>
Важный момент: настройка trustedProxies позволяет 1С корректно заполнять данные о клиенте в Журнале регистрации. После этой настройки событие «Отказ в аутентификации» должно содержать реальный внешний IP-адрес пользователя в колонке «Компьютер».
Если по каким-то причинам стандартный журнал 1С не подходит для оперативного реагирования, мы можем обратиться к первоисточнику — логам веб-сервера. Выясним причину, по которой это эффективно: любая попытка авторизации в веб-клиенте инициирует POST-запрос к ресурсу публикации.
Рассмотрим алгоритм для Apache:
В файле конфигурации httpd.conf необходимо убедиться, что включено логирование запросов. По умолчанию логи сохраняются в access.log. Каждая запись содержит IP-адрес источника, время и адрес запроса. Неудачные попытки входа в 1С часто сопровождаются специфическими ответами сервера или размером передаваемых данных.
Для автоматизации этого процесса можно использовать связку со сторонним ПО, таким как Fail2ban. Разберем, как это работает:
access.log Apache в реальном времени./e1cib/login с одного IP за короткий промежуток времени, система считает это брутфорсом.Как отмечали участники обсуждения, одним из самых «красивых» и безопасных решений является вынос процесса авторизации за пределы 1С. Посмотрим на ситуацию: если пользователь вводит пароль непосредственно в окне 1С, у нас мало рычагов влияния до момента совершения входа. Если же мы используем OpenID Connect (например, через Keycloak или самописный сервис на Go), процесс выглядит иначе.
Проанализируем преимущества этого подхода:
IP-адрес, User-Agent и другие метаданные.Для реализации этого в 1С необходимо настроить использование OpenID в параметрах публикации (default.vrd), указав адрес провайдера аутентификации в параметре openid.
Рассмотрим продвинутый вариант, упомянутый в дискуссии: написание небольшого прокси-сервера. На языке Go (Golang) создание высокопроизводительного прокси занимает минимум времени благодаря стандартной библиотеке net/http/httputil.
Схема работы будет следующей:
Микросервис принимает все входящие запросы, предназначенные для Веб-клиента 1С. Прежде чем пробросить запрос дальше к Apache/IIS, сервис анализирует тело запроса. Если это попытка входа (login), сервис фиксирует IP-адрес. В случае, если ответ от 1С возвращает ошибку авторизации, микросервис увеличивает счетчик неудачных попыток для данного IP в своей оперативной памяти или базе данных (например, Redis).
Пример концептуальной логики на стороне такого сервиса:
// Псевдокод логики проксирования
func handleRequest(w http.ResponseWriter, r *http.Request) {
ip := r.RemoteAddr
if isBruteForce(ip) {
http.Error(w, "Too many attempts", http.StatusForbidden)
return
}
// Проксируем запрос к реальному серверу 1С
proxy.ServeHTTP(w, r)
// После ответа проверяем результат авторизации
if r.URL.Path == "/e1cib/login" && responseStatus == 401 {
registerFailedAttempt(ip)
}
}
Если бюджет и инфраструктура позволяют, самым надежным методом защиты веб-публикации будет установка WAF. Рассмотрим, чем он полезен в контексте 1С. Современные WAF (например, Nemesida, Cloudflare или ModSecurity) имеют готовые паттерны для распознавания перебора паролей. Они анализируют поведение клиента и блокируют подозрительные IP-адреса еще на подступах к вашей сети, избавляя сервер 1С от необходимости обрабатывать заведомо ложные запросы.
Подведем итог: для простого отслеживания IP достаточно настроить trustedProxies в default.vrd. Для активной защиты и блокировки лучше использовать комбинацию логов веб-сервера и Fail2ban или специализированные решения для внешней аутентификации.