12 Ограничение проверок агента
Обзор
Вы можете управлять тем, какие ключи элементов данных Zabbix агент или агент 2 может использовать или не использовать при выполнении проверок элементов данных, удалённых команд или скриптов.
Для этого используйте следующие параметры конфигурации агента для определения правил разрешения/запрета:
AllowKey=<pattern>DenyKey=<pattern>
<pattern> должен содержать один ключ элемента данных и поддерживает подстановочные знаки (*).
Подстановочный знак соответствует любому количеству любых символов в своей позиции и может использоваться для сопоставления ключей элементов данных или параметров (например, vfs.file.*[*]).
Для повышения безопасности рекомендуется использовать точные ключи элементов данных вместо подстановочных знаков. Подробнее см. в разделе Защита правил разрешения/запрета.
В отличие от других параметров конфигурации агента, вы можете указать неограниченное количество параметров AllowKey или DenyKey.
Важные примечания
-
Все элементы данных
system.runпо умолчанию отключены (даже еслиDenyKeyпуст), как если быDenyKey=system.run[*]был задан как последнее правило. Благодаря этому вы можете разрешить определённые элементы данныхsystem.run, не запрещая явно другие элементы данныхsystem.run. -
Элемент данных, указанный в
AllowKey, также должен быть указан вDenyKey(кроме элементов данныхsystem.run); в противном случае агент Zabbix не запустится. -
По возможности используйте
AllowKey, чтобы разрешить только необходимые элементы данных и запретить всё остальное. Некоторые ключи могут использоваться для чтения непредусмотренных файлов через обход пути (например,vfs.file.contents["../../../../etc/passwd"]), а новые версии агента Zabbix могут вводить ключи, не охваченные вашими правиламиDenyKey. -
Конфигурация
AllowKeyиDenyKeyне влияет на параметры агентаHostnameItem,HostMetadataItemилиHostInterfaceItem. -
Запрещённые элементы данных становятся неподдерживаемыми без каких-либо подсказок или сообщений об ошибках; например:
- Параметр командной строки агента Zabbix
--print (-p)не будет показывать ключи запрещённых элементов данных. - Параметр командной строки агента Zabbix
--test (-t)будет возвращать "Unsupported item key." для ключей запрещённых элементов данных. - Когда ведение журнала включено (
LogRemoteCommands=1), файл журнала агента Zabbix не будет регистрировать запрещённые удалённые команды.
- Параметр командной строки агента Zabbix
Порядок правил Allow/deny
Вы можете указать неограниченное количество правил AllowKey или DenyKey, однако их порядок имеет значение.
- Правила проверяются по одному, сверху вниз.
- Когда ключ элемента данных соответствует правилу, он либо разрешается, либо запрещается, и проверка правил останавливается.
Например, при проверке vfs.file.contents[/etc/passwd] правила обрабатываются следующим образом:
AllowKey=vfs.file.contents[/tmp/app.log] # Шаблон ключа элемента данных не совпадает, агент переходит к следующему правилу.
AllowKey=vfs.file.contents[/etc/passwd] # Шаблон ключа элемента данных совпадает; агент разрешает проверку элемента данных и останавливает проверку правил.
DenyKey=vfs.file.*[*] # Агент игнорирует правило, так как проверка уже остановлена.
Следующий порядок правил запретит проверку элемента данных:
DenyKey=vfs.file.*[*] # Шаблон ключа элемента данных совпадает; агент запрещает проверку элемента данных и останавливает проверку правил.
AllowKey=vfs.file.contents[/etc/passwd] # Агент игнорирует правило, так как проверка уже остановлена.
AllowKey=vfs.file.contents[/tmp/app.log] # Агент игнорирует правило, так как проверка уже остановлена.
Примеры
Следующие примеры показывают распространённые шаблоны конфигурации для AllowKey и DenyKey.
Разрешение определённых проверок и команд
Разрешите только две проверки элементов данных vfs.file и две команды system.run:
AllowKey=vfs.file.contents[/tmp/app.log]
AllowKey=vfs.file.size[/tmp/app.log]
AllowKey=system.run[/usr/bin/uptime]
AllowKey=system.run[/usr/bin/df -h /]
DenyKey=vfs.file.*[*]
Указывать DenyKey=system.run[*] не требуется, поскольку все остальные команды system.run по умолчанию запрещены.
Разрешение скриптов
Разрешите агенту Zabbix выполнять скрипты на узлах сети всеми доступными способами:
- Глобальные скрипты, которые можно выполнять в веб-интерфейсе или через API (этот метод всегда использует ключ
system.run[myscript.sh]) - Удаленные команды из операций действий (этот метод всегда использует ключ
system.run[myscript.sh,nowait]) - Элементы данных агента Zabbix
system.runсо скриптом, например:system.run[myscript.sh]system.run[myscript.sh,wait]system.run[myscript.sh,nowait]
AllowKey=system.run[myscript.sh,*]
Чтобы управлять параметром wait/nowait, необходимо задать другое правило.
Например, можно разрешить только элементы данных system.run[myscript.sh,wait], исключив таким образом другие методы:
AllowKey=system.run[myscript.sh,wait]
Защита правил allow/deny
В этом примере показано, как защитить чрезмерно разрешающие правила AllowKey или DenyKey.
Рассмотрим следующие правила:
AllowKey=system.run["C:\Program^ Files\Zabbix^ Agent^ 2\scripts\test.bat*"]
DenyKey=vfs.file.*
DenyKey=system.cpu.load[*]
В Windows необходимо экранировать пробелы в пути с помощью символа каретки (^).
Эти правила содержат подстановочный знак (*), которым можно злоупотребить:
- Скрипт
test.batможно выполнить с любыми аргументами, включая непредусмотренные. - Шаблон
vfs.file.*соответствует только ключам элементов данных без параметров; однако все элементы данныхvfs.fileтребуют параметры. - Шаблон
system.cpu.load[*]соответствует только ключам элементов данных с параметрами; однако элементы данныхsystem.cpu.loadне требуют параметров.
Чтобы защитить эти правила, явно разрешите выполнение test.bat только с определёнными аргументами и запретите корректные шаблоны ключей элементов данных; например:
AllowKey=system.run["C:\Program^ Files\Zabbix^ Agent^ 2\scripts\test.bat status"]
AllowKey=system.run["C:\Program^ Files\Zabbix^ Agent^ 2\scripts\test.bat version"]
DenyKey=vfs.file.*[*]
DenyKey=system.cpu.load
DenyKey=system.cpu.load[*]
Вы можете проверить правила, выполнив следующие команды, которые вернут ZBX_NOTSUPPORTED.
cd "C:\Program Files\Zabbix Agent 2"
zabbix_agent2.exe -t system.run["C:\Program^ Files\Zabbix^ Agent^ 2\scripts\test.bat debug"]
zabbix_agent2.exe -t vfs.file.size["C:\ProgramData\MyApp\config.ini"]
zabbix_agent2.exe -t vfs.file.contents["C:\Windows\System32\drivers\etc\hosts"]
zabbix_agent2.exe -t system.cpu.load
zabbix_agent2.exe -t system.cpu.load[all,avg1]
Примеры шаблонов
В следующей таблице показано, как сопоставляются шаблоны ключей элементов данных:
- Ключ соответствует шаблону только в том случае, если он удовлетворяет всем условиям в столбце Соответствует.
- Параметры должны быть полностью заключены в квадратные скобки (например,
vfs.file.contents[*иvfs.file.contents*utf8]— недопустимые шаблоны).
| Шаблон | Соответствует | Примеры |
|---|---|---|
* |
Любой ключ с параметрами или без них | |
vfs.file.* |
Ключ начинается с vfs.file.Без параметров |
Соответствует:vfs.file.sizevfs.file.contentsНе соответствует: vfs.file.contents[]vfs.file.size[/var/log/app.log] |
vfs.*.contents |
Ключ начинается с vfs.Ключ заканчивается на .contentsБез параметров |
Соответствует: vfs..contentsvfs.mount.point.file.contentsНе соответствует: vfs.contentsvfs.file.contents[] |
vfs.file.*[*] |
Ключ начинается с vfs.file.Любые или пустые параметры |
Соответствуетvfs.file.get.custom[]vfs.file.size[/var/log/app.log, utf8]Не соответствует: vfs.file.get.custom |
vfs.file.contents |
Ключ — vfs.file.contentsБез параметров |
Соответствует:vfs.file.contentsНе соответствует: vfs.file.contents[/etc/passwd] |
vfs.file.contents[] |
Ключ — vfs.file.contents[]Пустые параметры |
Соответствует:vfs.file.contents[]Не соответствует: vfs.file.contents |
vfs.file.contents[*] |
Ключ — vfs.file.contentsЛюбые или пустые параметры |
Соответствует:vfs.file.contents[/path/to/file]Не соответствует: vfs.file.contents |
vfs.file.contents[/etc/passwd,*] |
Ключ — vfs.file.contentsПервый параметр — /etc/passwdЛюбой или пустой второй параметр |
Соответствует:vfs.file.contents[/etc/passwd,]vfs.file.contents[/etc/passwd,utf8]Не соответствует: vfs.file.contents[]vfs.file.contents[/etc/passwd] |
vfs.file.contents[*passwd*] |
Ключ — vfs.file.contentsПервый параметр содержит passwdБез второго параметра |
Соответствует:vfs.file.contents[/etc/passwd]Не соответствует: vfs.file.contents[/etc/passwd,]vfs.file.contents[/etc/passwd,utf8] |
vfs.file.contents[*passwd*,*] |
Ключ — vfs.file.contentsПервый параметр содержит passwdЛюбой или пустой второй параметр |
Соответствует:vfs.file.contents[/etc/passwd,]vfs.file.contents[/etc/passwd,utf8]Не соответствует: vfs.file.contents[/etc/passwd]vfs.file.contents[/tmp/test] |
vfs.file.contents[/etc/passwd,utf8] |
Ключ — vfs.file.contentsПервый параметр — /etc/passwdВторой параметр — utf8 |
Соответствует:vfs.file.contents[/etc/passwd,utf8]Не соответствует: vfs.file.contents[/etc/passwd,]vfs.file.contents[/etc/passwd,utf16] |