Как отследить IP-адрес при неправильном вводе пароля во время входа через Веб-клиент 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Проблема идентификации пользователя по IP-адресу при работе через Веб-клиент является классической для системных администраторов и разработчиков 1С. По умолчанию в Журнале регистрации при неудачной попытке входа в поле «Компьютер» отображается либо имя сервера, на котором опубликован веб-ресурс, либо его внутренний IP-адрес (например, 127.0.0.1). Это происходит потому, что для платформы 1С «клиентом» выступает сам веб-сервер (Apache или IIS), который перенаправляет запросы. Разберем подробно, как можно обойти это ограничение и получить реальные данные о злоумышленнике или забывчивом пользователе.

Метод 1. Использование заголовка X-Forwarded-For и настройка default.vrd

Для того чтобы платформа 1С начала «видеть» реальные IP-адреса клиентов за веб-сервером или прокси-сервером (например, Nginx), необходимо правильно настроить файл публикации. Рассмотрим ситуацию, когда перед 1С стоит реверс-прокси или когда мы хотим, чтобы веб-сервер передавал информацию о клиенте платформе.

Проанализируем структуру файла default.vrd. В нем существует специальный параметр trustedProxies, который позволяет платформе доверять заголовкам, переданным от определенных узлов. Если мы не укажем доверенные прокси, 1С будет игнорировать заголовок X-Forwarded-For, считая его небезопасным.

Выполним следующие шаги по настройке:

  1. Откроем файл default.vrd в каталоге публикации информационной базы.
  2. Добавим или отредактируем секцию настроек, указав IP-адрес вашего веб-сервера или прокси.

<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-адрес пользователя в колонке «Компьютер».

Метод 2. Анализ логов веб-сервера (Apache и IIS)

Если по каким-то причинам стандартный журнал 1С не подходит для оперативного реагирования, мы можем обратиться к первоисточнику — логам веб-сервера. Выясним причину, по которой это эффективно: любая попытка авторизации в веб-клиенте инициирует POST-запрос к ресурсу публикации.

Рассмотрим алгоритм для Apache:

В файле конфигурации httpd.conf необходимо убедиться, что включено логирование запросов. По умолчанию логи сохраняются в access.log. Каждая запись содержит IP-адрес источника, время и адрес запроса. Неудачные попытки входа в 1С часто сопровождаются специфическими ответами сервера или размером передаваемых данных.

Для автоматизации этого процесса можно использовать связку со сторонним ПО, таким как Fail2ban. Разберем, как это работает:

Метод 3. Внешняя аутентификация и использование OpenID Connect

Как отмечали участники обсуждения, одним из самых «красивых» и безопасных решений является вынос процесса авторизации за пределы 1С. Посмотрим на ситуацию: если пользователь вводит пароль непосредственно в окне 1С, у нас мало рычагов влияния до момента совершения входа. Если же мы используем OpenID Connect (например, через Keycloak или самописный сервис на Go), процесс выглядит иначе.

Проанализируем преимущества этого подхода:

  1. Пользователь сначала попадает на страницу авторизации внешнего сервиса.
  2. Внешний сервис имеет полный доступ к заголовкам запроса и видит IP-адрес, User-Agent и другие метаданные.
  3. Мы можем реализовать любую логику блокировки: после 3-й неудачной попытки заблокировать IP на 15 минут, отправить уведомление в Telegram или потребовать ввод капчи.
  4. 1С получает только подтвержденный токен авторизации.

Для реализации этого в 1С необходимо настроить использование OpenID в параметрах публикации (default.vrd), указав адрес провайдера аутентификации в параметре openid.

Метод 4. Создание прокси-микросервиса на языке Go

Рассмотрим продвинутый вариант, упомянутый в дискуссии: написание небольшого прокси-сервера. На языке 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)
    }
}

Метод 5. Использование Web Application Firewall (WAF)

Если бюджет и инфраструктура позволяют, самым надежным методом защиты веб-публикации будет установка WAF. Рассмотрим, чем он полезен в контексте 1С. Современные WAF (например, Nemesida, Cloudflare или ModSecurity) имеют готовые паттерны для распознавания перебора паролей. Они анализируют поведение клиента и блокируют подозрительные IP-адреса еще на подступах к вашей сети, избавляя сервер 1С от необходимости обрабатывать заведомо ложные запросы.

Подведем итог: для простого отслеживания IP достаточно настроить trustedProxies в default.vrd. Для активной защиты и блокировки лучше использовать комбинацию логов веб-сервера и Fail2ban или специализированные решения для внешней аутентификации.

← На главную