# Wazuh через Puppet - управление конфигурацией

> Развертывание Wazuh 4.14 через Puppet - модуль wazuh-puppet, параметры классов, развертывание агентов, интеграция с Hiera и устранение проблем

Source: https://opennix.org/docs/wazuh/deployment/wazuh-puppet-deployment/


Модуль wazuh-puppet позволяет управлять установкой и конфигурацией всех компонентов Wazuh 4.14 через Puppet. Модуль предоставляет классы для менеджера, агента, индексатора и дашборда с поддержкой Hiera для централизованного управления параметрами.

## Предварительные требования

### Puppet-инфраструктура

- Puppet Server 7.x или 8.x
- Puppet Agent 7.x или 8.x на целевых узлах
- PuppetDB (рекомендуется для управления экспортированными ресурсами)
- r10k или Code Manager для управления модулями

### Целевые узлы

- 64-битная ОС из [списка поддерживаемых](/docs/wazuh/installation/)
- Доступ в интернет для загрузки пакетов (или [офлайн-репозиторий](/docs/wazuh/deployment/wazuh-offline-installation/))
- Открытые порты: 1514, 1515, 9200, 443, 55000

## Установка модуля

### Из Puppet Forge

```bash
puppet module install wazuh-wazuh
```

### Через Puppetfile (r10k)

Добавьте в `Puppetfile`:

```ruby
mod 'wazuh-wazuh',
  :git => 'https://github.com/wazuh/wazuh-puppet.git',
  :tag => 'v4.14.3'
```

Выполните развертывание:

```bash
r10k deploy environment production
```

### Зависимости модуля

Модуль wazuh-puppet зависит от следующих модулей:

| Модуль | Назначение |
|---|---|
| `puppetlabs-stdlib` | Стандартные функции и типы |
| `puppetlabs-apt` | Управление APT-репозиториями (Debian/Ubuntu) |
| `puppetlabs-concat` | Сборка конфигурационных файлов |
| `puppetlabs-firewall` | Управление правилами firewall (опционально) |

Установите зависимости:

```bash
puppet module install puppetlabs-stdlib
puppet module install puppetlabs-apt
puppet module install puppetlabs-concat
```

## Классы модуля

### Обзор классов

| Класс | Назначение |
|---|---|
| `wazuh::manager` | Установка и настройка Wazuh Manager |
| `wazuh::agent` | Установка и настройка Wazuh Agent |
| `wazuh::indexer` | Установка и настройка Wazuh Indexer |
| `wazuh::dashboard` | Установка и настройка Wazuh Dashboard |
| `wazuh::repo` | Настройка репозитория пакетов Wazuh |

## Развертывание менеджера

### Базовая конфигурация

```puppet
class { 'wazuh::manager':
  ossec_manager_config => {
    'global' => {
      'jsonout_output' => 'yes',
      'logall'         => 'no',
    },
    'cluster' => {
      'disabled'  => 'yes',
      'name'      => 'wazuh-cluster',
      'node_name' => 'manager-master',
      'node_type' => 'master',
      'key'       => 'MyClusterSecretKey',
    },
    'api' => {
      'bind_addr' => '0.0.0.0',
      'port'      => '55000',
    },
  },
  ossec_manager_authd => {
    'enabled'      => 'yes',
    'use_password' => 'no',
    'purge'        => 'no',
  },
}
```

### Конфигурация кластера менеджеров

Для мастер-узла:

```puppet
node 'manager-master.example.com' {
  class { 'wazuh::manager':
    ossec_manager_config => {
      'cluster' => {
        'disabled'  => 'no',
        'name'      => 'wazuh-cluster',
        'node_name' => 'manager-master',
        'node_type' => 'master',
        'key'       => 'MyClusterSecretKey',
        'port'      => '1516',
        'bind_addr' => '0.0.0.0',
        'nodes'     => ['manager-master.example.com'],
      },
    },
  }
}
```

Для worker-узла:

```puppet
node 'manager-worker.example.com' {
  class { 'wazuh::manager':
    ossec_manager_config => {
      'cluster' => {
        'disabled'  => 'no',
        'name'      => 'wazuh-cluster',
        'node_name' => 'manager-worker',
        'node_type' => 'worker',
        'key'       => 'MyClusterSecretKey',
        'port'      => '1516',
        'bind_addr' => '0.0.0.0',
        'nodes'     => ['manager-master.example.com'],
      },
    },
  }
}
```

## Развертывание агентов

### Базовое развертывание

```puppet
class { 'wazuh::agent':
  wazuh_manager_address => '192.168.1.20',
  agent_name            => $facts['hostname'],
  agent_group           => 'default',
  manage_repo           => true,
}
```

### Развертывание с авторизацией по паролю

```puppet
class { 'wazuh::agent':
  wazuh_manager_address       => '192.168.1.20',
  agent_name                  => $facts['hostname'],
  agent_group                 => 'linux-servers',
  ossec_agent_enrollment      => {
    'enabled'       => 'yes',
    'manager_address' => '192.168.1.20',
    'auth_password' => 'AgentEnrollmentPassword',
  },
}
```

### Массовое развертывание через site.pp

```puppet
node /^web-server-\d+\.example\.com$/ {
  class { 'wazuh::agent':
    wazuh_manager_address => '192.168.1.20',
    agent_group           => 'web-servers',
  }
}

node /^db-server-\d+\.example\.com$/ {
  class { 'wazuh::agent':
    wazuh_manager_address => '192.168.1.20',
    agent_group           => 'database-servers',
  }
}
```

## Параметры классов

### Параметры wazuh::manager

| Параметр | Тип | Описание | Значение по умолчанию |
|---|---|---|---|
| `ossec_manager_config` | Hash | Основная конфигурация ossec.conf | См. модуль |
| `ossec_manager_authd` | Hash | Настройки authd | `{'enabled' => 'yes'}` |
| `manage_repo` | Boolean | Управлять репозиторием пакетов | `true` |
| `manage_service` | Boolean | Управлять сервисом systemd | `true` |
| `service_ensure` | String | Состояние сервиса | `running` |
| `service_enable` | Boolean | Автозапуск сервиса | `true` |
| `manage_firewall` | Boolean | Управлять правилами firewall | `false` |

### Параметры wazuh::agent

| Параметр | Тип | Описание | Значение по умолчанию |
|---|---|---|---|
| `wazuh_manager_address` | String | Адрес менеджера | - |
| `agent_name` | String | Имя агента | `$facts['hostname']` |
| `agent_group` | String | Группа агента | `default` |
| `manage_repo` | Boolean | Управлять репозиторием | `true` |
| `manage_service` | Boolean | Управлять сервисом | `true` |
| `ossec_agent_enrollment` | Hash | Настройки автоматической регистрации | `{}` |
| `ossec_agent_config` | Hash | Конфигурация ossec.conf агента | См. модуль |

### Параметры wazuh::indexer

| Параметр | Тип | Описание | Значение по умолчанию |
|---|---|---|---|
| `indexer_cluster_name` | String | Имя кластера | `wazuh-cluster` |
| `indexer_node_name` | String | Имя узла | `wazuh-indexer-1` |
| `indexer_node_master` | Boolean | Роль master | `true` |
| `indexer_node_data` | Boolean | Роль data | `true` |
| `indexer_network_host` | String | Адрес привязки | `0.0.0.0` |
| `indexer_admin_password` | String | Пароль admin | `SecretPassword` |
| `indexer_jvm_xms` | String | JVM Heap min | `1g` |
| `indexer_jvm_xmx` | String | JVM Heap max | `1g` |

## Интеграция с Hiera

### Структура данных Hiera

Файл `data/common.yaml`:

```yaml
wazuh::manager::ossec_manager_config:
  global:
    jsonout_output: 'yes'
    logall: 'no'
  cluster:
    disabled: 'yes'
  api:
    bind_addr: '0.0.0.0'
    port: '55000'

wazuh::manager::ossec_manager_authd:
  enabled: 'yes'
  use_password: 'no'

wazuh::agent::wazuh_manager_address: '192.168.1.20'
wazuh::agent::agent_group: 'default'
wazuh::agent::manage_repo: true
```

### Переопределение по окружению

Файл `data/environments/production.yaml`:

```yaml
wazuh::manager::ossec_manager_config:
  cluster:
    disabled: 'no'
    name: 'prod-wazuh-cluster'
    key: '%{lookup("wazuh_cluster_key")}'

wazuh::indexer::indexer_admin_password: '%{lookup("wazuh_indexer_password")}'
```

### Переопределение по роли узла

Файл `data/roles/web-server.yaml`:

```yaml
wazuh::agent::agent_group: 'web-servers'
wazuh::agent::ossec_agent_config:
  syscheck:
    frequency: '43200'
    directories:
      - path: '/var/www'
        check_all: 'yes'
        realtime: 'yes'
```

### Секреты через Hiera eyaml

Для защиты паролей используйте hiera-eyaml:

```yaml
wazuh_cluster_key: >
  ENC[PKCS7,MIIBiQYJKoZIhvcNAQcDoIIBejCCAXYCAQAx...]
wazuh_indexer_password: >
  ENC[PKCS7,MIIBiQYJKoZIhvcNAQcDoIIBejCCAXYCAQAx...]
```

## Решение проблем

### Модуль не найден

**Симптомы:** ошибка `Could not find class wazuh::manager`.

**Решение:**

1. Проверьте установку модуля:

```bash
puppet module list | grep wazuh
```

2. Убедитесь, что `modulepath` в `puppet.conf` содержит каталог с модулем

3. При использовании r10k выполните повторное развертывание:

```bash
r10k deploy environment production -pv
```

### Агент не запускается после применения манифеста

**Симптомы:** Puppet отчитывается об успешном применении, но сервис wazuh-agent не запущен.

**Решение:**

1. Проверьте статус сервиса:

```bash
systemctl status wazuh-agent
```

2. Проверьте логи агента:

```bash
tail -50 /var/ossec/logs/ossec.log
```

3. Убедитесь, что `wazuh_manager_address` указывает на доступный менеджер

### Конфликт версий модулей

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

**Решение:**

1. Обновите зависимости:

```bash
puppet module install wazuh-wazuh --force
```

2. Проверьте совместимость версий в `metadata.json` модуля

3. При использовании Puppetfile зафиксируйте конкретные версии зависимостей

### Hiera-данные не применяются

**Симптомы:** параметры из Hiera игнорируются, применяются значения по умолчанию.

**Решение:**

1. Проверьте иерархию Hiera:

```bash
puppet lookup --explain wazuh::agent::wazuh_manager_address
```

2. Убедитесь, что `hiera.yaml` содержит корректные пути к файлам данных

3. Проверьте синтаксис YAML-файлов данных

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

- [Обзор вариантов развертывания](/docs/wazuh/deployment/)
- [Развертывание Wazuh через Ansible](/docs/wazuh/deployment/wazuh-ansible-deployment/)
- [Установка Wazuh](/docs/wazuh/installation/)
- [Официальный модуль wazuh-puppet](https://github.com/wazuh/wazuh-puppet)

