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[]项外,允许使用所有不匹配的密钥。

例如:

  1. # 拒绝安全数据访问
  2. DenyKey=vfs.file.contents[/etc/passwd,*]

黑名单可能不是一个好的选择,因为新的Zabbix版本可能具有不受现有配置明确限制的新密钥。这可能会导致安全漏洞。

拒绝特定命令,允许其它命令
  • 使用DenyKey参数将特定命令列入黑名单。使用AllowKey参数白名单所有其它命令。
  1. # 不允许特定命令
  2. DenyKey=system.run[ls -l /]
  3. # 允许其它脚本
  4. AllowKey=system.run[*]
允许特定检查,拒绝其它检查
  • 使用AllowKey参数的白名单特定检查,使用DenyKey=*拒绝其它检查

例如:

  1. # 允许读取日志:
  2. AllowKey=vfs.file.*[/var/log/*]
  3. # 允许本地时间检查
  4. AllowKey=system.localtime[*]
  5. # 拒绝所有其它密钥
  6. DenyKey=*

模式示例

模式描述匹配不匹配
匹配所有可能的带参数或不带参数的键。AnyNone
vfs.file.contents匹配vfs.file.contents没有参数。vfs.file.contentsvfs.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中启动)。

用户在AdministrationScripts/中配置此脚本,设置“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设置为:

  1. AllowKey=system.run[myscript.sh]

  • system.run[myscript.sh]-将被允许

  • system.run[myscript.sh,wait], system.run[myscript.sh,nowait] 将不被允许-如果作为操作步骤调用,脚本将不会运行

要允许所有描述的变体,您可以添加:

  1. AllowKey=system.run[myscript.sh,*]
  2. DenyKey=system.run[*]

到agent/agent2参数。