Перейти к содержимому

WAF перед 1С и служебные пути платформы

Рекомендация

#безопасность#http#надёжность

При публикации 1С за WAF/Servicepipe учитывать служебный трафик платформы: часть легитимных запросов веб-клиента идёт с пустым User-Agent и к служебным путям (/e1cib/tempstorage/). Глухая блокировка по UA или размеру ломает интерфейс пользователя, а не атакующего.

  • Для служебных путей 1С сделать исключение на пустой UA, но не «дырку»: дополнительно проверять авторизационные cookie сессии (v8scid). Сам веб-сервер 1С отобьёт неавторизованный доступ на уровне приложения (401/403), а всплеск частоты погасит rpm-лимит.
  • Логировать реальный IP клиента за WAF (X-Forwarded-For в Apache) — иначе инциденты неразбираемы.
  • Prod и test WAF-профили держать в одинаковом поведении, чтобы баг не «прятался» между контурами.
  • Веб-клиент 1С шлёт пачку запросов к /e1cib/tempstorage/; часть с UA V8WebKit проходит, часть с пустым UA блокируется. Сессия получает повреждённый поток (вместо бинарного файла — HTML-заглушка/обрыв) → фатальная ошибка Char 0x0 out of allowed range.
  • Большие тела (ЭДО > 20 МБ) отбиваются на WAF кодом 403 ещё до Apache — см. долгие и большие операции.

Логирование реального IP за WAF — на стороне Apache, иначе в access_log все запросы приходят с адреса WAF:

# Apache за WAF/прокси: в лог пишем адрес из X-Forwarded-For
RemoteIPHeader X-Forwarded-For
RemoteIPProxiesHeader X-Forwarded-By
RemoteIPTrustedProxy 10.0.0.0/8 # сеть WAF/балансировщика
LogFormat "%a %l %u %t \"%r\" %>s %b \"%{User-Agent}i\"" combined_realip
CustomLog "logs/1c_access.log" combined_realip

Синтаксис правил зависит от конкретного WAF (пример — в нотации ModSecurity); переносится сам принцип: исключение по пути + признак сессии, а не отключение проверки целиком.

Публикации без внешнего WAF (только внутренний контур) — правило неактуально. Границы применимости — периметр, где трафик 1С проходит через сторонний фильтр.