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 wennDenyKeyleer ist), als wäreDenyKey=system.run[*]als letzte Regel gesetzt. Daher können Sie bestimmtesystem.run-Datenpunkte erlauben, ohne anderesystem.run-Datenpunkte ausdrücklich zu verbieten. -
Ein in
AllowKeyangegebener Datenpunkt muss auch inDenyKeyangegeben werden (außer beisystem.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 IhreDenyKey-Regeln abgedeckt sind. -
Die Konfiguration von
AllowKeyundDenyKeywirkt sich nicht auf die Agent-ParameterHostnameItem,HostMetadataItemoderHostInterfaceItemaus. -
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.
- Der Befehlszeilenparameter
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.batkann mit beliebigen Argumenten ausgeführt werden, auch mit unbeabsichtigten. - Das Muster
vfs.file.*entspricht nur Datenpunkt-Schlüsseln ohne Parameter; allerdings erfordern allevfs.file-Datenpunkte Parameter. - Das Muster
system.cpu.load[*]entspricht nur Datenpunkt-Schlüsseln mit Parametern; allerdings benötigensystem.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[*undvfs.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.sizevfs.file.contentsEntspricht nicht: vfs.file.contents[]vfs.file.size[/var/log/app.log] |
vfs.*.contents |
Schlüssel beginnt mit vfs.Schlüssel endet mit .contentsKeine Parameter |
Entspricht:vfs..contentsvfs.mount.point.file.contentsEntspricht nicht: vfs.contentsvfs.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.contentsKeine Parameter |
Entspricht:vfs.file.contentsEntspricht 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.contentsBeliebige 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.contentsErster Parameter ist /etc/passwdBeliebiger 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.contentsErster Parameter enthält passwdKein 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.contentsErster Parameter enthält passwdBeliebiger 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.contentsErster Parameter ist /etc/passwdZweiter Parameter ist utf8 |
Entspricht:vfs.file.contents[/etc/passwd,utf8]Entspricht nicht: vfs.file.contents[/etc/passwd,]vfs.file.contents[/etc/passwd,utf16] |