12 Beperken van agent controles

Overzicht

Het is mogelijk om controles aan de kant van de agent te beperken door een lijst met items te maken die zijn toegestaan (whitelist), een lijst met items die zijn verboden (blacklist), of een combinatie van een whitelist en een blacklist.

Gebruik hiervoor een combinatie van twee agent configuratie parameters:

  • AllowKey=<patroon> - geeft aan welke controles zijn toegestaan; <patroon> wordt opgegeven met een wildcard (*) expressie
  • DenyKey=<patroon> - geeft aan welke controles zijn verboden; <patroon> wordt opgegeven met een wildcard (*) expressie

Houd er rekening mee dat:

  • Alle system.run[*] items (externe commando's, scripts) standaard zijn uitgeschakeld. Zelfs als er geen deny keys zijn opgegeven, moet ervan worden uitgegaan dat DenyKey=system.run[*] impliciet wordt toegevoegd.
  • Sinds Zabbix 5.0.2 is de EnableRemoteCommands agent parameter:
    • verouderd door de Zabbix-agent
    • niet-ondersteund door de Zabbix-agent2

Daarom moet u om externe commando's toe te staan AllowKey=system.run[<commando>,*] opgeven voor elk toegestaan commando, waarbij * staat voor de wacht- en nuwachtmodus. Het is ook mogelijk om de AllowKey=system.run[*] parameter op te geven om alle commando's met wacht- en nuwachtmodi toe te staan. Om specifieke externe commando's te verbieden, voegt u DenyKey parameters toe met system.run[] commando's voordat de AllowKey=system.run[*] parameter wordt opgegeven.

Belangrijke regels

  • Een whitelist zonder een deny-regel is alleen toegestaan voor system.run[*] items. Voor alle andere items zijn AllowKey parameters niet toegestaan zonder een DenyKey parameter; in dit geval zal de Zabbix-agent niet starten met alleen AllowKey parameters.
  • De volgorde is belangrijk. De opgegeven parameters worden één voor één gecontroleerd volgens hun verschijningsvolgorde in het configuratiebestand:
    • Zodra een item key overeenkomt met een toestaan/verbieden-regel, wordt het item ofwel toegestaan of geweigerd; en de regelcontrole stopt. Dus als een item zowel aan een toestaan-regel als aan een verbieden-regel voldoet, hangt het resultaat af van welke regel eerst komt.
    • De volgorde heeft ook invloed op de EnableRemoteCommands parameter (indien gebruikt).
  • Er wordt ondersteuning geboden voor een onbeperkt aantal AllowKey/DenyKey parameters.
  • AllowKey, DenyKey regels hebben geen invloed op de HostnameItem, HostMetadataItem, HostInterfaceItem configuratieparameters.
  • Het key-patroon is een wildcard-expressie waarbij het wildcard (*) karakter elke hoeveelheid tekens op bepaalde posities kan vertegenwoordigen. Het kan zowel in de sleutelnaam als in de parameters worden gebruikt.
  • Als een specifieke item key niet is toegestaan in de agentconfiguratie, wordt het item als niet-ondersteund gerapporteerd (er wordt geen hint gegeven over de reden);
  • Zabbix agent met de --print (-p) opdrachtregeloptie zal geen sleutels weergeven die niet zijn toegestaan door de configuratie;
  • Zabbix agent met de --test (-t) opdrachtregeloptie zal de status "Niet-ondersteunde item sleutel." retourneren voor sleutels die niet zijn toegestaan door de configuratie;
  • Geweigerde externe commando's worden niet gelogd in het agent-logboek (indien LogRemoteCommands=1 is ingesteld).

Gebruikscenario's

Specifieke check weigeren
  • Blokkeer een specifieke check met de DenyKey parameter. Overeenkomende sleutels zullen worden geweigerd. Alle niet-overeenkomende sleutels zullen worden toegestaan, behalve system.run[] items.

Bijvoorbeeld:

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

Een blacklist is mogelijk geen goede keuze, omdat een nieuwe versie van Zabbix nieuwe sleutels kan hebben die niet expliciet worden beperkt door de bestaande configuratie. Dit kan een beveiligingsprobleem veroorzaken.

Specifiek commando weigeren, anderen toestaan
  • Blokkeer een specifiek commando met de DenyKey parameter. Sta alle andere commando's toe 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 Overeenkomt Geen overeenkomst
* Overeenkomst 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 met eerste parameters overeenkomend met /etc/passwd en alle andere parameters met een willekeurige waarde (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 met eerste parameter overeenkomend met *passwd* en geen andere parameters. 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 met alleen de eerste parameter overeenkomend met *passwd* en alle volgende parameters met een willekeurige waarde (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 met eerste parameter overeenkomend met /var/log/zabbix_server.log, derde parameter overeenkomend met 'abc' en een willekeurige (ook lege) tweede parameter. 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 met eerste parameter overeenkomend met /etc/passwd, tweede parameter overeenkomend met 'utf8' en geen andere argumenten. 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 elke sleutel die begint met vfs. en eindigt met .contents zonder enige parameters. vfs.mount.point.file.contents
vfs..contents
vfs.contents

system.run en AllowKey

Een hypothetisch script zoals '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 ervan in system.run[] te gebruiken.

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

Een gebruiker configureert dit script in AlertsScripts, 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 aangeroepen, stuurt de Zabbix-server naar de agent:

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

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

3. 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 als volgt instellen:

AllowKey=system.run[myscript.sh]

dan

  • system.run[myscript.sh] - wordt toegestaan
  • system.run[myscript.sh,wait], system.run[myscript.sh,nowait] worden niet toegestaan - het script wordt niet uitgevoerd als het wordt aangeroepen 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.