Фильтрация событий
Платформа Радар поддерживает фильтрацию входящих событий на двух этапах:
-
Фильтрация на этапе сбора лог-коллектором;
-
Фильтрация на этапе принятия событий модулем обработки событий.
Фильтрация на этапе сбора лог-коллектором
Фильтрацию на этапе сбора лог-коллектором можно разбить на два типа:
Фильтрация структурированных данных
Применима для таких типов источников, как:
- WMI
- Event log
- ODBC
- ETW
Фильтрация в компонентах сбора со структурированными данными работает как blacklist и настраивается при описании источника, в секции filters.
Пример фильтрации, исключающий сбор событий с уровнем Information:
filters:
created: ''
event_id: ''
qualifiers: ''
record_id: ''
process_id: ''
thread_id: ''
version: ''
computer_name: ''
msg: ''
level_text: 'Information'
task_text: ''
opcode_text: ''
channel_text: ''
provider_text: ''
Фильтрация неструктурированных данных
Фильтры можно указать для каждого коллектора с неструктурированными данными.
Фильтры содержат белый список (whitelist) и черный список (blacklist) с массивом регулярных выражений.
Все регулярные выражения проверяются перед запуском приложения. Сначала проверяется белый список, а затем черный.
Фильтрация по регулярным выражениям может быть включена в любом коллекторе с неструктурированными данными.
Включается путем добавления секции filters. В данной секции указываются два массива — whitelist, blacklist.
Все события сначала проходят фильтры указанные в whitelist, т.к. его приоритет выше. Затем события проверяются фильтрами, указанными в blacklist.
Whitelist — события, которые соответствуют регулярному выражению, попадают в очередь на отправку.
Blacklist — события, которые соответствуют регулярному выражению, блокируются и не попадают в очередь на отправку.
Пример фильтрации для неструктурированных данных:
filters:
whitelist:
- "^localhost.*$"
blacklist:
- "^.*[0-9]$"
Фильтрация на этапе принятия событий модулем обработки событий
Фильтрация на данном этапе осуществляется через файл /etc/termite/processors.py
Блок предварительной фильтрации - это простая функция Python, которая принимает сырое событие и определенное условие, в качестве входных данных, и возвращает логическое значение.
Значение False приводит к пропуску сырого события.
Пример использования, по которому, если в сыром событии присутствует слово "irrelevant" - событие пропускатеся:
@prefilter('drop-irrelevant')
def drop_irrelevant(raw):
return 'irrelevant' not in raw
Настройка фильтрации поступающих событий
При получении сообщений от внешних источников можно настроить фильтрацию поступающих событий.
Для настройки фильтрации необходимо выполнить следующие действия:
-
Подключиться по SSH к узлу обработки событий (Worker) Платформы Радар.
-
Открыть на редактирование файл:
nano /opt/pangeoradar/termite2/venv/lib/python3.7/site-packages/termite_spu/prefilters/prefilters.py
-
Добавить в конец файла следующую запись:
@prefilter('<имя>')
`def drop_demo_user(raw: str):` `return '"rrname":"<ключ>"' not in raw`
где:
-
<имя> - уникальное имя фильтра.
-
<ключ> - строка из состава сырых данных события, по наличию которой будет происходить фильтрация поступающих событий.
-
-
Сохранить изменения в файле.
-
Открыть файл pipelines.yaml:
nano /opt/pangeoradar/configs/termite/pipelines.yaml
-
Найти в файле раздел настроек источника, чьи поступающие сообщения необходимо фильтровать, и добавить в этот раздел следующую запись:
prefilters: ['<имя>']
,где: <имя> - имя фильтра, заданное на шаге 3.
-
Сохранить изменения в файле.
Для проверки работы фильтрации поступающих сообщений - перейти в веб-интерфейс Платформы Радар в раздел "Просмотр событий" и убедиться, что указанные для фильтрации события не поступают в Платформу Радар.