В данном разделе формализуются состав, типы и семантика полей событий WAF для передачи по syslog и последующей интеграции с Вашими SIEM/SOAR и хранилищами логов. События описываются единым JSON‑объектом в кодировке UTF‑8; тип события определяется полем type; поля с неизвестными значениями опускаются; метки времени имеют формат ISO‑8601 в UTC с суффиксом Z. Эти требования обеспечивают детерминированный парсинг и корректную корреляцию на стороне принимающей системы.

Вы можете настроить приём сообщений syslog от сервиса WAF и выполнить маппинг полей в Вашей SIEM, руководствуясь нижеприведённой спецификацией. Для первичной валидации корректности парсинга целесообразно включить журналирование на тестовой витрине и сопоставить извлекаемые поля type, event_time, action, rule_ids, client_ip, domain, uri, status. (СКРИНШОТ)

Ключевые положения формата

  • Каждое событие — ровно один JSON‑объект в UTF‑8.
  • Для различения типов событий используется поле type.
  • Поля с неизвестными значениями опускаются, null не передаётся.
  • Метки времени — ISO‑8601 UTC с суффиксом Z (например, 2025-09-15T12:34:56Z).

Транспорт и кадрирование

  • UDP (RFC 5426): передаётся один JSON‑объект целиком; возможна фрагментация/усечение при больших размерах.
  • TCP (RFC 6587, octet‑counted): кадрирование в виде "<длина> <JSON>".
  • TLS (RFC 5425): идентично TCP, но по защищённому каналу; рекомендуется для продакшн‑интеграций.
  • Ретраи при сетевых ошибках отсутствуют; доставка best‑effort.

 

Общая «обёртка» сообщения:

Поле Тип Обяз. Описание
type string да Вид события. Возможные значения: "access", "audit".
event_time string да Время события в формате ISO‑8601 (UTC), например 2025-09-15T12:34:56Z.

 

Формат type: "access" (журнал запросов):

Назначение: краткая телеметрия HTTP‑запросов и ответов.

Поле Тип Обяз. Пример Описание
website_uuid string да "0f3c4f9e-3a7b-4c9b-9c63-9a2c0c9dc2d1" Идентификатор сайта/приложения (UUID).
domain string нет "example.com" Хост из запроса.
client_ip string нет "203.0.113.7" IP клиента.
scheme string нет "https" Протокол прикладного уровня: http/https (эвристика).
uri string да "/products/42" Путь без query‑строки.
status number нет 200 HTTP‑код ответа.
bytes_sent number нет 12345 Объём ответа в байтах.
country string нет "US" ISO‑3166‑1 alpha‑2, если определена страна клиента.
user_agent string нет "Mozilla/5.0 …" User‑Agent запроса.
referer string нет "https://ref.example/" Referer без query (может отсутствовать).

Пример события access:

{
  "type": "access",
  "event_time": "2025-09-15T12:34:56Z",
  "website_uuid": "0f3c4f9e-3a7b-4c9b-9c63-9a2c0c9dc2d1",
  "domain": "example.com",
  "client_ip": "203.0.113.7",
  "scheme": "https",
  "uri": "/products/42",
  "status": 200,
  "bytes_sent": 12345,
  "country": "US",
  "user_agent": "Mozilla/5.0",
  "referer": "https://ref.example/"
}

Гарантии и поведение для access:

  • uri всегда без query‑строки.
  • При большом размере события могут быть опущены факультативные поля (например, user_agent).
  • Отсутствующие/невычислимые поля опускаются.

 

Формат type: "audit" (события безопасности):

Назначение: фиксация срабатывания правил/политик и итогового действия по запросу.

Поле Тип Обяз. Пример Описание
website_uuid string да "0f3c4f9e-…" Идентификатор сайта (UUID).
server_id string да "7b1b2c3d-…" или 40/32‑hex Идентификатор узла; допускается UUID или стабильный хеш.
unique_id string да "1700000000:abc123" Уникальный ID события в пределах узла.
user_id number нет 42 Внутренний ID владельца/аккаунта, если известен.
domain string нет "example.com" Хост из запроса.
client_ip string нет "203.0.113.7" IP клиента.
host_port number нет 443 Порт виртуального хоста, если определён.
country string нет "US" Код страны клиента в ISO‑3166‑1 alpha‑2.
method string нет "GET" Метод HTTP‑запроса.
http_version string нет "1.1" Версия HTTP.
protocol string нет "https" Прикладной протокол http/https, если известен.
uri string нет "/login" Путь без query‑строки.
status number нет 403 Итоговый HTTP‑код ответа.
request string нет "GET /login HTTP/1.1\r\nHost:…" Сырой запрос: старт‑строка, заголовки и тело; значение усечено до 10 000 символов; служебные/чувствительные заголовки удаляются.
messages array нет см. ниже Перечень сработок правил в компактной форме.
rule_ids array нет [942100, 941100] Идентификаторы сработавших правил (числовые).
custom_rule_uuids array нет ["c1b2…-…"] UUID пользовательских правил.
action string да "BLOCK" | "MONITORING" Итог по событию безопасности.

Структура элементов messages:

{
  "message": "…краткое пояснение…",
  "details": {
    "ruleId": 941100,              // число или null для кастомного правила
    "reference": "…опционально…",  // может отсутствовать
    "ruleCustomUuid": "…uuid…"     // присутствует только у кастомного правила
  }
}

Пример события audit:

{
  "type": "audit",
  "event_time": "2025-09-15T12:34:56Z",
  "website_uuid": "0f3c4f9e-3a7b-4c9b-9c63-9a2c0c9dc2d1",
  "server_id": "7b1b2c3d-4e5f-6789-aaaa-bbbbccccdddd",
  "unique_id": "1700000000:abc123",
  "domain": "example.com",
  "client_ip": "203.0.113.7",
  "protocol": "https",
  "uri": "/login",
  "status": 403,
  "country": "US",
  "messages": [
    {
      "message": "SQLi pattern detected",
      "details": { "ruleId": 942100, "reference": "ARGS:q", "ruleCustomUuid": null }
    }
  ],
  "rule_ids": [942100],
  "custom_rule_uuids": [],
  "action": "BLOCK"
}

Гарантии и поведение для audit:

  • action принимает одно из значений: BLOCK (запрос отклонён) или MONITORING (запрос пропущен, событие зафиксировано).
  • request ограничен по длине и предварительно фильтруется от служебных/вспомогательных заголовков.
  • rule_ids и custom_rule_uuids содержат уникальные значения.

 

Данный раздел фиксирует единый формат событий WAF в syslog: один JSON‑объект на событие, строгая типизация через type, временные метки в ISO‑8601 UTC, отсутствие передач null, а также поддерживаемые транспорты и особенности доставок. Для обеспечения корректной аналитики в Ваших системах рекомендуется ориентироваться на приведённые схемы полей, примеры и поведенческие гарантии по каждому типу события.