13 Controles van agenten beperken

Overzicht

Het is mogelijk om controles aan de agentzijde te beperken door een lijst met items op de zwarte lijst, een witte lijst, of een combinatie van beide te maken.

Gebruik daarvoor een combinatie van twee agent configuratie parameters:

  • AllowKey=<patroon> - welke controles zijn toegestaan; <patroon> wordt gespecificeerd met behulp van een wildcard (*) expressie.
  • DenyKey=<patroon> - welke controles zijn verboden; <patroon> wordt gespecificeerd met behulp van een wildcard (*) expressie.

Merk op dat:

  • Alle system.run[*] items (op afstand uitgevoerde commando's, scripts) standaard zijn uitgeschakeld, zelfs wanneer er geen verboden sleutels zijn gespecificeerd.
  • Sinds Zabbix 5.0.2 is de agentparameter EnableRemoteCommands:
    • Verouderd door de Zabbix-agent
    • Niet-ondersteund door Zabbix agent2

Daarom, om op afstand uitgevoerde commando's toe te staan, specificeert u een AllowKey=system.run[<commando>,*] voor elk toegestaan commando, waarbij * staat voor de wacht- en nowait-modus. Het is ook mogelijk om de AllowKey=system.run[*] parameter te specificeren om alle commando's met wacht- en nowait-modi toe te staan. Om specifieke op afstand uitgevoerde commando's te verbieden, voegt u DenyKey parameters toe met system.run[] commando's vóór de AllowKey=system.run[*] parameter.

Belangrijke regels

  • Een witte lijst zonder een verbodregel is alleen toegestaan voor system.run[*] items. Voor alle andere items zijn AllowKey parameters niet toegestaan zonder een DenyKey parameter; in dit geval start de Zabbix-agent niet met alleen AllowKey parameters.
  • De volgorde is belangrijk. De gespecificeerde parameters worden één voor één gecontroleerd volgens hun volgorde in het configuratiebestand:
    • Zodra een item sleutel overeenkomt met een toestaan/verbied regel, wordt het item ofwel toegestaan of verboden; en het controleren van de regels stopt. Als een item dus zowel overeenkomt met een toestaan-regel als een verbied-regel, is het resultaat afhankelijk van welke regel als eerste voorkomt.
    • De volgorde heeft ook invloed op de EnableRemoteCommands parameter (indien gebruikt).
  • Er worden een onbeperkt aantal AllowKey/DenyKey parameters ondersteund.
  • AllowKey, DenyKey regels hebben geen invloed op de HostnameItem, HostMetadataItem, HostInterfaceItem configuratieparameters.
  • Sleutelpatroon is een wildcard-expressie waarbij het wildcard (*) karakter overeenkomt met elk aantal willekeurige tekens op bepaalde posities. Het kan worden gebruikt in zowel de sleutelnaam als de parameters.
  • Als een specifieke itemsleutel wordt verboden in de agentconfiguratie, wordt het item als niet-ondersteund gerapporteerd (geen hint wordt gegeven over de reden).
  • Zabbix-agent met de --print (-p) command line optie zal sleutels die niet zijn toegestaan door de configuratie niet tonen.
  • Zabbix-agent met de --test (-t) command line optie zal een "Niet-ondersteunde itemsleutel." status retourneren voor sleutels die niet zijn toegestaan door de configuratie.
  • Geweigerde externe commando's worden niet gelogd in het agent logboek (indien LogRemoteCommands=1).

Gebruikscenario's

Specifieke controle verbieden
  • Plaats een specifieke controle op de zwarte lijst met de DenyKey parameter. Overeenkomende sleutels worden niet toegestaan. Alle niet-overeenkomende sleutels zullen worden toegestaan, behalve system.run[] items.

Bijvoorbeeld:

# Toegang tot beveiligde gegevens weigeren
       DenyKey=vfs.file.contents[/etc/passwd,*]

Een zwarte lijst kan mogelijk geen goede keuze zijn, omdat een nieuwe Zabbix-versie nieuwe sleutels kan hebben die niet expliciet beperkt zijn door de bestaande configuratie. Dit kan een beveiligingslek veroorzaken.

Specifiek commando weigeren, andere toestaan
  • Plaats een specifiek commando op de zwarte lijst met de DenyKey parameter. Plaats alle andere commando's op de witte lijst met de AllowKey parameter.
# Specifiek commando weigeren
       DenyKey=system.run[ls -l /]
        
       # Andere scripts toestaan
       AllowKey=system.run[*]
Specifieke controle toestaan, andere weigeren
  • Plaats specifieke controles op de witte lijst met behulp van de AllowKey parameters, weiger anderen met de DenyKey=* parameter.

Bijvoorbeeld:

# Logbestanden lezen toestaan:
       AllowKey=vfs.file.*[/var/log/*]
       
       # Lokale tijd controles toestaan
       AllowKey=system.localtime[*]
       
       # Alle andere sleutels weigeren
       DenyKey=*

Patroonvoorbeelden

Patroon Beschrijving Overeenkomsten Geen overeenkomst
* Komt overeen met alle mogelijke sleutels met of zonder parameters. Elk Geen
vfs.file.contents Komt overeen met vfs.file.contents zonder parameters. vfs.file.contents vfs.file.contents[/etc/passwd]
vfs.file.contents[] Komt overeen met vfs.file.contents met lege parameters. vfs.file.contents[] vfs.file.contents
vfs.file.contents[*] Komt overeen met vfs.file.contents met willekeurige parameters; komt niet overeen met vfs.file.contents zonder vierkante haken. vfs.file.contents[]
vfs.file.contents[/pad/naar/bestand]
vfs.file.contents
vfs.file.contents[/etc/passwd,*] Komt overeen met vfs.file.contents waarvan de eerste parameters overeenkomen met /etc/passwd en alle andere parameters een willekeurige waarde hebben (ook leeg). 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*] Komt overeen met vfs.file.contents waarvan de eerste parameter overeenkomt met *passwd* en geen andere parameters heeft. vfs.file.contents[/etc/passwd] vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd, utf8]
vfs.file.contents[*passwd*,*] Komt overeen met vfs.file.contents waarvan alleen de eerste parameter overeenkomt met *passwd* en alle volgende parameters een willekeurige waarde hebben (ook leeg). 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] Komt overeen met vfs.file.contents waarvan de eerste parameter overeenkomt met /var/log/zabbix_server.log, de derde parameter overeenkomt met 'abc' en een willekeurige (ook lege) tweede parameter heeft. 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] Komt overeen met vfs.file.contents waarvan de eerste parameter overeenkomt met /etc/passwd, de tweede parameter overeenkomt met 'utf8' en geen andere argumenten heeft. vfs.file.contents[/etc/passwd,utf8] vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd,utf16]
vfs.file.* Komt overeen met alle sleutels die beginnen met vfs.file. zonder enige parameters. vfs.file.contents
vfs.file.size
vfs.file.contents[]
vfs.file.size[/var/log/zabbix_server.log]
vfs.file.*[*] Komt overeen met alle sleutels die beginnen met vfs.file. met willekeurige parameters. vfs.file.size.bytes[]
vfs.file.size[/var/log/zabbix_server.log, utf8]
vfs.file.size.bytes
vfs.*.contents Komt overeen met alle sleutels die beginnen met vfs. en eindigen met .contents zonder enige parameters. vfs.mount.point.file.contents
vfs..contents
vfs.contents

system.run en AllowKey

Een hypothetisch script genaamd 'myscript.sh' kan op een host worden uitgevoerd via de Zabbix-agent op verschillende manieren:

  1. Als een item-sleutel in een passieve of actieve controle, bijvoorbeeld:

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

Hier kan de gebruiker "wait", "nowait" toevoegen of het tweede argument weglaten om de standaardwaarde te gebruiken in system.run[].

  1. Als een globaal script (geïnitieerd door de gebruiker in de frontend of API).

    Een gebruiker configureert dit script in AdministratieScripts, stelt "Uitvoeren op: Zabbix-agent" in en plaatst "myscript.sh" in het invoerveld "Opdrachten" van het script. Wanneer het vanuit de frontend of API wordt opgeroepen, stuurt de Zabbix-server naar de agent:

    • system.run[myscript.sh,wait] - tot Zabbix 5.0.4
    • system.run[myscript.sh] - vanaf 5.0.5

Hier controleert de gebruiker de "wait"/"nowait"-parameters niet.

  1. Als een externe opdracht vanuit een actie. De Zabbix-server stuurt naar de agent:

    • system.run[myscript.sh,nowait]

Hier controleert de gebruiker opnieuw de "wait"/"nowait"-parameters niet.

Wat dit betekent is dat als we AllowKey instellen als:

AllowKey=system.run[myscript.sh]

dan

  • system.run[myscript.sh] - is toegestaan
  • system.run[myscript.sh,wait], system.run[myscript.sh,nowait] worden niet toegestaan - het script wordt niet uitgevoerd als het wordt opgeroepen als een stap van een actie.

Om alle beschreven varianten toe te staan, kunt u het volgende toevoegen:

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

aan de agent/agent2 parameters.