Массовое обновление Wazuh Agents 4.14: Linux, Proxmox и Windows
Практический опыт обновления 23 Wazuh Agent до 4.14.9, сценарий Bash с check/apply, контроль AD и обход ошибки PowerShell 2.0 на Windows Server 2008 R2.
Проверено на: Wazuh Manager 4.14.9 · AlmaLinux 9 · Proxmox VE · Windows Server 2022 · Windows Server 2008 R2 SP1
Контекст
После обновления Wazuh Manager до 4.14.9 обнаружилось 23 активных агента на версиях 4.14.7–4.14.8. Парк смешанный: Proxmox VE, Enterprise Linux 8/9, Windows Server 2022 и Windows Server 2008 R2. Задача — обновить их без повторной регистрации, сохранив работу мониторинга и критичных приложений.
Результат: 23 из 23 агентов обновлены до Wazuh 4.14.9. Большинство обновили удалённо через WPK. Один legacy Windows Server потребовал локальный MSI. Имена серверов, реальные IP, домены и секреты в публикации обезличены.
01 / Инвентаризация
На Wazuh Manager:
rpm -q wazuh-manager
systemctl is-active wazuh-manager wazuh-indexer wazuh-dashboard filebeat
/var/ossec/bin/agent_control -l
/var/ossec/bin/agent_upgrade -l
/var/ossec/bin/agent_control -i 101
Штатная команда обновления одного агента:
/var/ossec/bin/agent_upgrade -a 101 -v 4.14.9
Версию выбираем явно, не полагаемся на latest. --force не нужен. Для серверов с важными ролями выбираем последовательное обновление с подтверждением Active и правильной версии после каждого узла.
02 / Очередность работ
| Партия | Количество | Контроль |
|---|---|---|
| Пилот Enterprise Linux и Proxmox | 2 | Возврат Active и новой версии |
| Мониторинг и остальные Proxmox | 10 | Состояние узлов, Ceph/HA отдельно |
| Почта, телефония и приложения Linux | 5 | Прикладные health checks |
| Windows Server 2022 / RDS | 3 | WazuhSvc, состояние ОС |
| Два контроллера AD | 2 | repadmin, dcdiag, AD DS/DNS |
| Windows Server 2008 R2 | 1 | Отдельный MSI вместо WPK |
| Всего | 23 |
Для своей инфраструктуры адаптируйте порядок партий и окна обслуживания.
03 / Bash-автоматизация на GitHub
Подготовлен открытый набор файлов:
Реальный инвентарь с именами серверов хранится вне Git. В примере — вымышленные имена; колонки разделены табуляцией. У каждой записи ID, имя, платформа linux|windows и действие upgrade|skip.
install -d -m 700 /root/wazuh-upgrade
install -m 700 upgrade-agents.sh /root/wazuh-upgrade/upgrade-agents.sh
install -m 600 inventory.example.tsv /root/wazuh-upgrade/inventory.tsv
# Сначала отредактировать inventory.tsv и запустить проверку:
/root/wazuh-upgrade/upgrade-agents.sh --check \
--inventory /root/wazuh-upgrade/inventory.tsv --version 4.14.9
# В согласованное окно, после успешного preflight:
/root/wazuh-upgrade/upgrade-agents.sh --apply --yes \
--inventory /root/wazuh-upgrade/inventory.tsv --version 4.14.9
Скрипт проверяет точное имя и ID, Active, платформу, совместимость версий с Manager; актуальных агентов пропускает. Обновляет по одному, ожидает переподключения, останавливается при ошибке, ведёт журнал и блокирует параллельные запуски. Timeout процесса CLI не гарантирует отмены WPK-задания на агенте. При зависании нельзя вслепую перезапускать операцию.
04 / Терминальные Windows Server 2022
Перед обновлением проверили CBS, Windows Update и PendingFileRenameOperations:
$CBS = Test-Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending'
$WU = Test-Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired'
$Rename = (Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager' -Name PendingFileRenameOperations -ErrorAction SilentlyContinue).PendingFileRenameOperations
[pscustomobject]@{CBS=$CBS; WU=$WU; PendingRename=[bool]$Rename}
На проверенных серверах CBS и WU были False, но файловые операции ожидали перезагрузки преимущественно из-за обновлений браузеров. Записи реестра не удаляли. Три Windows Server 2022 обновились через WPK и вернулись в Active. Это не универсальное разрешение игнорировать pending reboot.
05 / Контроллеры домена — по одному
До и после обновления:
repadmin /replsummary
repadmin /showrepl dc02 /errorsonly
dcdiag /s:dc02 /test:Advertising /test:Replications /test:Services /q
Invoke-Command -ComputerName dc01,dc02 -ScriptBlock {
Get-Service NTDS,DNS,KDC,Netlogon,WazuhSvc | Select-Object Name,Status
}
Все ключевые службы работали, ошибок репликации не было. Обновили второй DC, проверили AD и Wazuh, затем первый. После операции repadmin показывал 0 ошибок, dcdiag /q не выдал замечаний по выбранным тестам.
06 / Windows Server 2008 R2: WPK и PowerShell 2.0
На последнем сервере агент 4.14.7 оставался Active, но попытка WPK до 4.14.9 зависла на Upgrading.... На Windows был PowerShell 2.0, а в do_upgrade.ps1 присутствовала команда:
$VERSION_JSON = Get-Content $JsonFile -Raw
Параметр -Raw недоступен в PowerShell 2.0; это проверили непосредственно на endpoint. В upgrade.log была ошибка Failed to extract version from JSON file VERSION.json. MSI ещё не был запущен. Поэтому WPK не повторяли и --force не использовали.
07 / Локальный MSI с сохранением регистрации
Перед операцией в защищённую резервную копию перенесли ossec.conf, client.keys, local_internal_options.conf и VERSION.json. client.keys содержит секрет регистрации, его нельзя публиковать. Проверили цифровую подпись Wazuh, Inc. на MSI, а также контрольные суммы пакетов.
На Windows Server 2008 R2 PowerShell 2.0 использовали отдельную переменную $MsiArguments (не автоматическую $args):
$MSI = 'C:\Wazuh-Upgrade\wazuh-agent-4.14.9-1.msi'
$Log = 'C:\Wazuh-Upgrade\install-4.14.9.log'
$MsiArguments = '/i "' + $MSI + '" /qn /norestart /L*v "' + $Log + '"'
$Process = Start-Process -FilePath "$env:windir\system32\msiexec.exe" -ArgumentList $MsiArguments -Wait -PassThru
Write-Host "MSI EXIT CODE: $($Process.ExitCode)"
MSI завершился с кодом 0, версия стала 4.14.9, но WazuhSvc остался остановленным. После Start-Service WazuhSvc агент снова подключился к Manager со старым ID и запустил FIM. Лишь после подтверждённого восстановления устаревший маркер upgrade_in_progress архивировали.
Windows Server 2008 R2 давно находится вне поддержки; обновление Wazuh Agent не заменяет миграцию ОС.
08 / Финальная проверка
/var/ossec/bin/agent_control -l
/var/ossec/bin/agent_upgrade -l
systemctl is-active wazuh-manager wazuh-indexer wazuh-dashboard filebeat
All agents are updated.
23/23 remote agents: 4.14.9
Manager / Indexer / Dashboard / Filebeat: active
Статус Active не заменяет проверок качества поступающих событий, здоровья приложений, Ceph/HA и AD DS.
Исходный код: scripts/wazuh-agent-upgrade.