Wazuh - знакомство и установка SIEM системы
Описание
Wazuh — это платформа с открытым исходным кодом, реализующая концепции XDR (Extended Detection and Response) и SIEM (Security Information and Event Management). Решение является бесплатным для развертывания на собственной инфраструктуре. Агенты поддерживают операционные системы Linux, Windows и macOS.
Разработчик — компания Wazuh Inc (зарегистрирована в США), но имеет международную команду.
- Основной сайт: https://wazuh.com
- Документация: https://documentation.wazuh.com
- GitHub: https://github.com/wazuh/wazuh
Wazuh представляет собой комплексную систему, которая из коробки включает следующие функциональные модули:
- SIEM (Security Information and Event Management) — обеспечивает централизованный сбор и анализ логов для выявления угроз, аномалий и инцидентов информационной безопасности.
- XDR (Extended Detection and Response) — расширяет возможности классического SIEM за счет глубокой телеметрии с конечных точек и механизмов автоматического реагирования. Позволяет не только детектировать угрозы, но и автоматически устранять их (блокировать IP-адреса, изолировать хосты, выполнять скрипты и завершать вредоносные процессы).
- HIDS (Host-based Intrusion Detection System) — реализует защиту и мониторинг на уровне операционной системы конечных точек, анализируя события, происходящие внутри хостов.
- FIM (File Integrity Monitoring) — отслеживает изменения в критичных файлах, конфигурациях и реестре, генерируя оповещения при несанкционированных модификациях.
- Обнаружение руткитов (Rootkit Detection) — использует встроенные эвристические методы для поиска скрытых процессов, файлов, нестандартных сетевых интерфейсов и других аномалий, характерных для руткитов.
- Веб-интерфейс (Wazuh Dashboard) — предоставляет единую панель управления с визуализацией данных, готовыми дашбордами и инструментами для расследования инцидентов.
Архитектура
Wazuh-сервер состоит из следующих элементов:
- wazuh-manager (Анализатор). Это ядро системы. Принимает входящие события от агентов или по протоколу syslog, выполняет их декодирование для нормализации формата, анализирует для выявления угроз и аномалий. При совпадении события с правилом генерирует алерт и записывает его в локальный файл.
- filebeat (Доставщик логов). Работает на самом сервере (не на клиенте). Читает локальные файлы с алертами, сформированными wazuh-manager, и передает их в wazuh-indexer для индексации. Обеспечивает надежную доставку данных с поддержкой шифрования и повторных попыток при сбоях.
- wazuh-indexer (Хранилище). Это поисковый движок и хранилище (на базе OpenSearch). Сюда filebeat сбрасывает все обработанные алерты. Обеспечивает индексацию, хранение и быстрый полнотекстовый поиск по всем алертам и событиям безопасности.
- wazuh-dashboard (Веб-интерфейс). Это панель управления (построена на OpenSearch Dashboards). Не хранит и не принимает логи напрямую. Делает запросы к wazuh-indexer, чтобы отрисовать красивые графики, таблицы и списки алертов.
Схема работы следующая:
[ Клиент (Linux/Windows/Роутер) ]
| 1. Отправка лога по протоколу Syslog или Агентом
v
[ Wazuh Manager ]
| 2. Принимает syslog или данные от агента
| 3. Анализирует: Декодирует -> Применяет правила -> Генерирует АЛЕРТ
| 4. Записывает алерт в локальный файл
v
[ Filebeat ]
| 5. Читает новый алерт
| 6. Формирует пакет и отправляет по защищенному каналу
v
[ Wazuh Indexer ]
| 7. Принимает данные, индексирует их и сохраняет в своем хранилище
v
[ Wazuh Dashboard ]
| 9. Делает запросы к Indexer
| 10. Получает данные и рисует их на экране
v
[ ВЫ (Браузер) ]
| 11. Смотрите графики и логи в веб-интерфейсе
По умолчанию wazuh-manager передает в wazuh-indexer только те события, которые были классифицированы как алерты (то есть совпали с хотя бы одним правилом). Остальные события, не соответствующие ни одному правилу, отбрасываются на этапе анализа и не сохраняются в базе данных.
На клиентские машины устанавливается агент, либо используется передача логов по syslog. Однако без агентов функционал ограничивается: Wazuh превращается в обычный SIEM-коллектор — собирает логи, но не может “заглянуть внутрь” хоста.
| Возможность | С агентом | Только syslog |
|---|---|---|
| Сбор логов | ✅ Агент читает логи и отправляет их на сервер | ✅ Логи на сервер отправляет syslog |
| Алерты на основе логов | ✅ Да | ✅ Да |
| FIM (мониторинг изменения файлов) | ✅ Да | ❌ Нет |
| Rootkit detection | ✅ Да | ❌ Нет |
| Мониторинг процессов | ✅ Да | ❌ Нет |
| Inventory (список ПО) | ✅ Да | ❌ Нет |
| Vulnerability detector (поиск уязвимостей) | ✅ Да | ❌ Нет |
| Active Response (автоматическое реагирование) | ✅ Да | ❌ Нет |
Установка
Если вы устанавливаете сервер Wazuh в непривилегированный контейнер lxc на ProxmoxVE. То для его работы добавьте следующие опции в конфиг контейнера:
features: nesting=1
lxc.apparmor.profile: unconfined
- Непривилегированный контейнер с отключенным AppArmor безопаснее привилегированного, так как сохраняется изоляция через user namespace. Даже при компрометации контейнера атакующий не получит root на хосте.
Wazuh Manager
Установим зависимости, импортируем GPG-ключ и добавим репозиторий:
# apt install -y curl gnupg apt-transport-https
# curl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH \
| gpg --no-default-keyring \
--keyring gnupg-ring:/usr/share/keyrings/wazuh.gpg --import \
&& chmod 644 /usr/share/keyrings/wazuh.gpg
# cat > /etc/apt/sources.list.d/wazuh.list << 'EOF'
deb [signed-by=/usr/share/keyrings/wazuh.gpg] https://packages.wazuh.com/4.x/apt/ stable main
EOF
Установим и запустим wazuh-manager, а также убедимся что служба стартовала:
# apt update && apt install -y wazuh-manager
# systemctl daemon-reload
# systemctl enable --now wazuh-manager
# systemctl status wazuh-manager
Wazuh Indexer
Установим wazuh-indexer:
# apt install -y wazuh-indexer
- Основной конфиг -
/etc/wazuh-indexer/opensearch.yml. Но пока настраивать ничего не нужно.
Сгенерируем SSL-сертификаты:
# mkdir -p /tmp/wazuh-certs && cd /tmp/wazuh-certs
# cat > config.yml << 'EOF'
nodes:
indexer:
- name: indexer
ip: <YOUR_SERVER_IP>
server:
- name: server
ip: <YOUR_SERVER_IP>
dashboard:
- name: dashboard
ip: <YOUR_SERVER_IP>
EOF
# curl -sO https://packages.wazuh.com/4.14/wazuh-certs-tool.sh
# chmod 700 wazuh-certs-tool.sh
# ./wazuh-certs-tool.sh -A
- Не забудьте в команде выше вместо <YOUR_SERVER_IP> подставить реальный IP-адрес сервера.
- Убедитесь, что версия в URL совпадает с версией устанавливаемого Wazuh, на момент написания статьи версия была 4.14. У вас может отличаться.
Скопируем SSL-сертификаты для wazuh-indexer и filebeat (который установим позже):
# mkdir -p /etc/wazuh-indexer/certs
# mkdir -p /etc/filebeat/certs
# cp /tmp/wazuh-certs/wazuh-certificates/indexer.pem /etc/wazuh-indexer/certs/ && \
cp /tmp/wazuh-certs/wazuh-certificates/indexer-key.pem /etc/wazuh-indexer/certs/ && \
cp /tmp/wazuh-certs/wazuh-certificates/root-ca.pem /etc/wazuh-indexer/certs/ && \
cp /tmp/wazuh-certs/wazuh-certificates/admin.pem /etc/wazuh-indexer/certs/ && \
cp /tmp/wazuh-certs/wazuh-certificates/admin-key.pem /etc/wazuh-indexer/certs/ && \
cp /tmp/wazuh-certs/wazuh-certificates/server.pem /etc/filebeat/certs/ && \
cp /tmp/wazuh-certs/wazuh-certificates/server-key.pem /etc/filebeat/certs/ && \
cp /tmp/wazuh-certs/wazuh-certificates/root-ca.pem /etc/filebeat/certs/
# chown -R wazuh-indexer:wazuh-indexer /etc/wazuh-indexer/certs/
# chmod 500 /etc/wazuh-indexer/certs/ && chmod 400 /etc/wazuh-indexer/certs/*
# chown -R root:root /etc/filebeat/certs/
# chmod 500 /etc/filebeat/certs/ && chmod 400 /etc/filebeat/certs/*
Убедимся что сертификаты на месте:
# ls -la /etc/wazuh-indexer/certs/
итого 40
dr-x------ 2 wazuh-indexer wazuh-indexer 7 июл 1 17:14 .
drwxr-x--- 10 wazuh-indexer wazuh-indexer 13 июл 1 17:12 ..
-r-------- 1 wazuh-indexer wazuh-indexer 1704 июл 1 17:14 admin-key.pem
-r-------- 1 wazuh-indexer wazuh-indexer 1119 июл 1 17:14 admin.pem
-r-------- 1 wazuh-indexer wazuh-indexer 1704 июл 1 17:14 indexer-key.pem
-r-------- 1 wazuh-indexer wazuh-indexer 1277 июл 1 17:14 indexer.pem
-r-------- 1 wazuh-indexer wazuh-indexer 1204 июл 1 17:14 root-ca.pem
Запустим wazuh-indexer и убедимся что служба стартовала:
# systemctl daemon-reload
# systemctl enable --now wazuh-indexer
# systemctl status wazuh-indexer
Инициализируем security-плагин:
# /usr/share/wazuh-indexer/bin/indexer-security-init.sh
- Скрипт загружает базовые настройки безопасности из конфигурационных файлов во внутреннюю базу данных Indexer.
Изменим дефолтные пароли:
# /usr/share/wazuh-indexer/plugins/opensearch-security/tools/wazuh-passwords-tool.sh --change-all
- Будут сгенерированы новые пароли (запишите их).
Проверим работу:
# curl -k -u admin:<ваш_пароль> https://<IP-сервера>:9200
- Должны увидеть JSON с версией OpenSearch.
Wazuh Dashboard
Установим wazuh-dashboard:
# apt install -y wazuh-dashboard
Скопируем сертификаты:
# mkdir -p /etc/wazuh-dashboard/certs
# cp /tmp/wazuh-certs/wazuh-certificates/dashboard.pem /etc/wazuh-dashboard/certs/ && \
cp /tmp/wazuh-certs/wazuh-certificates/dashboard-key.pem /etc/wazuh-dashboard/certs/ && \
cp /tmp/wazuh-certs/wazuh-certificates/root-ca.pem /etc/wazuh-dashboard/certs/
# chown -R wazuh-dashboard:wazuh-dashboard /etc/wazuh-dashboard/certs/
# chmod 500 /etc/wazuh-dashboard/certs/
# chmod 400 /etc/wazuh-dashboard/certs/*
Настроим wazuh-dashboard (нужно изменить следующие строки):
# nano /etc/wazuh-dashboard/opensearch_dashboards.yml
opensearch.hosts: https://<IP-сервера>:9200
opensearch.username: kibanaserver
opensearch.password: '<пароль_kibanaserver>'
Запустим wazuh-dashboard:
# systemctl daemon-reload
# systemctl enable --now wazuh-dashboard
# systemctl status wazuh-dashboard
Установка Filebeat
Установим filebeat:
# apt install -y filebeat
Скачаем и подключим модуль Wazuh для Filebeat:
# mkdir -p /usr/share/filebeat/module/wazuh
# cd /tmp
# curl -LO https://packages.wazuh.com/4.x/filebeat/wazuh-filebeat-0.4.tar.gz
# tar -xzf wazuh-filebeat-0.4.tar.gz -C /usr/share/filebeat/module/
# ls /usr/share/filebeat/module/wazuh/
alerts archives _meta module.yml
Скачаем и подключим шаблон индекса для Indexer:
# curl -so /etc/filebeat/wazuh-template.json \
https://raw.githubusercontent.com/wazuh/wazuh/v4.14.0/extensions/elasticsearch/7.x/wazuh-template.json
# chown root:root /etc/filebeat/wazuh-template.json
# chmod 400 /etc/filebeat/wazuh-template.json
Настроим filebeat.yml (полностью замените конфиг):
# nano /etc/filebeat/filebeat.yml
#============================== Security ====================================
seccomp.enabled: false # Только для установки в LXC
#============================== Wazuh module ===============================
filebeat.modules:
- module: wazuh
alerts:
enabled: true
#============================== Template ===================================
setup.template.json.enabled: true
setup.template.json.path: '/etc/filebeat/wazuh-template.json'
setup.template.json.name: 'wazuh'
setup.template.overwrite: true
setup.ilm.enabled: false
#============================== Dashboards =================================
setup.dashboards.enabled: false
#============================== Elasticsearch Output =======================
output.elasticsearch:
hosts: ["<IP-сервера>:9200"]
protocol: https
username: "admin"
password: "<ваш_пароль>"
ssl.certificate_authorities:
- /etc/filebeat/certs/root-ca.pem
ssl.certificate: "/etc/filebeat/certs/server.pem"
ssl.key: "/etc/filebeat/certs/server-key.pem"
#============================== Logging ====================================
logging.level: info
logging.to_files: true
logging.files:
path: /var/log/filebeat
name: filebeat
keepfiles: 7
permissions: 0640
- В конфиге нужно прописать правильный пароль и IP-адрес сервера.
- Опция
seccomp.enabled: falseважна только при установке в непривилегированный LXC.
Создадим каталог для логов:
# mkdir -p /var/log/filebeat
Протестируем конфигурацию и запустим службу:
# filebeat test config
# systemctl daemon-reload
# systemctl enable --now filebeat
# systemctl status filebeat
Загрузим шаблон в indexer:
# filebeat setup -e
⚠️ Важно: В конце выполнения команды вы, скорее всего, увидите ошибку вида error connecting to Kibana: fail to get the Kibana version или Kibana API is not available. Смело игнорируйте её. Главная задача команды - загрузка шаблона индекса. Сами дашборды Wazuh предустановлены и настраиваются автоматически вместе с пакетом wazuh-dashboard. Filebeat просто пытается выполнить стандартную процедуру для классического Elastic Stack, которая в архитектуре Wazuh не требуется.
Проверка после установки
Проверим все службы:
# systemctl status wazuh-manager
# systemctl status wazuh-indexer
# systemctl status wazuh-dashboard
# systemctl status filebeat
⚠️ Кстати, если служба wazuh-dashboard.service показывает подобные ошибки:
opensearch-dashboards[52554]: {"type":"log","@timestamp":"2026-08-24T18:56:23Z","tags":["error","opensearch","data"],"pid":52554,"message":"[ResponseError]: Response Error"}
Значит opensearch-dashboards не может подключиться к wazuh-indexer. Смотрим логи /var/log/wazuh-indexer/wazuh-cluster.log, и если видим ошибку подключения (Authentication finally failed) значит у нас проблема с паролем.
Дело в том что утилита wazuh-passwords-tool.sh генерирует сложные пароли со спецсимволами. А при вставке такого пароля в файл /etc/wazuh-dashboard/opensearch_dashboards.yml парсер ломается на спецсимволах. В этом случае задайте пароль вручную:
# /usr/share/wazuh-indexer/plugins/opensearch-security/tools/wazuh-passwords-tool.sh -u kibanaserver -p '<новый_пароль>'
- В файл
/etc/wazuh-dashboard/opensearch_dashboards.ymlвставьте новый пароль. - Перезапустите службу
wazuh-dashboard.service. - Перепроверьте статус службы и логи.
Проверим индексы:
# curl -k -u admin:<ваш_пароль> https://<YOUR_SERVER_IP>:9200/_cat/indices?v
Проверим алерты:
# tail -20 /var/ossec/logs/alerts/alerts.log
- Именно эти алерты через filebeat попадают в wazuh-indexer.
Откроем веб-интерфейс.

- После ввода логина и пароля запустятся различные проверки, они должны быть все пройдены.
В разделе Threat Hunting должны быть видны алерты.

Так как я устанавливаю Wazuh-сервер в LXC-контейнер на Proxmox, то дополнительно я добавляю исключение для rootcheck (нужно добавить строку в блок rootcheck):
# nano /var/ossec/etc/ossec.conf
<rootcheck>
<ignore>/dev/.lxc/proc/sysrq-trigger</ignore>
<ignore>/dev/.lxc-boot-id</ignore>
</rootcheck>
# systemctl restart wazuh-manager
Включение сбора логов по Syslog
Для того чтобы наш сервер начал принимать логи по протоколу syslog, добавим блок в файл /var/ossec/etc/ossec.conf:
# nano /var/ossec/etc/ossec.conf
<!-- Для внешних устройств без агента (syslog) -->
<remote>
<connection>syslog</connection>
<port>514</port>
<protocol>udp</protocol>
<allowed-ips>172.28.0.0/16</allowed-ips>
<allowed-ips>10.0.0.0/8</allowed-ips>
<allowed-ips>192.168.0.0/16</allowed-ips>
</remote>
- Замените подсети на те, что используются в вашей сети.
Перезапустим wazuh-manager:
# systemctl restart wazuh-manager
Проверим, что оба сборщика логов включены:
# ss -tulpn | grep -E '514|1514'
udp UNCONN 0 0 0.0.0.0:514 0.0.0.0:* users:(("wazuh-remoted",pid=52324,fd=4))
tcp LISTEN 0 128 0.0.0.0:1514 0.0.0.0:* users:(("wazuh-remoted",pid=52323,fd=4))
- tcp 1514 - подключаются агенты;
- udp 514 - подключается syslog с удалённых хостов.
Полезные команды на сервере
Список агентов:
# /var/ossec/bin/agent_control -l
Статистика алертов:
# curl -k -u admin:<ваш_пароль> "https://<ip_сервера>:9200/wazuh-alerts-*/_count"
Последние алерты:
# tail -f /var/ossec/logs/alerts/alerts.log
Логи filebeat:
# journalctl -u filebeat -f
Логи indexer:
# tail -f /var/log/wazuh-indexer/wazuh-cluster.log
Перезапустить всё:
# systemctl restart wazuh-manager wazuh-indexer wazuh-dashboard filebeat
Изменить пароль kibanaserver:
# /usr/share/wazuh-indexer/plugins/opensearch-security/tools/wazuh-passwords-tool.sh -u kibanaserver -p '<новый_пароль>'
- kibanaserver — служебный пользователь, через которого Wazuh Dashboard подключается к Indexer.
Если понравилась статья, подпишись на мой канал в VK или Telegram .