You are viewing documentation for the development version, it may be incomplete.
Join our translation project and help translate Zabbix documentation into your native language.

12 エージェントチェックの制限

概要

エージェント側でアイテムのブラックリスト、ホワイトリスト、またはホワイトリスト/ブラックリストの組み合わせを作成することで、チェックを制限することができます。

そのためには、2つのエージェント設定パラメータを組み合わせて使用します:

  • AllowKey=<pattern> - 許可するチェック; <pattern>はワイルドカード(*)式で指定
  • DenyKey=<pattern> - 拒否するチェック; <pattern>はワイルドカード(*)式で指定

注意点:

  • すべてのsystem.run[*]アイテム(リモートコマンド、スクリプト)はデフォルトで無効です。deny keyが指定されていない場合でも、DenyKey=system.run[*]が暗黙的に追加されていると考えてください。
  • Zabbix 5.0.2以降、EnableRemoteCommandsエージェントパラメータは:
    • Zabbix agentでは非推奨
    • Zabbix agent2ではサポートされていません

したがって、リモートコマンドを許可するには、許可する各コマンドに対してAllowKey=system.run[<command>,*]を指定します。*はwaitおよびnowaitモードを表します。また、AllowKey=system.run[*]パラメータを指定して、waitおよびnowaitモードのすべてのコマンドを許可することもできます。特定のリモートコマンドを許可しない場合は、AllowKey=system.run[*]パラメータの前にsystem.run[]コマンドを含むDenyKeyパラメータを追加します。

重要ルール

  • deny ルールのないホワイトリストは、system.run[ *] アイテムに対してのみ許可されます。その他のアイテムでは、 DenyKey パラメータがない場合、AllowKey パラメータを使用することはできません。
  • 順番は重要です。指定されたパラメータは、設定ファイル内の表示順に従って1つずつチェックされます:
    • item キーが allow / deny ルールに一致すると、item は許可または拒否され、ルールチェックは停止されます。 したがって、ある item が allow ルールと deny ルールの両方にマッチした場合、どちらのルールが先に来るかによって 結果が異なります。
    • この順序は、EnableRemoteCommands パラメータにも影響します。(使用する場合)
  • AllowKey / DenyKey パラメータは無制限に使用できます。
  • AllowKey、DenyKeyルールは、HostnameItem、HostMetadataItem、HostInterfaceItem 構成パラメータには影響しません。
  • キーパターンは、ワイルドカード (*) 文字が特定の位置にある任意の数の文字と一致するワイルドカード式です。 キー名とパラメーターの両方で使用することができます。
  • 特定の item キーが agent 構成で許可されていない場合、その item はサポートされていないと報告されます。 (理由のヒントは与えられません)。
  • Zabbix agent に --print (-p) コマンドラインオプションを指定すると、設定により許可されていないキーは表示されません。
  • Zabbix agent の--test(-t)コマンドラインオプションを使用すると、設定で許可されていないキーに対して "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=*で他のチェックを拒否する。

例:

# Allow reading logs:
       AllowKey=vfs.file.*[/var/log/*]
       
       # Allow localtime checks
       AllowKey=system.localtime[*]
       
       # Deny all other keys
       DenyKey=*
パスや引数にスペースを含むスクリプトの許可
  • スペースを含むパスにあるスクリプトをホワイトリストに登録し、引数の受け渡しも許可します。Windows では、パスを指定する際に ^ でスペースをエスケープしてください。

例:

# 引数の有無にかかわらず test.bat の実行を許可
       AllowKey=system.run["C:\Program^ Files\Zabbix^ Agent^ 2\scripts\test.bat*"]

テスト方法:

PS C:\Program Files\Zabbix Agent 2> .\zabbix_get.exe -s 127.0.0.1 -k system.run["C:\Program^ Files\Zabbix^ Agent^ 2\scripts\test.bat caret"]

この設定により、引数(caret など)の有無にかかわらずスクリプトの実行が許可され、スクリプトのパスにスペースが含まれていても system.run の実行が許可されます。

パターン例

パターン 説明 一致 不一致
* パラメータの有無にかかわらず、すべてのキーに一致します。 すべて なし
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,*] 最初のパラメータが/etc/passwdに一致し、他のすべてのパラメータが任意の値(空も含む)であるvfs.file.contentsに一致します。 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*] 最初のパラメータが*passwd*に一致し、他のパラメータがないvfs.file.contentsに一致します。 vfs.file.contents[/etc/passwd] vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd, utf8]
vfs.file.contents[*passwd*,*] 最初のパラメータが*passwd*に一致し、以降のすべてのパラメータが任意の値(空も含む)であるvfs.file.contentsに一致します。 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] 最初のパラメータが/var/log/zabbix_server.log、3番目のパラメータが'abc'、2番目のパラメータが任意(空も含む)であるvfs.file.contentsに一致します。 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] 最初のパラメータが/etc/passwd、2番目のパラメータが'utf8'で、他の引数がないvfs.file.contentsに一致します。 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

system.runとAllowKey

仮想的なスクリプト「myscript.sh」は、Zabbixエージェントを介してホスト上でいくつかの方法で実行できます。

1. パッシブまたはアクティブチェックのアイテムキーとして、例えば:

  • system.run[myscript.sh]
  • system.run[myscript.sh,wait]
  • system.run[myscript.sh,nowait]

ここでユーザーは「wait」や「nowait」を追加したり、第2引数を省略してsystem.run[]のデフォルト値を使用できます。

2. グローバルスクリプトとして(フロントエンドまたはAPIでユーザーが開始)。

ユーザーはこのスクリプトをアラートスクリプトで設定し、「実行先: Zabbix agent」を設定し、スクリプトの「コマンド」入力フィールドに「myscript.sh」を入力します。フロントエンドまたはAPIから呼び出されると、Zabbixサーバーはエージェントに以下を送信します:

  • system.run[myscript.sh,wait] - Zabbix 5.0.4まで
  • system.run[myscript.sh] - 5.0.5以降

ここではユーザーは「wait」/「nowait」パラメータを制御できません。

3. アクションからのリモートコマンドとして。Zabbixサーバーはエージェントに以下を送信します:

  • 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[*]

をエージェント/agent2のパラメータに追加します。