Найти тему

Zabbix — мониторим изменение хэша файла

Оглавление

Иногда требуется следить за валидностью версии файла. Это может быть какой-то файл конфигурации или просто документ. В стандартных шаблонах операционной системы Linux есть некоторый подобный механизм, который, к примеру, определяет факт изменения файла /etc/password.

Вот что-то подобное сделаем и в домене Windows для сетевых шар.

Настройка агента

У нас будет сервер, на котором будет выполняться PowerShell скрипт, который будет ходить по сетевым папкам и смотреть, не изменился ли нужный нам файлик. На этом сервере настроим пользовательскую переменную, которую будем мониторить сервером Zabbix. У меня Zabbix 5.

Для начала напишем скрипт C:\zabbix\scripts\get_hash.ps1. Содержимое скрипта не просто простое, а очень простое:

Get-FileHash $args[0] -Algorithm $args[1] | Select-Object Hash | Where-Object {!($_.psiscontainer)} | foreach {$_.Hash}

В современных серверных ОС вам придётся подписать скрипт своим сертификатом.

Подписать PowerShell скрипт с помощью сертификата

Создаём файл конфигурации для пользовательской переменной userparameter_gethash.conf:

UserParameter=gethash.hash[*],powershell -NoProfile -ExecutionPolicy Bypass -File "C:\zabbix\scripts\get_hash.ps1" "$1" "$2"

Ну и запускаем заббикс агент от имени доменного пользователя, которому разрешён доступ к проверяемым файлам и который локальный администратор текущего сервера, чтобы ещё и сам сервер мониторить.

Настройка сервера

Напишем шаблон для мониторинга. Он у меня уже готов.

В шаблоне один элемент данных, у которого в препроцессинге можно настроить список файлов, которые нужно мониторить. Формат JSON:

var FilesList = {
"data": [
{
"{#NAME}": "SERVER 1 share TXT",
"{#FILEPATH}": "//server1.domain.local/public/test.txt",
"{#HASHALGORYTHM}": "MD5",
"{#VALIDHASH}": "198F3BCD41211373CADE66535627B4C0"
},
{
"{#NAME}": "SERVER 2 share DOCX",
"{#FILEPATH}": "//server2.domain.local/public/data.docx",
"{#HASHALGORYTHM}": "MD5",
"{#VALIDHASH}": "C004111F4994F88204FF2192C019F991"
}
] };
return JSON.stringify(FilesList)

Здесь:

  • NAME — название файла
  • FILEPATH — путь к файлу, локальный или сетевой
  • HASHALGORYTHM — алгоритм хэширования (SHA1, SHA256, SHA384, SHA512, MD5)
  • VALIDHASH — правильный хэш файла, собственно, если хэш будет другой, значит, файл кто-то изменил

Вот вам в помощь инструмент для определения хэша файла:

Windows 10 — вычислить хеш-сумму файла в командной строке

Хеш-суммы в контекстном меню Windows (MD2, MD4, MD5, SHA1, SHA256, SHA384, SHA512)

Дополнительно можно настроить макросы:

  • {$GETHASH_DISCOVERY_PERIOD} — как часто на низком уровне искать новые файлы, которые вы добавили в препроцессинге, по умолчанию 10 минут
  • {$GETHASH_HISTORY_PERIOD} — срок хранения истории, по умолчанию пол года
  • {$GETHASH_NODATA_PERIOD} — когда поднимать панику, если файла нет или хэш не определяется, по умолчанию 30 минут
  • {$GETHASH_REQUEST_PERIOD} — как часто мониторить хэш, по умолчанию 3 минуты

Триггер проверяет последние два значения хэша, если они оба отличаются, то срабатывает. Т.е. по умолчанию через 6 минут.

Привязываем шаблон к нашему хосту с агентом и радуемся ночным звонкам...

Источник:

Zabbix — мониторим изменение хэша файла | internet-lab.ru

💰 Поддержать проект

Если вам понравилась статья, то ставьте 👍🏻 каналу. Пишите комментарии, задавайте вопросы, подписывайтесь.