Wazuh — бесплатный open-source SIEM/XDR под AGPL-лицензией, который закрывает заметную часть задач коммерческих решений: сбор логов, контроль целостности файлов, поиск уязвимостей, реакцию на события. Цена — ваше время на развёртывание и эксплуатацию. Открываем цикл из шести статей, и в первой — только установка: от git clone до работающего UI за вечер.
Содержание
Открыть содержание
Зачем разбирать 4.x, если уже есть 5.0
Актуальный стабильный релиз на момент публикации — Wazuh 4.14.7. При этом проект уже в публичной бете 5.0: кластеризация по умолчанию, замена Filebeat, переписанный движок анализа (актуальный статус — в release notes). Логично, что часть вещей поменяется. Но прежде чем разбирать, что именно, нужно зафиксировать базовый воркфлоу на стабильной 4.x: именно её вы поставите в продакшен сегодня, и именно от неё будете мигрировать.
Из чего состоит Wazuh
Три серверных компонента и агенты на наблюдаемых хостах:
- wazuh-manager — мозг. Принимает события от агентов (порты 1514 и 1515), прогоняет их через декодеры и правила, генерирует алерты. Здесь же API на порту 55000;
- wazuh-indexer — форк OpenSearch. Хранит алерты и события, отвечает за поиск. Это самый прожорливый по памяти и диску компонент;
- wazuh-dashboard — веб-интерфейс на базе OpenSearch Dashboards, порт 443. Ничего не хранит, только показывает.
Важная деталь: правила и логика детектирования живут в manager, а не в indexer. Indexer можно потерять и поднять заново — вы потеряете историю, но не логику. Обратное неверно, и к этому мы вернёмся в части про кастомные правила.
Что нужно, чтобы поднять single-node
Требования скромнее, чем кажется, но не нулевые:
- Железо: для лаборатории — 4 vCPU и 8 ГБ RAM, SSD. Indexer — JVM, и на 4 ГБ он, скорее всего, будет падать по OOM. Актуальные цифры под число агентов — в quickstart-документации Wazuh;
- Docker и Docker Compose v2;
vm.max_map_count=262144на хосте — без этого indexer (OpenSearch) не стартует;- свободные порты 443, 1514, 1515, 55000 и 9200.
Официальный репозиторий с готовыми compose-файлами — wazuh/wazuh-docker. Берём тег под нужную версию:
sudo sysctl -w vm.max_map_count=262144
echo 'vm.max_map_count=262144' | sudo tee /etc/sysctl.d/99-wazuh.conf
git clone https://github.com/wazuh/wazuh-docker.git -b v4.14.7
cd wazuh-docker/single-node
TLS-сертификаты
Компоненты общаются друг с другом по TLS, поэтому до первого запуска нужны сертификаты. В Docker-варианте их генерирует одноразовый контейнер, который описан в generate-indexer-certs.yml (под капотом там та же логика, что в wazuh-certs-tool.sh из классической установки на хост):
docker compose -f generate-indexer-certs.yml run --rm generator
Сертификаты появятся в config/wazuh_indexer_ssl_certs/. Храните этот каталог как секрет: закрытые ключи лежат там же.
Запуск
docker compose up -d
docker compose ps
Внутри single-node/docker-compose.yml три сервиса: wazuh.manager, wazuh.indexer и wazuh.dashboard. Первый старт занимает несколько минут — indexer инициализирует security-конфигурацию, dashboard ждёт его готовности.
Как проверить, что всё работает
# indexer отвечает (учётные данные по умолчанию — см. ниже)
curl -sk -u admin:SecretPassword https://localhost:9200
# manager API: получить токен
curl -sk -u wazuh-wui:'MyS3cr37P450r.*-' -X POST \
"https://localhost:55000/security/user/authenticate?raw=true"
Откройте https://<host> в браузере (сертификат самоподписанный — браузер предупредит, это ожидаемо) и войдите под admin / SecretPassword.
Смените пароли сразу. Учётные данные по умолчанию публично задокументированы. Это нормально для локальной лаборатории и недопустимо для всего, что видно из сети. Порядок смены (хэш в
internal_users.ymlплюс переменные окружения в compose) описан в документации Wazuh — мы вернёмся к этому в разделе про hardening.
Что видно в dashboard «из коробки»
Без единого агента дашборд почти пуст, но не совсем:
- встроенный агент manager — сам контейнер
wazuh.managerрегистрируется как агент с ID 000, поэтому у вас уже есть хотя бы один источник событий; - раздел Server management — статус сервисов, правила и декодеры (их несколько тысяч, можно читать и искать), настройки кластера, логи;
- Modules — Security events, Integrity monitoring, Vulnerability detection, MITRE ATT&CK, но пока без данных: они оживают, когда появятся агенты;
- Endpoints summary — пустой список агентов и кнопка Deploy new agent, которая генерирует команду установки под нужную ОС.
Первый полезный шаг — нажать Deploy new agent, поставить агента на любой тестовый Linux-хост и посмотреть, как за минуту появятся события. Подробно про агентов и FIM — в следующей части.
Single-node — не production
Это самое важное различие, и его стоит проговорить до того, как вы покажете «работающий SIEM» руководству.
| Параметр | Single-node (docker compose) | Production |
|---|---|---|
| Indexer | 1 нода, нет реплик шардов | 3+ ноды, реплики |
| Manager | 1 инстанс | кластер master + worker |
| Отказоустойчивость | падение хоста = потеря сбора событий | переживает выход ноды |
| Масштаб | десятки агентов | сотни и тысячи |
| Бэкапы и обновления | вручную | по регламенту, с проверкой восстановления |
| Сертификаты и пароли | сгенерированные и дефолтные | ротация, свой CA, секрет-менеджер |
| Для чего | лаборатория, PoC, оценка стека | реальный мониторинг |
Single-node — это не «маленькая версия продакшена», а другой класс решения. Тот же стек, но отказоустойчивость, ёмкость хранилища, политика ретенции и модель эксплуатации — отдельная инженерная задача.
Итог
Развернуть Wazuh за вечер — не значит получить production-ready SIEM. Но этого достаточно, чтобы начать видеть события и понять, нужен ли вам этот стек вообще, прежде чем вкладываться в кластер, правила и интеграции. Дальше в цикле: агенты и контроль целостности файлов, кастомные правила и декодеры, active response, аудит Kubernetes и связка с Falco.