Ключевые положения формата
- Каждое событие — ровно один 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_ |
string | да | Время события в формате ISO-8601 (UTC), например 2025-09-15T12:34:56Z. |
Формат type: "access" (журнал запросов):
Назначение: краткая телеметрия HTTP-запросов и ответов.
| Поле | Тип | Обяз. | Пример | Описание |
|---|---|---|---|---|
website_ |
string | да | "0f3c4f9e-3a7b-4c9b-9c63-9a2c0c9dc2d1" |
Идентификатор сайта/приложения (UUID). |
domain |
string | нет | "example.com" |
Хост из запроса. |
client_ |
string | нет | "203.0.113.7" |
IP клиента. |
scheme |
string | нет | "https" |
Протокол прикладного уровня: http/https (эвристика). |
uri |
string | да | "/products/42" |
Путь без query-строки. |
status |
number | нет | 200 |
HTTP-код ответа. |
bytes_ |
number | нет | 12345 |
Объём ответа в байтах. |
country |
string | нет | "US" |
ISO-3166-1 alpha-2, если определена страна клиента. |
user_ |
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_ |
string | да | "0f3c4f9e-…" |
Идентификатор сайта (UUID). |
server_ |
string | да | "7b1b2c3d-…" или 40/32-hex |
Идентификатор узла; допускается UUID или стабильный хеш. |
unique_ |
string | да | "1700000000:abc123" |
Уникальный ID события в пределах узла. |
user_ |
number | нет | 42 |
Внутренний ID владельца/аккаунта, если известен. |
domain |
string | нет | "example.com" |
Хост из запроса. |
client_ |
string | нет | "203.0.113.7" |
IP клиента. |
host_ |
number | нет | 443 |
Порт виртуального хоста, если определён. |
country |
string | нет | "US" |
Код страны клиента в ISO-3166-1 alpha-2. |
method |
string | нет | "GET" |
Метод HTTP-запроса. |
http_ |
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_ |
array | нет | [942100, 941100] |
Идентификаторы сработавших правил (числовые). |
custom_ |
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, а также поддерживаемые транспорты и особенности доставок. Для обеспечения корректной аналитики в Ваших системах рекомендуется ориентироваться на приведённые схемы полей, примеры и поведенческие гарантии по каждому типу события.