15 限制agent检查
概述
可以通过创建项目黑名单、白名单或白名单/黑名单的组合来限制agent的检查。
为此,请结合使用两个agent配置参数:
AllowKey=<pattern>
-允许哪些检查;<pattern>使用通配符(*)表达式指定DenyKey=<pattern>
-拒绝哪些检查;<pattern>使用通配符(*)表达式指定
请注意:
在默认情况下,全部
system.run[*]
项(远程命令、脚本)是禁用的,即使没有指定拒绝键;从Zabbix 5.0.2 agent参数EnableRemoteCommands:
deprecated Zabbix agent已经弃用
unsupported Zabbix agent2不支持
因此,要允许所有远程命令,请指定AllowKey=system.run[*]参数。(在Zabbix 5.0.2版本前,agent配置中还需要EnableRemoteCommands=1。)
要仅允许某些远程命令,请创建更具体的AllowKey[]参数的白名单。要禁止特定的远程命令,请在AllowKey=system.run[*]之前添加DenyKey参数。
重要规则
没有拒绝规则的白名单只允许system.run[*]项。对于所有其它项,如果没有DenyKey参数,则不允许使用AllowKey参数;在这种情况下,Zabbix agent将不会仅使用AllowKey参数启动。
顺序很重要。指定参数在配置文件中按其出现顺序逐一检查:
一旦项键与允许/拒绝规则匹配,该项即被允许或拒绝;并且规则检查停止。因此,如果一个项同时匹配允许规则和拒绝规则,那么结果将取决于哪个规则排在第一位。
顺序还影响EnableRemoteCommands参数(如果使用)。
支持无限数量的AllowKey/DenyKey参数。
AllowKey、DenyKey规则不影响HostnameItem、HostMetadataItem、HostInterfaceItem配置参数。
键模式是一个通配符表达式,其中通配符(*)与特定位置的任意数量的任意字符匹配。它可以用于关键字名称和参数。
如果在agent配置中不允许某个特定的项密钥,则该项将被报告为不受支持(没有给出有关原因的提示);
带有–print(-p)命令行选项的Zabbix agent将不显示配置不允许的密钥;
带有–test(-t)命令行选项的Zabbix agent将返回”Unsupported item key.”配置不允许的键的状态;
拒绝的远程命令不会记录在agent日志中(如果LogRemoteCommands=1)。
用例
拒绝特定检查
*黑名单一个特定的检查与DenyKey参数。不允许匹配密钥。除system.run[]项外,允许使用所有不匹配的密钥。
例如:
# 拒绝安全数据访问
DenyKey=vfs.file.contents[/etc/passwd,*]
黑名单可能不是一个好的选择,因为新的Zabbix版本可能具有不受现有配置明确限制的新密钥。这可能会导致安全漏洞。
拒绝特定命令,允许其它命令
- 使用DenyKey参数将特定命令列入黑名单。使用AllowKey参数白名单所有其它命令。
# 不允许特定命令
DenyKey=system.run[ls -l /]
# 允许其它脚本
AllowKey=system.run[*]
允许特定检查,拒绝其它检查
- 使用AllowKey参数的白名单特定检查,使用
DenyKey=*
拒绝其它检查
例如:
# 允许读取日志:
AllowKey=vfs.file.*[/var/log/*]
# 允许本地时间检查
AllowKey=system.localtime[*]
# 拒绝所有其它密钥
DenyKey=*
模式示例
模式 | 描述 | 匹配 | 不匹配 |
---|---|---|---|
匹配所有可能的带参数或不带参数的键。 | Any | None | |
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[/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[/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文件任何参数。 | 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 |
system.run 和 AllowKey
例如myscript.sh的脚本文件可以通过Zabbix agent在主机上以几种方式执行:
1. 作为被动或主动检查中的项目键,例如:
system.run[myscript.sh]
system.run[myscript.sh,wait]
system.run[myscript.sh.nowait]
在此,用户可以添加”wait”、”nowait”,或者省略第二个参数,在system.run[]中使用其默认值。
2. 作为全局脚本(由用户在前端或API中启动)。
用户在Administration→Scripts/中配置此脚本,设置“Execute on:Zabbix agent”并放置myscript.sh文件输入到脚本的“Commands”输入字段。从前端或API调用时,Zabbix server将发送到agent:
system.run[myscript.sh,wait] - 最高支持到Zabbix 5.0.4版本
system.run[myscript.sh] - 从5.0.5版本开始支持
在此,用户不控制”wait”/“nowait”参数。
3. 作为一个动作的远程命令。Zabbix server向agent发送:
- system.run[myscript.sh,nowait]
在此,用户同样不控制”wait”/“nowait”参数。
这意味着如果我们把AllowKey设置为:
AllowKey=system.run[myscript.sh]
则
system.run[myscript.sh]-将被允许
system.run[myscript.sh,wait], system.run[myscript.sh,nowait] 将不被允许-如果作为操作步骤调用,脚本将不会运行
要允许所有描述的变体,您可以添加:
AllowKey=system.run[myscript.sh,*]
DenyKey=system.run[*]
到agent/agent2参数。