Аналитика событий фаервола
qf-analytics строит отчёты по событиям фаервола и экспортирует агрегированные
данные. Сервис разворачивается отдельно от Control Plane и только читает данные
из PostgreSQL или OpenSearch.
Инструкция по развёртыванию — в разделе установки, переменные окружения — в справочнике конфигурации.
Источник данных
Источник выбирается по объёму данных. Сервис выполняет только SQL-запросы SELECT
или запросы OpenSearch _search.
| Масштаб | ANALYTICS_SOURCE | Источник |
|---|---|---|
| Малый | postgres | CP-primary, RO-роль |
| Средний | postgres | RO-реплика (тот же адаптер, другой DSN) |
| Крупный | opensearch | Копия событий в SIEM |
От источника зависят скорость широких временных окон и способ поиска аномалий.
Фильтры по имени правила и политики для OpenSearch требуют
ANALYTICS_ENRICH_DSN; без него отчёт показывает идентификаторы правил и не
строит срез по политикам.
Доступ и SSO
Сервис использует роли Control Plane. Операторский access-токен RS256 проверяется
по JWKS без обращения к Control Plane на каждый запрос. ANALYTICS_ROLES
задаёт список ролей с доступом; остальным сервис отвечает 403. Для отчётов можно
разрешить роль auditor.
При публикации под тем же родительским доменом, что и Control Plane, cookie
qf_token передаётся сервису и повторный вход не нужен.
Сервис рассчитан на одну организацию. Access-токен содержит tenant_id, но запросы
к источнику данных не ограничивают строки по этому значению. Поэтому один экземпляр
qf-analytics нельзя подключать к хранилищу нескольких организаций.
Эндпоинты
| Путь | Доступ | Назначение |
|---|---|---|
GET /healthz | открыт | Liveness/readiness. |
GET /version | открыт | Версия. |
GET /app/ | открыт | Интерфейс отчётов; сами данные защищены API-аутентификацией. |
GET /api/report | роль из allowlist | JSON-отчёт. |
GET /api/report/export | роль из allowlist | Скачивание отчёта файлом. |
Параметры /api/report и /api/report/export:
| Параметр | Значения | Назначение |
|---|---|---|
since | duration (24h, 48h, 336h, 720h, …) | Окно отчёта от «сейчас» назад. |
from / to | RFC3339 | Явное окно (альтернатива since). |
host / rule / policy | имя | Фильтр по имени; применяется ко всем агрегациям окна. Для OpenSearch фильтры rule и policy требуют ANALYTICS_ENRICH_DSN. |
redact | mask (по умолчанию) | hash | none | Режим обезличивания IP-осей. |
format (только export) | json | md | csv | Формат файла-артефакта. |
Состав отчёта и фильтры
Отчёт содержит общий итог за период, первые N значений по каждому измерению и найденные аномалии.
Измерения отчёта: хост, действие, направление, протокол, состояние conntrack,
исходный и конечный IP-адреса и порты, правило, политика и время. Срез по правилам
охватывает только события, совпавшие с правилом. Политика определяется по правилу.
Протокол показывается именем (tcp, udp и другие), пустое значение — как (none).
В UI:
- Панели сворачиваются и по умолчанию закрыты.
- Готовые периоды: сутки, двое суток, две недели и месяц. API также принимает
произвольные
fromиto. - Фильтры по хосту, правилу и политике применяются по Enter или кнопке Generate report. Новый запрос отменяет предыдущий.
Для фильтров по хосту и правилу в PostgreSQL есть индексы на партициях
log_events. Отчёт без фильтра группирует все события периода и на большом объёме
может выполняться долго.
Обезличивание IP-адресов
Параметр redact задаёт обработку исходных и конечных IP-адресов:
mask(по умолчанию) — IPv4 сворачивается до/24, IPv6 до/64.hash— адрес заменяется стабильным сокращённым SHA-256.none— сырой адрес (для доверенного контура).
Хосты, порты и остальные измерения не меняются. Обезличивание выполняется при
построении отчёта, поэтому необработанный IP-адрес не попадает ни в API-ответ, ни
в экспорт при режимах mask и hash.
Экспорт
Экспорт содержит агрегированный отчёт, а не исходные события. Доступны JSON,
Markdown и CSV. Сервис не отправляет файл во внешние системы: он возвращает его
оператору. Пустые срезы в JSON сериализуются как [], а не null. CSV защищает
текстовые значения от интерпретации как формул электронных таблиц; JSON и Markdown
сохраняют исходный текст.
Детекция аномалий
Способ поиска аномалий зависит от источника:
postgres— встроенная эвристика ищет всплескиdenyотносительно медианы и ростconntrack=invalid. Пороги задают переменныеANALYTICS_ANOMALY_*.opensearch— серверные агрегации OpenSearch вычисляют отклонение долиdenyи количествоinvalidпо временным интервалам. ML-плагин не требуется.
Эта проверка выполняется при построении отчёта и не заменяет постоянный мониторинг. Для непрерывных уведомлений используется мониторинг на стороне SIEM; пример — в разделе установки.
Производительность и выбор источника
Отчёт без фильтра группирует все события периода. На большой таблице log_events
это может привести к полному чтению партиций и тайм-ауту.
- Для частых запросов используются фильтры
hostиrule. ANALYTICS_PG_MAX_WINDOW_HOURSограничивает период для PostgreSQL. Превышение возвращает422.- Для больших объёмов и широких периодов используется OpenSearch.
Границы отчёта
- Видны только логируемые события: правила
silent/log=falseв отчёт не попадают. - Оси rule/policy покрывают только rule-matched трафик; default-action (без правила) не атрибутируется.