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 для управления модулями

Целевые узлы

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

Из 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_configHashОсновная конфигурация ossec.confСм. модуль
ossec_manager_authdHashНастройки authd{'enabled' => 'yes'}
manage_repoBooleanУправлять репозиторием пакетовtrue
manage_serviceBooleanУправлять сервисом systemdtrue
service_ensureStringСостояние сервисаrunning
service_enableBooleanАвтозапуск сервисаtrue
manage_firewallBooleanУправлять правилами firewallfalse

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

ПараметрТипОписаниеЗначение по умолчанию
wazuh_manager_addressStringАдрес менеджера-
agent_nameStringИмя агента$facts['hostname']
agent_groupStringГруппа агентаdefault
manage_repoBooleanУправлять репозиториемtrue
manage_serviceBooleanУправлять сервисомtrue
ossec_agent_enrollmentHashНастройки автоматической регистрации{}
ossec_agent_configHashКонфигурация ossec.conf агентаСм. модуль

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

ПараметрТипОписаниеЗначение по умолчанию
indexer_cluster_nameStringИмя кластераwazuh-cluster
indexer_node_nameStringИмя узлаwazuh-indexer-1
indexer_node_masterBooleanРоль mastertrue
indexer_node_dataBooleanРоль datatrue
indexer_network_hostStringАдрес привязки0.0.0.0
indexer_admin_passwordStringПароль adminSecretPassword
indexer_jvm_xmsStringJVM Heap min1g
indexer_jvm_xmxStringJVM Heap max1g

Интеграция с 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.

Решение:

  1. Проверьте установку модуля:
puppet module list | grep wazuh
  1. Убедитесь, что modulepath в puppet.conf содержит каталог с модулем

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

r10k deploy environment production -pv

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

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

Решение:

  1. Проверьте статус сервиса:
systemctl status wazuh-agent
  1. Проверьте логи агента:
tail -50 /var/ossec/logs/ossec.log
  1. Убедитесь, что wazuh_manager_address указывает на доступный менеджер

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

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

Решение:

  1. Обновите зависимости:
puppet module install wazuh-wazuh --force
  1. Проверьте совместимость версий в metadata.json модуля

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

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

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

Решение:

  1. Проверьте иерархию Hiera:
puppet lookup --explain wazuh::agent::wazuh_manager_address
  1. Убедитесь, что hiera.yaml содержит корректные пути к файлам данных

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

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

Last updated on