1. Архитектура Wazuh и логика взаимодействия компонентов системы
Архитектура Wazuh и логика взаимодействия компонентов системы
Представьте ситуацию: в три часа ночи на одном из ваших серверов базы данных создается новый пользователь с правами суперпользователя, а через минуту системный бинарный файл /bin/ls меняет свой хэш-сумму. В классической схеме мониторинга вы узнаете об этом, только если вручную проверите логи или дождетесь утреннего отчета. Wazuh же узнает об этом мгновенно, сопоставит эти два события и поднимет тревогу. Но чтобы доверять этой системе и, что более важно, правильно её настраивать, нужно понимать, как именно байты информации превращаются в алерты на вашем экране. Многие администраторы воспринимают Wazuh как «черный ящик», который просто ставится скриптом, однако без понимания внутренней механики взаимодействия агента и менеджера любая сложная диагностика превращается в гадание на кофейной гуще.
Трехуровневая модель: фундамент экосистемы
Wazuh не является монолитным приложением. Это распределенная система, построенная на базе форка OSSEC, которая со временем эволюционировала в мощную платформу XDR (Extended Detection and Response). Ее архитектуру принято делить на три основных уровня: конечные точки (Endpoints), серверная часть (Management Server) и уровень анализа и визуализации (Indexing & Dashboard).
На первом уровне находятся Wazuh Agents. Это легковесные службы, которые вы устанавливаете на серверы, рабочие станции, облачные инстансы или даже контейнеры. Их задача — не анализировать, а собирать. Агент — это «глаза и уши» системы. Он потребляет минимум ресурсов, чтобы не аффектить работу продакшн-сервисов, и отправляет данные «наверх».
Второй уровень — Wazuh Manager. Это «мозг» системы. Именно здесь происходит магия: декодирование сырых логов, сопоставление их с правилами, проверка на соответствие сигнатурам и принятие решения о том, является ли событие инцидентом. Если агент — это датчик, то менеджер — это пульт управления, который анализирует сигналы сотен и тысяч таких датчиков.
Третий уровень — Wazuh Indexer и Wazuh Dashboard. Индексатор (базирующийся на OpenSearch) отвечает за долгосрочное хранение и быстрый поиск по накопленным данным. Дашборд — это графический интерфейс, через который вы взаимодействуете с системой. Важно понимать: когда вы видите красивый график в браузере, вы смотрите не в «живой» поток данных от агента, а в базу данных индексатора, куда менеджер уже сложил результаты своего анализа.
Анатомия агента: как данные покидают хост
Агент Wazuh — это многопоточный демон, состоящий из нескольких модулей. Понимание того, какой модуль за что отвечает, критично для отладки. Если вы настроили сбор логов, но они не приходят, вам нужно знать, какой именно внутренний процесс агента «молчит».
Связь между агентом и менеджером осуществляется через протокол Wazuh протокол, который работает поверх TCP (реже UDP) на порту 1514. Данные передаются в зашифрованном и сжатом виде.
> Безопасность передачи обеспечивается использованием AES-шифрования. Каждый агент при регистрации получает уникальный ключ (ID и Key), который используется для аутентификации и создания защищенного туннеля. Без валидного ключа менеджер просто сбросит соединение.
Интересный нюанс заключается в буферизации. Если связь с менеджером прерывается (например, из-за проблем в сети), агент не выбрасывает данные. У него есть внутренний анти-флуд механизм и очередь. Как только соединение восстанавливается, агент начинает «выплескивать» накопленные события, но делает это дозированно (по умолчанию 500 событий в секунду), чтобы не перегрузить менеджер и не создать DoS-атаку на собственную систему безопасности.
Жизненный путь события на стороне менеджера
Когда пакет данных от агента прилетает на порт 1514 менеджера, начинается процесс, называемый Analysis Pipeline. Это конвейер, состоящий из нескольких этапов, и ошибка на любом из них приведет к тому, что важное событие будет проигнорировано.
Этап 1: Регистрация и аутентификация (Authd)
Сервисwazuh-authd отвечает за добавление новых агентов. Когда вы запускаете команду регистрации на стороне клиента, он стучится на порт 1515 менеджера. Менеджер проверяет пароль (если задан) и выдает агенту сертификат и ключ. С этого момента агент считается «своим».Этап 2: Прием данных (Remoted)
Процессwazuh-remoted слушает входящие соединения от агентов. Он расшифровывает пакеты, проверяет их целостность и передает сырые строки во внутреннюю очередь сообщений (Analysis Engine Queue).Этап 3: Декодирование (Analysisd)
Это сердце системы. Процессanalysisd берет сырую строку, например:
May 10 10:01:02 server1 sshd[1234]: Failed password for root from 192.168.1.50 port 54321 ssh2
и пытается применить к ней декодеры. Декодер — это набор регулярных выражений, который превращает неструктурированный текст в структурированный JSON. В данном примере декодер выделит поля:
program_name: sshdsrcip: 192.168.1.50dstuser: rootЕсли декодер не найден, событие помечается как «unknown» и, скорее всего, будет отброшено, если вы не настроили сохранение всех архивов.
Этап 4: Сопоставление с правилами
После того как данные структурированы, менеджер прогоняет их через иерархическую систему правил. Правила имеют уровни от 0 до 15:Система правил работает по принципу «от общего к частному». Сначала срабатывает базовое правило (это лог sshd), затем вложенное (это ошибка входа), затем еще более специфичное (это третья ошибка за минуту с одного IP).
Хранение и визуализация: Индексатор и Дашборд
После того как analysisd решил, что событие достойно внимания (уровень правила выше порога log_level, обычно это 3), он формирует JSON-объект и отправляет его в Wazuh Indexer.
Индексатор — это высокопроизводительная NoSQL база данных. Она хранит данные в виде индексов. Каждый день (по умолчанию) создается новый индекс, например wazuh-alerts-4.x-2023.10.27. Это позволяет эффективно управлять жизненным циклом данных: старые индексы можно сжимать, переносить на медленные диски или удалять.
В этой упрощенной формуле кроется причина большинства проблем с тормозами интерфейса. Если у вас слишком много мелких индексов или недостаточно «шардов» (частей индекса), поиск будет идти мучительно долго.
Wazuh Dashboard — это надстройка над индексатором. Она не хранит данные сама по себе. Когда вы открываете вкладку "Security Events", Дашборд отправляет Query-запрос к Индексатору, получает JSON-ответ и отрисовывает его в виде таблиц и диаграмм. Также Дашборд взаимодействует с Wazuh API (работает на менеджере, порт 55000), чтобы изменять настройки системы, перезагружать агентов или просматривать их статус в реальном времени.
Логика взаимодействия: пример реального инцидента
Разберем цепочку событий при попытке подбора пароля по SSH.
/var/log/auth.log появляются записи.logcollector видит новую строку в файле. Он упаковывает ее, шифрует и отправляет менеджеру.sshd разбивает строку на части.
- Срабатывает правило ID 5710 (Attempt to login using a non-existent user).
- Менеджер проверяет частоту: если таких событий 8 за 30 секунд, срабатывает правило ID 5712 (SSHD brute force trying to get access to the system).
/var/ossec/logs/alerts/alerts.json и одновременно отправляет его в индексатор.Если в системе настроен Active Response (активное реагирование), менеджер может отправить обратную команду агенту. Например: «Заблокируй IP 192.168.1.50 через iptables на 30 минут». Агент получит эту команду и выполнит локальный скрипт. Это замыкает цикл: Обнаружение -> Анализ -> Реагирование.
Граничные случаи и архитектурные нюансы
При проектировании системы важно учитывать, что Wazuh Manager может стать узким местом. В крупных инсталляциях (более 500-1000 агентов) используется кластерный режим.
В кластере есть одна Master-нода и несколько Worker-нод. Агенты распределяются между воркерами. Мастер-нода отвечает за синхронизацию конфигураций и правил. Если вы измените правило на мастере, оно автоматически разлетится по всем воркерам. Однако анализ логов происходит локально на каждой ноде.
Еще один важный аспект — Agentless monitoring. Wazuh может мониторить устройства, на которые нельзя поставить агента (коммутаторы Cisco, брандмауэры Fortigate, принтеры). В этом случае устройство настраивается на отправку Syslog-сообщений прямо на IP менеджера. Менеджер принимает их, делает вид, что это пришло от «виртуального агента», и прогоняет через те же декодеры и правила. Минус этого подхода — отсутствие шифрования в стандартном Syslog и невозможность использовать FIM или Active Response.
Расширенная инвентаризация и SCA
Помимо логов, Wazuh выполняет роль системы управления активами. Модуль Syscollector на агенте регулярно собирает данные о:
Эти данные не порождают алерты при каждом сканировании. Они складываются в базу данных global.db на стороне менеджера (в формате SQLite). Когда вы открываете инвентарную карточку агента в Dashboard, данные берутся именно оттуда.
Параллельно работает модуль SCA (Security Configuration Assessment). Он проверяет систему на соответствие лучшим практикам (например, рекомендациям CIS Benchmark). Агент получает от менеджера файл политики (YAML), в котором описаны проверки: «Должен ли быть запрещен вход root по SSH?», «Установлены ли права 600 на /etc/shadow?». Агент выполняет проверки и отправляет отчет: Pass или Fail. Это позволяет видеть общую картину защищенности инфраструктуры в процентах.
Потоки данных и порты: шпаргалка администратора
Для успешной работы в сети с брандмауэрами необходимо четко понимать, какие порты должны быть открыты:
| Направление | Порт | Протокол | Назначение | | :--- | :--- | :--- | :--- | | Agent -> Manager | 1514 | TCP (UDP) | Передача логов и событий (основной канал) | | Agent -> Manager | 1515 | TCP | Регистрация новых агентов и получение ключей | | Admin -> Manager | 55000 | TCP | Wazuh API (управление через Dashboard или скрипты) | | Dashboard -> Indexer | 9200 | TCP | Запросы на получение данных для графиков | | Manager -> Indexer | 9200 | TCP | Отправка алертов для индексации | | Cluster Nodes | 1516 | TCP | Синхронизация между нодами менеджера |
Если вы видите статус агента Never connected, первым делом проверяйте доступность порта 1515 для регистрации, а затем 1514 для работы. Если агент Active, но данных нет — проблема в правилах или декодерах на стороне менеджера.
Иерархия конфигураций
Wazuh использует XML-формат для настроек. Основной файл на менеджере — /var/ossec/etc/ossec.conf. Однако управлять сотнями агентов, заходя на каждый и правя конфиг вручную, невозможно. Для этого существует механизм Centralized Configuration.
На менеджере в директории /var/ossec/etc/shared/ создаются группы (например, web-servers, db-servers). Внутри группы лежит файл agent.conf. Как только агент подключается к менеджеру и сообщает, что он состоит в группе web-servers, менеджер «проталкивает» ему этот конфиг. Агент сливает его со своим локальным ossec.conf и перезапускает нужные модули. Это позволяет централизованно менять политики сбора логов или частоту сканирования FIM для целых сегментов сети.
Понимание этой иерархии (Локальный конфиг < Централизованный конфиг) спасает от ситуаций, когда вы правите файл на сервере, а настройки «волшебным образом» откатываются назад после перезапуска агента.
Взаимодействие компонентов Wazuh — это гармоничный танец между легковесными сборщиками и тяжеловесными анализаторами. Менеджер берет на себя всю вычислительную нагрузку, освобождая ресурсы конечных точек, а индексатор обеспечивает возможность мгновенно найти иголку в стоге сена из миллионов событий. В следующей части мы перейдем от теории архитектуры к практике: научимся ориентироваться в интерфейсе Dashboard, чтобы эффективно использовать все те данные, которые мы только что научились передавать.