Exchange Build Nummer mit Zabbix abfragen
Aus znilwiki
Problemstellung
Im Zusammenhang mit einer Exchange Sicherheitslücke (CVE-2020-0688) kam die Frage auf wie wir schnell und dauerhaft einen Überblick über die Exchange-Versionen in den vielen überwachten Umgebungen erhalten können.
Die Exchange-Profis gaben wir folgenden PowerShell-Befehl:
Get-ExchangeServer | Format-List Name,Edition,AdminDisplayVersion
Die Ausgabe sieht wie folgt aus:
Ich fand das zu aufwendig über die PowerShell und habe mich nach anderen Möglichkeiten umgesehen.
In der Systemsteuerung unter Programme und Funktionen kann man diese Versionsnummer ja auch sehen:
Also habe ich mich in der Registry auf die Suche nach dieser Nummer gemacht - und bin mehrfach fündig geworden.
Zum Beispiel hier:
HKLM\SOFTWARE\Microsoft\ExchangeServer\v15\ClientAccessRole REG_SZ ConfiguredVersion
Ein schneller Test brachte hervor das es diesen Schlüssel identisch für
Exchange 2013 Exchange 2016 Exchange 2019
gibt. Bei Exchange 2010 ist die Version v14
statt v15
:
HKLM\SOFTWARE\Microsoft\ExchangeServer\v14\ClientAccessRole REG_SZ ConfiguredVersion
Prima, brauchen wir also nur den Registry-Schlüssel auslesen.
Wert aus Registry auslesen
Es ist zwar kaum zu glauben - aber das hatte ich in Zabbix noch nicht gebraucht.
Wenn man danach googelt findet man .vbs-Skripte oder PowerShell-Befehle welche als UserParameter in den Agenten eingebunden werden.
Das wäre jetzt aber doch schon aufwendiger gewesen - schließlich müsste man dazu überall die Agentenkonfiguration anpassen um den neuen UserParameter hinzu zu fügen.
Eine andere, of übersehende Methode ist der Item-Key
system.run[<Befehl>]
Dieser setzt aber voraus das in der Agentenkonfiguration der Parameter
EnableRemoteCommands=1
gesetzt ist. Was er aber in unseren Umgebungen ist (und auch in dem von mir geschriebene Installationsskript).
So konnten wir schnell eine Prüfung zusammenbauen:
Der Item Key ist:
system.run[@echo off & FOR /F "tokens=2* skip=2" %a in ('reg query HKLM\SOFTWARE\Microsoft\ExchangeServer\v15\ClientAccessRole /v ConfiguredVersion') do echo %b]
und liefert dann nur die Version zurück:
Wie zuvor erwähnt - für Exchange 2010 aus dem v15 ein V14 machen.
Anmerkungen
Getestet wurde es mit Zabbix 4.x und 3.x
Falls es nicht geht fügt der Agentenkonfiguration noch die folgende Zeile hinzu:
UnsafeUserParameters=1
Die habe ich auch überall gesetzt. Damit werden in Item-Parametern Sonderzeichen erlaubt (das brauchte ich vor Jahren schon einmal).
Der reine CMD-Befehl ist:
@echo off & FOR /F "tokens=2* skip=2" %a in ('reg query HKLM\SOFTWARE\Microsoft\ExchangeServer\v15\ClientAccessRole /v ConfiguredVersion') do echo %b
Normalerweise wenn danach googelt wird es immer
%%a %%b
sein - das ist nur innerhalb einer Batchdatei so. Das da oben ist ein Einzeiler wie Ihr ihn auch direkt eintippen könnt.
Der reg query
Befehl liefert eine 3teilige Ausgabe zurück welche wir mit dem FOR
zerlegen und uns nur den 3 Abschnitt zurückgeben lassen.
Das funktioniert hier gut weil das Ergebnis keine Leerzeichen etc. hat.
Das @echo off
brauchen wir davor damit er den echo
Befehel selbst nicht mit hinschreibt.
Ein
do @echo %b
würde wohl auch gehen (jetzt wo ich so darüber nachdenke