12 Einschränken von Agent-Prüfungen

Übersicht

Sie können steuern, welche Datenpunktschlüssel der Zabbix Agent oder Agent 2 bei der Ausführung von Datenpunkt-Prüfungen, Remote-Befehlen oder Skripten verwenden darf oder verweigert.

Verwenden Sie dazu diese Parameter der Agent-Konfiguration, um Zulassungs-/Verweigerungsregeln zu definieren:

  • AllowKey=<pattern>
  • DenyKey=<pattern>

Das <pattern> muss genau einen Datenpunktschlüssel enthalten und unterstützt Platzhalter (*). Der Platzhalter entspricht an seiner Position einer beliebigen Anzahl beliebiger Zeichen und kann verwendet werden, um Datenpunktschlüssel oder Parameter abzugleichen (z. B. vfs.file.*[*]).

Zur Verbesserung der Sicherheit wird empfohlen, exakte Datenpunktschlüssel anstelle von Platzhaltern zu verwenden. Weitere Informationen finden Sie unter Absichern von Zulassungs-/Verweigerungsregeln.

Im Gegensatz zu anderen Parametern der Agent-Konfiguration können Sie eine unbegrenzte Anzahl von AllowKey- oder DenyKey-Parametern angeben.

Wichtige Hinweise

  • Alle system.run-Datenpunkte sind standardmäßig deaktiviert (auch wenn DenyKey leer ist), als wäre DenyKey=system.run[*] als letzte Regel gesetzt. Daher können Sie bestimmte system.run-Datenpunkte erlauben, ohne andere system.run-Datenpunkte ausdrücklich zu verbieten.

  • Ein in AllowKey angegebener Datenpunkt muss auch in DenyKey angegeben werden (außer bei system.run-Datenpunkten); andernfalls startet der Zabbix Agent nicht.

  • Verwenden Sie nach Möglichkeit AllowKey, um nur die erforderlichen Datenpunkte zu erlauben und alles andere zu verbieten. Einige Schlüssel können missbraucht werden, um über Path Traversal unbeabsichtigte Dateien zu lesen (z. B. vfs.file.contents["../../../../etc/passwd"]), und neue Versionen des Zabbix Agent können Schlüssel einführen, die nicht durch Ihre DenyKey-Regeln abgedeckt sind.

  • Die Konfiguration von AllowKey und DenyKey wirkt sich nicht auf die Agent-Parameter HostnameItem, HostMetadataItem oder HostInterfaceItem aus.

  • Verbotene Datenpunkte werden ohne Hinweise oder Fehlermeldungen nicht unterstützt; zum Beispiel:

    • Der Befehlszeilenparameter --print (-p) des Zabbix Agent zeigt keine verbotenen Datenpunktschlüssel an.
    • Der Befehlszeilenparameter --test (-t) des Zabbix Agent gibt für verbotene Datenpunktschlüssel "Unsupported item key." zurück.
    • Wenn die Protokollierung aktiviert ist (LogRemoteCommands=1), protokolliert die Logdatei des Zabbix Agent keine verbotenen Remote-Befehle.

Reihenfolge von Allow-/Deny-Regeln

Sie können eine unbegrenzte Anzahl von AllowKey- oder DenyKey-Regeln angeben, wobei ihre Reihenfolge wichtig ist.

  • Regeln werden nacheinander von oben nach unten ausgewertet.
  • Wenn ein Datenpunktschlüssel mit einer Regel übereinstimmt, wird er entweder zugelassen oder verweigert, und die Regelauswertung wird beendet.

Zum Beispiel werden bei der Auswertung von vfs.file.contents[/etc/passwd] die Regeln wie folgt verarbeitet:

AllowKey=vfs.file.contents[/tmp/app.log]    # Das Muster des Datenpunktschlüssels stimmt nicht überein, Agent fährt mit der nächsten Regel fort.
AllowKey=vfs.file.contents[/etc/passwd]     # Das Muster des Datenpunktschlüssels stimmt überein; Agent erlaubt die Datenpunktprüfung und beendet die Regelauswertung.
DenyKey=vfs.file.*[*]                       # Agent ignoriert die Regel, da die Auswertung bereits beendet wurde.

Die folgende Reihenfolge der Regeln verweigert die Datenpunktprüfung:

DenyKey=vfs.file.*[*]                       # Das Muster des Datenpunktschlüssels stimmt überein; Agent verweigert die Datenpunktprüfung und beendet die Regelauswertung.
AllowKey=vfs.file.contents[/etc/passwd]     # Agent ignoriert die Regel, da die Auswertung bereits beendet wurde.
AllowKey=vfs.file.contents[/tmp/app.log]    # Agent ignoriert die Regel, da die Auswertung bereits beendet wurde.

Beispiele

Die folgenden Beispiele zeigen gängige Konfigurationsmuster für AllowKey und DenyKey.

Zulassen bestimmter Prüfungen und Befehle

Erlauben Sie nur zwei vfs.file-Datenpunkt-Prüfungen und zwei system.run-Befehle:

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

Die Einstellung DenyKey=system.run[*] ist nicht erforderlich, da alle anderen system.run-Befehle standardmäßig verweigert werden.

Ausführen von Skripten erlauben

Erlauben Sie dem Zabbix Agent, Skripte auf Hosts über alle verfügbaren Methoden auszuführen:

  • Globale Skripte, die im Frontend oder über die API ausgeführt werden können (diese Methode verwendet immer den Schlüssel system.run[myscript.sh])
  • Remote-Befehle aus Aktionsoperationen (diese Methode verwendet immer den Schlüssel system.run[myscript.sh,nowait])
  • system.run-Zabbix-Agent-Datenpunkte mit dem Skript, zum Beispiel:
    • system.run[myscript.sh]
    • system.run[myscript.sh,wait]
    • system.run[myscript.sh,nowait]
AllowKey=system.run[myscript.sh,*]

Um den Parameter wait/nowait zu steuern, müssen Sie eine andere Regel festlegen. Sie können zum Beispiel nur system.run[myscript.sh,wait]-Datenpunkte erlauben und dadurch andere Methoden ausschließen:

AllowKey=system.run[myscript.sh,wait]
Absichern von Allow-/Deny-Regeln

Dieses Beispiel zeigt, wie sich zu großzügige AllowKey- oder DenyKey-Regeln absichern lassen.

Betrachten Sie die folgenden Regeln:

AllowKey=system.run["C:\Program^ Files\Zabbix^ Agent^ 2\scripts\test.bat*"]
DenyKey=vfs.file.*
DenyKey=system.cpu.load[*]

Unter Windows müssen Leerzeichen im Pfad mit einem Caret-Zeichen (^) maskiert werden.

Diese Regeln enthalten ein Platzhalterzeichen (*), das missbraucht werden kann:

  • Das Skript test.bat kann mit beliebigen Argumenten ausgeführt werden, auch mit unbeabsichtigten.
  • Das Muster vfs.file.* entspricht nur Datenpunkt-Schlüsseln ohne Parameter; allerdings erfordern alle vfs.file-Datenpunkte Parameter.
  • Das Muster system.cpu.load[*] entspricht nur Datenpunkt-Schlüsseln mit Parametern; allerdings benötigen system.cpu.load-Datenpunkte keine Parameter.

Um diese Regeln abzusichern, erlauben Sie die Ausführung von test.bat explizit nur mit bestimmten Argumenten und verweigern Sie die korrekten Datenpunkt-Schlüsselmuster; zum Beispiel:

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

Sie können die Regeln testen, indem Sie die folgenden Befehle ausführen; diese geben ZBX_NOTSUPPORTED zurück.

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]
Musterbeispiele

Die folgende Tabelle zeigt, wie Datenpunktschlüssel-Muster abgeglichen werden:

  • Ein Schlüssel entspricht dem Muster nur, wenn er alle Bedingungen in der Spalte Entspricht erfüllt.
  • Parameter müssen vollständig in eckige Klammern eingeschlossen sein (z. B. sind vfs.file.contents[* und vfs.file.contents*utf8] ungültige Muster).
Muster Entspricht Beispiele
* Beliebiger Schlüssel mit oder ohne Parameter
vfs.file.* Schlüssel beginnt mit vfs.file.
Keine Parameter
Entspricht:
vfs.file.size
vfs.file.contents

Entspricht nicht:
vfs.file.contents[]
vfs.file.size[/var/log/app.log]
vfs.*.contents Schlüssel beginnt mit vfs.
Schlüssel endet mit .contents
Keine Parameter
Entspricht:
vfs..contents
vfs.mount.point.file.contents

Entspricht nicht:
vfs.contents
vfs.file.contents[]
vfs.file.*[*] Schlüssel beginnt mit vfs.file.
Beliebige oder leere Parameter
Entspricht:
vfs.file.get.custom[]
vfs.file.size[/var/log/app.log, utf8]

Entspricht nicht:
vfs.file.get.custom
vfs.file.contents Schlüssel ist vfs.file.contents
Keine Parameter
Entspricht:
vfs.file.contents

Entspricht nicht:
vfs.file.contents[/etc/passwd]
vfs.file.contents[] Schlüssel ist vfs.file.contents[]
Leere Parameter
Entspricht:
vfs.file.contents[]

Entspricht nicht:
vfs.file.contents
vfs.file.contents[*] Schlüssel ist vfs.file.contents
Beliebige oder leere Parameter
Entspricht:
vfs.file.contents[/path/to/file]

Entspricht nicht:
vfs.file.contents
vfs.file.contents[/etc/passwd,*] Schlüssel ist vfs.file.contents
Erster Parameter ist /etc/passwd
Beliebiger oder leerer zweiter Parameter
Entspricht:
vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd,utf8]

Entspricht nicht:
vfs.file.contents[]
vfs.file.contents[/etc/passwd]
vfs.file.contents[*passwd*] Schlüssel ist vfs.file.contents
Erster Parameter enthält passwd
Kein zweiter Parameter
Entspricht:
vfs.file.contents[/etc/passwd]

Entspricht nicht:
vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd,utf8]
vfs.file.contents[*passwd*,*] Schlüssel ist vfs.file.contents
Erster Parameter enthält passwd
Beliebiger oder leerer zweiter Parameter
Entspricht:
vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd,utf8]

Entspricht nicht:
vfs.file.contents[/etc/passwd]
vfs.file.contents[/tmp/test]
vfs.file.contents[/etc/passwd,utf8] Schlüssel ist vfs.file.contents
Erster Parameter ist /etc/passwd
Zweiter Parameter ist utf8
Entspricht:
vfs.file.contents[/etc/passwd,utf8]

Entspricht nicht:
vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd,utf16]