# Настройка Wazuh Dashboard - конфигурация и модули

> Полное руководство по настройке Wazuh Dashboard 4.14 - opensearch_dashboards.yml, wazuh.yml, модули, визуализации, отчеты, мультитенантность, SSO и брендинг

Source: https://opennix.org/docs/wazuh/infrastructure/wazuh-dashboard-configuration/


Wazuh Dashboard - веб-интерфейс платформы, построенный на базе OpenSearch Dashboards. Через него аналитики работают с алертами безопасности, просматривают уязвимости, отслеживают состояние агентов и формируют отчеты. Правильная настройка Dashboard определяет удобство повседневной работы с SIEM - от скорости загрузки страниц до доступности нужных модулей и корректной работы SSO. В этом руководстве рассмотрены ключевые конфигурационные файлы, встроенные модули, создание кастомных визуализаций и решение типовых проблем.

## Конфигурация opensearch_dashboards.yml

Основной файл конфигурации OpenSearch Dashboards расположен по пути `/etc/wazuh-dashboard/opensearch_dashboards.yml`. Он определяет сетевые настройки, подключение к Indexer и параметры TLS.

### Ключевые параметры

```yaml
# Сетевой интерфейс для прослушивания
# 0.0.0.0 - все интерфейсы, 127.0.0.1 - только localhost
server.host: 0.0.0.0

# Порт веб-интерфейса (по умолчанию 443)
server.port: 443

# Адреса узлов Wazuh Indexer
opensearch.hosts:
  - https://192.168.1.10:9200
  - https://192.168.1.11:9200

# Учетные данные для подключения к Indexer
opensearch.username: kibanaserver
opensearch.password: <KIBANASERVER_PASSWORD>

# TLS-сертификаты для Dashboard
server.ssl.enabled: true
server.ssl.certificate: /etc/wazuh-dashboard/certs/dashboard.pem
server.ssl.key: /etc/wazuh-dashboard/certs/dashboard-key.pem

# Корневой сертификат CA для проверки Indexer
opensearch.ssl.certificateAuthorities:
  - /etc/wazuh-dashboard/certs/root-ca.pem

# Проверка сертификата Indexer
opensearch.ssl.verificationMode: full

# Базовый путь (при использовании reverse proxy)
# server.basePath: "/wazuh"
# server.rewriteBasePath: true

# Логирование
logging.dest: /var/log/wazuh-dashboard/opensearch-dashboards.log
logging.verbose: false
```

### Настройка для кластера Indexer

При наличии нескольких узлов Indexer укажите все адреса в `opensearch.hosts`. Dashboard будет автоматически распределять запросы между узлами:

```yaml
opensearch.hosts:
  - https://indexer-node1:9200
  - https://indexer-node2:9200
  - https://indexer-node3:9200
```

### Таймауты подключения

```yaml
# Таймаут подключения к Indexer (мс)
opensearch.requestTimeout: 30000

# Таймаут пинга для проверки доступности
opensearch.pingTimeout: 30000

# Интервал проверки состояния кластера
opensearch.healthCheck.delay: 2500
```

## Конфигурация Wazuh Plugin (wazuh.yml)

Файл `/usr/share/wazuh-dashboard/data/wazuh/config/wazuh.yml` содержит настройки плагина Wazuh для Dashboard.

### Подключение к Wazuh API

```yaml
hosts:
  - production:
      url: https://192.168.1.5
      port: 55000
      username: wazuh-wui
      password: <WUI_PASSWORD>
      run_as: false

  - staging:
      url: https://10.0.0.5
      port: 55000
      username: wazuh-wui
      password: <WUI_PASSWORD>
      run_as: false
```

При настройке нескольких хостов API пользователь может переключаться между ними в интерфейсе Dashboard через меню Management - API Configuration.

### Параметры мониторинга

```yaml
# Мониторинг статусов агентов
wazuh.monitoring.enabled: true
wazuh.monitoring.frequency: 900
wazuh.monitoring.pattern: wazuh-monitoring-*
wazuh.monitoring.creation: w

# Проверка состояния при загрузке
checks.pattern: true
checks.template: true
checks.api: true
checks.setup: true
checks.fields: true
```

### Параметры индексных паттернов

```yaml
# Паттерн алертов по умолчанию
pattern: wazuh-alerts-*

# Индекс по умолчанию для Wazuh
# Используется при создании визуализаций
ip.selector: true
ip.ignore:
  - wazuh-monitoring-*
  - wazuh-statistics-*
```

## Модули Dashboard

Wazuh Dashboard включает специализированные модули для различных аспектов мониторинга безопасности.

### Security Events

Центральный модуль для работы с алертами. Предоставляет:

- Временная шкала алертов с фильтрацией по уровню, группе, агенту
- Детальный просмотр каждого алерта с декодированными полями
- Экспорт в CSV для внешнего анализа
- Поиск с использованием WQL (Wazuh Query Language)

Фильтрация WQL поддерживает следующий синтаксис:

```
rule.level > 10 AND agent.name = "web-server-01"
rule.groups : "authentication" AND NOT rule.level < 5
data.srcip : "192.168.*"
```

### Integrity Monitoring (FIM)

Отслеживание изменений файловой системы:

- Добавленные, измененные и удаленные файлы
- Изменения разрешений и владельцев
- Diff - сравнение содержимого до и после изменения
- Фильтрация по агенту, пути, типу события

### Vulnerabilities

Управление уязвимостями на конечных точках:

- Список обнаруженных CVE с указанием критичности (CVSS)
- Фильтрация по агенту, пакету, критичности
- Связь с базами NVD и vendor-specific advisory
- Статистика по количеству уязвимостей на агент

### Regulatory Compliance

Маппинг алертов на требования стандартов:

- PCI DSS - требования стандарта индустрии платежных карт
- HIPAA - стандарт защиты медицинских данных
- NIST 800-53 - каталог контролей безопасности
- GDPR - европейский регламент защиты персональных данных
- TSC (SOC 2) - критерии Trust Services

Каждый стандарт имеет отдельные дашборды с маппингом алертов на конкретные контроли.

### Security Configuration Assessment (SCA)

Аудит конфигурации систем:

- Результаты проверок по CIS Benchmarks
- Статус каждой проверки: passed, failed, not applicable
- Процент соответствия по каждому профилю
- Подробное описание каждого контроля с рекомендациями

### Agents

Управление и мониторинг агентов:

- Список агентов со статусами (Active, Disconnected, Never connected, Pending)
- Детальная информация по каждому агенту: ОС, версия, группы, IP
- Инвентаризация: пакеты, процессы, порты, сетевые интерфейсы
- История подключений

### Management

Административные функции:

- Управление правилами и декодерами
- Управление группами агентов
- Конфигурация CDB-списков
- Настройка API-подключений
- Логи менеджера
- Статистика и кластер

## Кастомные дашборды и визуализации

### Создание индексного паттерна

Перед созданием визуализаций необходимо настроить индексный паттерн:

1. Перейдите в OpenSearch Dashboards - Stack Management - Index Patterns
2. Нажмите Create index pattern
3. Введите паттерн: `wazuh-alerts-*`
4. Выберите поле времени: `timestamp`
5. Нажмите Create index pattern

### Создание визуализации

1. Перейдите в OpenSearch Dashboards - Visualize
2. Выберите тип визуализации (Area, Bar, Pie, Line, Data Table, Metric, Gauge)
3. Выберите индексный паттерн `wazuh-alerts-*`
4. Настройте агрегации и метрики

Пример конфигурации для круговой диаграммы топ-10 правил:

- Metric: Count
- Buckets - Split Slices: Terms, field: `rule.description.keyword`, size: 10
- Сохраните визуализацию

### Создание дашборда

1. Перейдите в OpenSearch Dashboards - Dashboard
2. Нажмите Create new dashboard
3. Добавьте визуализации через Add panel
4. Настройте расположение и размер панелей
5. Сохраните дашборд

### Saved Objects

Визуализации и дашборды хранятся как Saved Objects. Для экспорта и импорта:

1. Перейдите в Stack Management - Saved Objects
2. Выберите объекты для экспорта
3. Нажмите Export - будет создан NDJSON-файл
4. Для импорта используйте кнопку Import и загрузите NDJSON

Экспортированные объекты можно версионировать в Git и развертывать на других инстансах Dashboard.

## Отчеты (Reporting)

### Генерация PDF/CSV

Wazuh Dashboard поддерживает создание отчетов в формате PDF и CSV:

1. Откройте нужный модуль (Security Events, Vulnerabilities и др.)
2. Настройте фильтры и временной диапазон
3. Нажмите Generate report в правом верхнем углу
4. Выберите формат: PDF или CSV
5. Отчет будет доступен в разделе Management - Reporting

### Параметры отчетов

Отчеты включают:

- Заголовок с временным диапазоном и примененными фильтрами
- Таблицы алертов с ключевыми полями
- Графики и визуализации из текущего представления
- Общую статистику по модулю

### Автоматические отчеты

Для настройки периодической генерации отчетов используйте Reporting plugin OpenSearch Dashboards:

1. Перейдите в OpenSearch Dashboards - Reporting
2. Нажмите Create report definition
3. Настройте:
   - Report source: Dashboard или Visualization
   - Формат: PDF или CSV
   - Schedule: cron-выражение (например, `0 8 * * 1` - каждый понедельник в 8:00)
4. Опционально настройте получателей через Notification channels

## Мультитенантность

Мультитенантность позволяет изолировать дашборды, визуализации и индексные паттерны для разных команд или подразделений.

### Включение мультитенантности

В файле `/etc/wazuh-indexer/opensearch-security/config.yml`:

```yaml
config:
  dynamic:
    kibana:
      multitenancy_enabled: true
      server_username: kibanaserver
      index: .kibana
```

### Создание тенантов

Через OpenSearch Dashboards Security plugin:

1. Перейдите в Security - Tenants
2. Нажмите Create tenant
3. Укажите имя и описание

Через API:

```bash
curl -sk -u admin:$PASSWORD \
  -XPUT "https://localhost:9200/_plugins/_security/api/tenants/soc-team" \
  -H "Content-Type: application/json" \
  -d '{ "description": "SOC team workspace" }'
```

### Назначение тенантов ролям

```bash
curl -sk -u admin:$PASSWORD \
  -XPUT "https://localhost:9200/_plugins/_security/api/rolesmapping/soc_analyst" \
  -H "Content-Type: application/json" \
  -d '{
    "backend_roles": ["soc-analysts"],
    "hosts": [],
    "users": ["analyst1", "analyst2"],
    "and_backend_roles": []
  }'
```

### Переключение между тенантами

Пользователь может переключать тенант через меню пользователя в правом верхнем углу Dashboard - Switch Tenants. Каждый тенант содержит свой набор дашбордов и визуализаций.

## Кастомный брендинг

### Логотип и заголовок

В файле `opensearch_dashboards.yml`:

```yaml
# Логотип на странице входа
opensearch_dashboards.branding.logo.defaultUrl: "/ui/custom-logo.svg"

# Логотип в боковой панели
opensearch_dashboards.branding.mark.defaultUrl: "/ui/custom-mark.svg"

# Заголовок приложения
opensearch_dashboards.branding.applicationTitle: "Security Operations Center"

# Экран загрузки
opensearch_dashboards.branding.loadingLogo.defaultUrl: "/ui/custom-loading.svg"

# Иконка favicon
opensearch_dashboards.branding.faviconUrl: "/ui/custom-favicon.ico"
```

### Размещение файлов

Файлы логотипов размещаются в директории `/usr/share/wazuh-dashboard/plugins/wazuh/public/assets/` или указываются как URL внешнего ресурса.

### Кастомный футер

Для добавления кастомного текста в подвал страницы отредактируйте шаблон Dashboard или используйте CSS-инъекцию через `opensearch_dashboards.yml`:

```yaml
opensearch_dashboards.branding.useExpandedHeader: false
```

## Интеграция SSO (SAML/OIDC)

### SAML-аутентификация

Конфигурация в `/etc/wazuh-indexer/opensearch-security/config.yml`:

```yaml
config:
  dynamic:
    authc:
      saml_auth_domain:
        http_enabled: true
        transport_enabled: false
        order: 1
        http_authenticator:
          type: saml
          challenge: true
          config:
            idp:
              metadata_url: "https://idp.example.com/metadata"
              entity_id: "urn:example:idp"
            sp:
              entity_id: "https://wazuh-dashboard.example.com"
            kibana_url: "https://wazuh-dashboard.example.com"
            subject_key: "NameID"
            roles_key: "Role"
            exchange_key: "<32_CHAR_SECRET>"
        authentication_backend:
          type: noop
```

В `opensearch_dashboards.yml` добавьте:

```yaml
opensearch_security.auth.type: "saml"
server.xsrf.allowlist:
  - "/_opendistro/_security/saml/acs"
  - "/_opendistro/_security/saml/acs/idpinitiated"
  - "/_opendistro/_security/saml/logout"
```

### OIDC-аутентификация

```yaml
config:
  dynamic:
    authc:
      oidc_auth_domain:
        http_enabled: true
        transport_enabled: false
        order: 1
        http_authenticator:
          type: openid
          challenge: false
          config:
            openid_connect_url: "https://idp.example.com/.well-known/openid-configuration"
            subject_key: "preferred_username"
            roles_key: "roles"
        authentication_backend:
          type: noop
```

В `opensearch_dashboards.yml`:

```yaml
opensearch_security.auth.type: "openid"
opensearch_security.openid.connect_url: "https://idp.example.com/.well-known/openid-configuration"
opensearch_security.openid.client_id: "wazuh-dashboard"
opensearch_security.openid.client_secret: "<CLIENT_SECRET>"
```

### Применение конфигурации SSO

После изменения `config.yml` необходимо применить настройки:

```bash
cd /usr/share/wazuh-indexer/plugins/opensearch-security/tools/
./securityadmin.sh \
  -f /etc/wazuh-indexer/opensearch-security/config.yml \
  -icl -nhnv \
  -cacert /etc/wazuh-indexer/certs/root-ca.pem \
  -cert /etc/wazuh-indexer/certs/admin.pem \
  -key /etc/wazuh-indexer/certs/admin-key.pem \
  -h localhost
```

## Устранение неполадок

### Пустая страница после входа

Причины и решения:

1. **Некорректный сертификат**: проверьте, что `server.ssl.certificate` и `server.ssl.key` указывают на действительные файлы
2. **Нет подключения к Indexer**: проверьте `opensearch.hosts` и доступность порта 9200
3. **Поврежденный индекс .kibana**: удалите и позвольте Dashboard пересоздать его

```bash
# Проверка состояния Dashboard
systemctl status wazuh-dashboard

# Просмотр логов
tail -100 /var/log/wazuh-dashboard/opensearch-dashboards.log

# Проверка подключения к Indexer
curl -sk -u kibanaserver:$PASSWORD "https://localhost:9200/_cluster/health"
```

### Wazuh API not reachable

**Симптом**: ошибка "Wazuh API not reachable" в модулях Dashboard.

Диагностика:

```bash
# Проверка доступности API
curl -sk -u wazuh-wui:$PASSWORD \
  -X POST "https://localhost:55000/security/user/authenticate?raw=true"

# Проверка конфигурации wazuh.yml
cat /usr/share/wazuh-dashboard/data/wazuh/config/wazuh.yml
```

Решения:

- Убедитесь, что IP и порт в `wazuh.yml` соответствуют реальному адресу Wazuh Manager
- Проверьте учетные данные `wazuh-wui`
- Убедитесь, что порт 55000 открыт между Dashboard и Manager
- При использовании HTTPS проверьте сертификаты

### Ошибки плагина Wazuh

**Симптом**: модули Wazuh не отображаются или показывают ошибки.

```bash
# Проверка установленных плагинов
/usr/share/wazuh-dashboard/bin/opensearch-dashboards-plugin list

# Переустановка плагина Wazuh
/usr/share/wazuh-dashboard/bin/opensearch-dashboards-plugin remove wazuh
/usr/share/wazuh-dashboard/bin/opensearch-dashboards-plugin install \
  https://packages.wazuh.com/4.x/ui/dashboard/wazuh-4.14.4-1.zip

# Перезапуск Dashboard
systemctl restart wazuh-dashboard
```

### Проблемы с производительностью

- Увеличьте `node.options` память: `--max-old-space-size=2048` в `/etc/wazuh-dashboard/node.options`
- Уменьшите частоту мониторинга в `wazuh.yml`: `wazuh.monitoring.frequency: 3600`
- Отключите ненужные проверки при загрузке

### Сброс пароля администратора

```bash
# Генерация хеша нового пароля
/usr/share/wazuh-indexer/plugins/opensearch-security/tools/hash.sh

# Обновление internal_users.yml
# Применение изменений
cd /usr/share/wazuh-indexer/plugins/opensearch-security/tools/
./securityadmin.sh \
  -f /etc/wazuh-indexer/opensearch-security/internal_users.yml \
  -icl -nhnv \
  -cacert /etc/wazuh-indexer/certs/root-ca.pem \
  -cert /etc/wazuh-indexer/certs/admin.pem \
  -key /etc/wazuh-indexer/certs/admin-key.pem \
  -h localhost
```

## Дополнительные материалы

- [Установка Wazuh Dashboard](/docs/wazuh/installation/wazuh-dashboard-installation/) - развертывание Dashboard
- [Wazuh Indexer API](/docs/wazuh/infrastructure/wazuh-indexer-api/) - работа с данными через API
- [Управление агентами](/docs/wazuh/infrastructure/wazuh-agent-management/) - регистрация и конфигурация агентов
- [Архитектура Wazuh](/docs/wazuh/getting-started/wazuh-architecture/) - обзор компонентов платформы

