12 Ограничавање провера агената
Преглед
Могуће је ограничити провере на страни агента креирањем ставке црне листе, беле листе или комбинације беле листе/црне листе.
Да бисте то урадили, користите комбинацију два параметра агента configuration:
AllowKey=<pattern>- које провере су дозвољене; <pattern> је наведено помоћу израза са џокерима (*)DenyKey=<pattern>- које провере су одбијене; <pattern> је наведено помоћу израза са џокерима (*)
Имајте на уму да:
- Све ставке system.run[*] (даљинске команде, скрипте) су подразумевано онемогућене, чак и када нису наведени кључеви за одбијање, треба претпоставити да је DenyKey=system.run[*] имплицитно додато.
- Од Zabbix-а 5.0.2, параметар агента EnableRemoteCommands је:
- застарео од стране Zabbix агента
- није подржан од стране Zabbix агента2
Стога, да бисте дозволили удаљене команде, наведите AllowKey=system.run[<command>,*] за сваку дозвољену команду, * означава режим чекања и без чекања. Такође је могуће навести параметар AllowKey=system.run[*] да бисте дозволили све команде са режимима чекања и без чекања. Да бисте онемогућили одређене удаљене команде, додајте параметре DenyKey са командама system.run[] пре параметра AllowKey=system.run[*].
Важна правила
- Бела листа без правила забрањивања је дозвољена само за ставке system.run[*] За све остале ставке, параметри AllowKey нису дозвољени без параметра DenyKey; у овом случају Zabbix агент неће почети само са параметрима AllowKey.
- Редослед је важан. Наведени параметри се проверавају један по један према редоследу њиховог појављивања у конфигурационој датотеци:
- Чим се кључ ставке подудара са правилом дозвољавања/забрањивања, ставка је или дозвољена или забрањена; и провера правила се зауставља. Дакле, ако се ставка подудара и са правилом дозвољавања и са правилом забрањивања, резултат ће зависити од тога које правило долази прво.
- Редослед утиче и на параметар EnableRemoteCommands (ако се користи).
- Подржан је неограничен број параметара AllowKey/DenyKey.
- Правила AllowKey, DenyKey не утичу на параметре конфигурације HostnameItem, HostMetadataItem, HostInterfaceItem.
- Кључни образац је израз џокера где џокер (*) одговара било ком броју било којих знакова на одређеној позицији. Може се користити и у називу кључа и у параметрима.
- Ако је одређени кључ ставке забрањен у конфигурацији агента, ставка ће бити пријављена као неподржана (нема назнаке о разлогу);
- Zabbix агент са опцијом командне линије --print (-p) неће приказивати кључеве који нису дозвољени конфигурацијом;
- Zabbix агент са опцијом командне линије --test (-t) ће вратити статус "Неподржани кључ ставке." за кључеве који нису дозвољени конфигурацијом;
- Одбијене удаљене команде неће бити евидентиране у дневнику агента (ако је LogRemoteCommands=1).
Allow/deny rule order
You can specify an unlimited number of AllowKey or DenyKey rules, though their order matters.
- Rules are evaluated one by one, from top to bottom.
- When an item key matches a rule, it is either allowed or denied, and rule evaluation stops.
For example, when evaluating vfs.file.contents[/etc/passwd], the rules are processed as follows:
AllowKey=vfs.file.contents[/tmp/app.log] # Item key pattern does not match, agent proceeds to the next rule.
AllowKey=vfs.file.contents[/etc/passwd] # Item key pattern matches; agent allows the item check and stops rule evaluation.
DenyKey=vfs.file.*[*] # Agent ignores the rule, as the evaluation has stopped.
The following rule order will deny the item check:
DenyKey=vfs.file.*[*] # Item key pattern matches; agent denies the item check and stops rule evaluation.
AllowKey=vfs.file.contents[/etc/passwd] # Agent ignores the rule, as the evaluation has stopped.
AllowKey=vfs.file.contents[/tmp/app.log] # Agent ignores the rule, as the evaluation has stopped.
Случајеви употребе
Allowing specific checks and commands
Allow only two vfs.file item checks and two system.run commands:
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.*[*]
Setting DenyKey=system.run[*] is unnecessary, because all other system.run commands are denied by default.
Allowing scripts
Allow Zabbix agent to execute scripts on hosts via all available methods:
- Global scripts that can be executed in the frontend or via API (this method always uses the
system.run[myscript.sh]key) - Remote commands from action operations (this method always uses the
system.run[myscript.sh,nowait]key) system.runZabbix agent items with the script, for example:system.run[myscript.sh]system.run[myscript.sh,wait]system.run[myscript.sh,nowait]
AllowKey=system.run[myscript.sh,*]
To control the wait/nowait parameter, you must set a different rule.
For example, you can allow only system.run[myscript.sh,wait] items, thus excluding other methods:
AllowKey=system.run[myscript.sh,wait]
Securing allow/deny rules
This example shows how to secure overly permissive AllowKey or DenyKey rules.
Consider the following rules:
AllowKey=system.run["C:\Program^ Files\Zabbix^ Agent^ 2\scripts\test.bat*"]
DenyKey=vfs.file.*
DenyKey=system.cpu.load[*]
On Windows, you must escape spaces in the path using a caret (^).
These rules contain a wildcard (*), which can be misused:
- The
test.batscript can be executed with any arguments, including unintended ones. - The
vfs.file.*pattern matches only item keys without parameters; however, allvfs.fileitems require parameters. - The
system.cpu.load[*]pattern matches only item keys with parameters; howeversystem.cpu.loaditems do not require parameters.
To secure these rules, explicitly allow executing test.bat only with specific arguments, and deny correct item key patterns; for example:
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[*]
You can test the rules by running the following commands, which will return 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]
Примери шаблона
| Pattern | Description | Matches | No match |
|---|---|---|---|
| * | Подудара се са свим могућим кључевима са или без параметара. | Било који | Ниједан |
| 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 без угластих заграда. |
vfs.file.contents[] vfs.file.contents[/путања/до/датотеке] |
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[/etc/passwd] vfs.file.contents[/var/log/zabbix_server.log] vfs.file.contents[] |
| 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[/var/log/zabbix_server.log,*,abc] | Подудара се са vfs.file.contents где први параметр одговара /var/log/zabbix_server.log, трећи параметр одговара 'abc' и било који (такође празан) други параметр. |
vfs.file.contents[/var/log/zabbix_server.log,,abc] vfs.file.contents[/var/log/zabbix_server.log,utf8,abc] |
vfs.file.contents[/var/log/zabbix_server.log,,abc,def] |
| 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] |
| vfs.file.* | Подудара се са било којим кључевима који почињу са vfs.file. без икаквих параметара. |
vfs.file.contents vfs.file.size |
vfs.file.contents[] vfs.file.size[/var/log/zabbix_server.log] |
| vfs.file.*[*] | Подудара се са било којим кључем који почиње са vfs.file. са било којим параметрима. |
vfs.file.size.bytes[] vfs.file.size[/var/log/zabbix_server.log, utf8] |
vfs.file.size.bytes |
| vfs.*.contents | Подудара се са било којим кључем који почиње са vfs. и завршава се са .contents без икаквих параметара. |
vfs.mount.point.file.contents vfs..contents |
vfs.contents |