Wazuh через Puppet - управление конфигурацией
Модуль 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-битная ОС из списка поддерживаемых
- Доступ в интернет для загрузки пакетов (или офлайн-репозиторий )
- Открытые порты: 1514, 1515, 9200, 443, 55000
Установка модуля
Из Puppet Forge
puppet module install wazuh-wazuhЧерез Puppetfile (r10k)
Добавьте в Puppetfile:
mod 'wazuh-wazuh',
:git => 'https://github.com/wazuh/wazuh-puppet.git',
:tag => 'v4.14.3'Выполните развертывание:
r10k deploy environment productionЗависимости модуля
Модуль wazuh-puppet зависит от следующих модулей:
| Модуль | Назначение |
|---|---|
puppetlabs-stdlib | Стандартные функции и типы |
puppetlabs-apt | Управление APT-репозиториями (Debian/Ubuntu) |
puppetlabs-concat | Сборка конфигурационных файлов |
puppetlabs-firewall | Управление правилами firewall (опционально) |
Установите зависимости:
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 |
Развертывание менеджера
Базовая конфигурация
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',
},
}Конфигурация кластера менеджеров
Для мастер-узла:
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-узла:
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'],
},
},
}
}Развертывание агентов
Базовое развертывание
class { 'wazuh::agent':
wazuh_manager_address => '192.168.1.20',
agent_name => $facts['hostname'],
agent_group => 'default',
manage_repo => true,
}Развертывание с авторизацией по паролю
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
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:
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:
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:
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:
wazuh_cluster_key: >
ENC[PKCS7,MIIBiQYJKoZIhvcNAQcDoIIBejCCAXYCAQAx...]
wazuh_indexer_password: >
ENC[PKCS7,MIIBiQYJKoZIhvcNAQcDoIIBejCCAXYCAQAx...]Решение проблем
Модуль не найден
Симптомы: ошибка Could not find class wazuh::manager.
Решение:
- Проверьте установку модуля:
puppet module list | grep wazuhУбедитесь, что
modulepathвpuppet.confсодержит каталог с модулемПри использовании r10k выполните повторное развертывание:
r10k deploy environment production -pvАгент не запускается после применения манифеста
Симптомы: Puppet отчитывается об успешном применении, но сервис wazuh-agent не запущен.
Решение:
- Проверьте статус сервиса:
systemctl status wazuh-agent- Проверьте логи агента:
tail -50 /var/ossec/logs/ossec.log- Убедитесь, что
wazuh_manager_addressуказывает на доступный менеджер
Конфликт версий модулей
Симптомы: ошибки зависимостей при установке модуля.
Решение:
- Обновите зависимости:
puppet module install wazuh-wazuh --forceПроверьте совместимость версий в
metadata.jsonмодуляПри использовании Puppetfile зафиксируйте конкретные версии зависимостей
Hiera-данные не применяются
Симптомы: параметры из Hiera игнорируются, применяются значения по умолчанию.
Решение:
- Проверьте иерархию Hiera:
puppet lookup --explain wazuh::agent::wazuh_manager_addressУбедитесь, что
hiera.yamlсодержит корректные пути к файлам данныхПроверьте синтаксис YAML-файлов данных