Exchange Health Checker Empfehlungen per Script umsetzen

Der Exchange Health Checker ist ein hervorragendes Tool um sich schnell einen Überblick über den Status der Exchange Server zu verschaffen. Das von Microsoft bereitgestellte PowerShell Script wird laufend aktualisiert und kann einen Bericht im HTML Format erzeugen. Bei einer frischen Exchange 2019 Installation auf einem Windows Server 2022 sieht der Bericht beispielweise so aus:

Health Checker Bericht
Health Checker Bericht
Health Checker Bericht
Health Checker Bericht

Bericht

Wie aus dem Bericht zu erkennen ist, finden sich bei einer frischen Exchange Installation diverse Sicherheitslücken und andere Warnungen zu möglichen Optimierungen. Praktischerweise liefert der Exchange Health Checker auch gleich passende Artikel, wie man die Probleme beseitigen kann.

Auf der Grundlage dieser Artikel habe ich ein kleines Script erstellt, welches die wichtigsten Einstellungen automatisch vornimmt. So kann das Script beispielsweise die folgenden Probleme beheben:

  • Auslagerungsdatei auf 32GB festlegen
  • Stromsparfunktionen der Netzwerkkarte deaktivieren
  • Energiesparplan auf „High Performance“ setzen
  • TCP KeepAlive auf 30 min setzen
  • TLS 1.2 für SCHANNEL aktivieren
  • TLS 1.2 für .NET Framework konfigurieren
  • TLS 1.0, TLS 1.1 für SCHANNEL und .NET Framework deaktivieren
  • TLS 1.3 deaktivieren (wird aktuell nicht von Exchange 2019 unterstützt)
  • Download Domains auf Autodiscover Hostname umstellen
  • SSL Offloading für Outlook Anywhere deaktivieren
  • Windows Extended Protection Script runterladen und ausführen

Das Script fragt bei jedem Schritt, ob die Einstellungen angewendet werden sollen, dies sieht dann beispielsweise wie folgt aus:

Apply-ExchangeHealthChecker-Recommendations.ps1

Das Script ist nicht von den Health Checker Ergebnisses abhängig, sondern ich habe einfach die Empfehlungen, welche auf einem neu installierten Exchange Server auf Windows Server 2022 vom Health Checker geliefert werden in diesem Script umgesetzt. Das Script liegt auf GitHub und ich werde neue Empfehlungen des Health Checkers in das Script integrieren.

Nach dem Ausführen des Scripts „Apply-ExchangeHealthChecker-Recommendations.ps1“ sieht der Health Checker Bericht schon viel besser aus. Hier mal ein Beispiel:

Apply-ExchangeHealthChecker-Recommendations.ps1
Apply-ExchangeHealthChecker-Recommendations.ps1

Wie bereits erwähnt habe ich das Script zunächst nur auf Windows Server 2022 und Exchange 2019 getestet. Es wäre daher schön, wenn ihr mir Screenshots oder die Fehler aus euren Reports schicken könntet, damit ich das Script „Apply-ExchangeHealthChecker-Recommendations.ps1“ erweitern kann. Auf Windows Server 2019 werden sicher noch andere Fehler und Warnungen angezeigt, daher gerne zuschicken oder auch gerne direkt via GitHub mitwirken.

Hier nun der Link zum Script:

15 Gedanken zu „Exchange Health Checker Empfehlungen per Script umsetzen“

    • Supported Exchange Server Versions:
      The script can be used to validate the configuration of the following Exchange Server versions: – Exchange Server 2013 – Exchange Server 2016 – Exchange Server 2019

      Antworten
  1. Klasse, sehr gute Arbeit, Frank!

    Getestet unter Windows Server 2016 mit Exchange 2016 CU23 ergab nur eine Auffälligkeit:
    Das Script setzte die Auslagerungsdatei fest auf 8192MB (sie stand vorher fest bei 32778MB).

    Die anderen Punkte liefen sauber durch (waren aber auch schon mit Ausnahme von Download Domains und Extended Protection passend konfiguriert). Diese letzten 2 Dinge passen nun auch.

    Antworten
    • Ich sehe gerade im Changelog, dass du das geändert hattest auf 25% des physischen RAMs, statt 32GB fest. Dann läuft das Script natürlich wie erwartet…

      Antworten
  2. Hey Franky,

    zunächst vielen vielen Dank für das Script. Die extented Securitysachen gingen so sehr schnell von der Hand.
    Was leider bei mir nicht funktioniert mit deinem Script ist die Sache mit der Downloaddomain umschreiben.

    Wir nutzen einen komplett internen Exchange der max über VPN erreichbar ist mit Outlook z.B.
    Der Nutzen der Downloaddomains (OWA is abgedreht) geht gegen 0 wenn ichs richtig verstehe, nichts desto trotz hätte ich gern diese letzte rote Meldung noch weg :/

    Security Vulnerability
    ———————-
    IIS module anomalies detected: False
    Security Vulnerability: Download Domains are configured.
    ExternalDownloadHostName: Set to the same as Internal Or External URL as OWA.
    InternalDownloadHostName: Set to the same as Internal Or External URL as OWA.
    Configuration instructions: https://aka.ms/HC-DownloadDomains

    Antworten
    • Hallo Manu,
      wenn du den Fehler im Health Checker zu den Download Domains los werden willst, musst du die Download Domain entsprechend konfigurieren. Die Download Domain darf dabei nicht einer der Domains entsprechen, welche du für die Exchange vDirs benutzt. Zusätzlich muss die Domain der Download Domain auf dem Zertifikat vorhanden sein, damit es nicht zu Zertifikatswarnungen kommt. Du kannst die Befehle aus dem Script benutzen um eine eigene Download Domain zu konfigurieren.

      Beste Grüße,
      Frank

      Antworten
  3. Hallo Frank,

    ich hätte einen Vorschlag zum Script: Ich bin eine Person welche gerne erst den aktuell gesetzten Wert sehen möchte, bevor man den Wert von einem Script akzeptiert, denn vielleicht hatte man einen Grund die Pagefile anders zu setzen oder eine andere Einstellung auf einen bestimmten Wert zu setzen, der einen aber erst einfällt wenn man den aktuell gesetzten Wert sieht.

    Daher würde ich mich freuen erst den gesetzten Wert zu sehen, bevor die Abfrage kommt, ob der von „dir“ vorgeschlagene Wert gesetzt werden soll.

    VG Tobias

    Antworten
  4. Hallo zusammen,

    wenn ich das Script bei mir auf einem Exchnage 2019 ausführe kommen immer folgende Fehler:

    [PS] C:\>.\Apply-ExchangeHealthChecker-Recommendations.ps1
    In C:\Apply-ExchangeHealthChecker-Recommendations.ps1:196 Zeichen:17
    + Sign up
    + ~
    Das kaufmännische Und-Zeichen (&) ist nicht zulässig. Der &-Operator ist für eine zukünftige Verwendung reserviert.
    Verwenden Sie das kaufmännische Und-Zeichen in doppelten Anführungszeichen („&“), um es als Teil einer Zeichenfolge zu
    übergeben.
    In C:\Apply-ExchangeHealthChecker-Recommendations.ps1:201 Zeichen:217
    + … –medium Button d-lg-none color-fg-inherit p-1 ml-auto“> <span cla …
    + ~
    Der Operator "<" ist für zukünftige Versionen reserviert.
    In C:\Apply-ExchangeHealthChecker-Recommendations.ps1:207 Zeichen:16
    +
    + ~
    Der Operator „<" ist für zukünftige Versionen reserviert.
    In C:\Apply-ExchangeHealthChecker-Recommendations.ps1:410 Zeichen:13
    + CI/CD & Automation
    + ~
    Das kaufmännische Und-Zeichen (&) ist nicht zulässig. Der &-Operator ist für eine zukünftige Verwendung reserviert.
    Verwenden Sie das kaufmännische Und-Zeichen in doppelten Anführungszeichen ("&"), um es als Teil einer Zeichenfolge zu
    übergeben.
    In C:\Apply-ExchangeHealthChecker-Recommendations.ps1:2107 Zeichen:126
    + … js-jump-to-line-field" type="text" placeholder="Jump to line…" …
    + ~
    Das kaufmännische Und-Zeichen (&) ist nicht zulässig. Der &-Operator ist für eine zukünftige Verwendung reserviert.
    Verwenden Sie das kaufmännische Und-Zeichen in doppelten Anführungszeichen ("&"), um es als Teil einer Zeichenfolge zu
    übergeben.
    In C:\Apply-ExchangeHealthChecker-Recommendations.ps1:2107 Zeichen:148
    + … pe="text" placeholder="Jump to line…" aria-label="Jump to line …
    + ~~~~
    Unerwartetes Token "Jump" in Ausdruck oder Anweisung.
    In C:\Apply-ExchangeHealthChecker-Recommendations.ps1:2149 Zeichen:153
    + … thub-terms-of-service" data-analytics-event="{"category":&q …
    + ~
    Das kaufmännische Und-Zeichen (&) ist nicht zulässig. Der &-Operator ist für eine zukünftige Verwendung reserviert.
    Verwenden Sie das kaufmännische Und-Zeichen in doppelten Anführungszeichen ("&"), um es als Teil einer Zeichenfolge zu
    übergeben.
    In C:\Apply-ExchangeHealthChecker-Recommendations.ps1:2149 Zeichen:160
    + … rms-of-service" data-analytics-event="{"category":"Foo …
    + ~
    Das kaufmännische Und-Zeichen (&) ist nicht zulässig. Der &-Operator ist für eine zukünftige Verwendung reserviert.
    Verwenden Sie das kaufmännische Und-Zeichen in doppelten Anführungszeichen ("&"), um es als Teil einer Zeichenfolge zu
    übergeben.
    In C:\Apply-ExchangeHealthChecker-Recommendations.ps1:2149 Zeichen:172
    + … ce" data-analytics-event="{"category":"Footer",&q …
    + ~
    Das kaufmännische Und-Zeichen (&) ist nicht zulässig. Der &-Operator ist für eine zukünftige Verwendung reserviert.
    Verwenden Sie das kaufmännische Und-Zeichen in doppelten Anführungszeichen ("&"), um es als Teil einer Zeichenfolge zu
    übergeben.
    In C:\Apply-ExchangeHealthChecker-Recommendations.ps1:2149 Zeichen:179
    + … ta-analytics-event="{"category":"Footer","ac …
    + ~
    Ausdruck fehlt nach dem unären Operator ",".
    Es wurden nicht alle Analysefehler berichtet. Korrigieren Sie die berichteten Fehler, und versuchen Sie es erneut.
    + CategoryInfo : ParserError: (:) [], ParseException
    + FullyQualifiedErrorId : AmpersandNotAllowed

    Was mach ich hier falsch?

    Antworten
  5. Hi, Frank,
    erstmal vielen vielen Dank für Deine ganze Arbeit hier !!!!

    Dein Skript hat bei uns die DownloadDomains 2x hintereinander pro Hostname gesetzt, also meinetwegen
    InternalDownloadHostName: autodiscover. autodiscover.

    Das sieht nicht gesund aus.

    Viele Grüße,
    Nelson.

    Antworten
  6. Hallo Frank,
    vielen Dank für den Script, hat super funktiniert.
    Ich habe nur diesen Fehler:

    Extended Protection should be set to ‚None‘ on the vDir where IP filtering is enabled Extended Protection isn’t configured as expected
    CVE-2022-24516, CVE-2022-21979, CVE-2022-21980, CVE-2022-24477, CVE-2022-30134
    Extended Protection should be set to ‚None‘ on the vDir where IP filtering is enabled Extended Protection isn’t configured as expected

    3 IPs in filter list on vDir: ‚Default Web Site/ECP‘

    liegt das daran das ich „Einschränkungen für IP-Adressen und Domänennamen“ im IIS aktiviert habe?

    Antworten
    • Ich habe denselben Fehler im Healthchecker Ergebnis.
      Ich habe absichtlich einen IP Filter auf das ECP Verzeichnis gesetzt, damit dieses nur von intern erreichbar ist.
      So wurde es ja auch als Empfehlung publiziert.
      Warum ist das mit der Extended Protection inkompatible?
      Wenn ich den IP Filter entferne, ist ja das ECP wieder von extern verfügbar, was ich aber nicht möchte.

      Fehlermeldung:
      CVE-2022-24516, CVE-2022-21979, CVE-2022-21980, CVE-2022-24477, CVE-2022-30134
      Extended Protection should be set to ‚None‘ on the vDir where IP filtering is enabled Extended Protection isn’t configured as expected

      2 IPs in filter list on vDir: ‚Default Web Site/ECP‘
      For more information about Extended Protection and how to configure, please read this article: https://aka.ms/HC-ExchangeEPDoc

      Antworten
  7. Hallo Franky,

    bei mir kommen auch einige Fehler. Server 2019 mit Exchange 2019 …

    Gruß Stephan

    ————————————————————————
    In C:\_Tools\Skripte\HealthChecker-Recommendations\Apply-ExchangeHealthChecker-Recommendations.ps1:200 Zeichen:17
    + Sign up
    + ~
    Das kaufmännische Und-Zeichen (&) ist nicht zulässig. Der &-Operator ist für eine zukünftige Verwendung reserviert.
    Verwenden Sie das kaufmännische Und-Zeichen in doppelten Anführungszeichen („&“), um es als Teil einer Zeichenfolge zu
    übergeben.
    In C:\_Tools\Skripte\HealthChecker-Recommendations\Apply-ExchangeHealthChecker-Recommendations.ps1:205 Zeichen:209
    + … k Button–medium Button d-lg-none color-fg-inherit p-1″> <span cla …
    + ~
    Der Operator "<" ist für zukünftige Versionen reserviert.
    In C:\_Tools\Skripte\HealthChecker-Recommendations\Apply-ExchangeHealthChecker-Recommendations.ps1:415 Zeichen:13
    + CI/CD & Automation
    + ~
    Das kaufmännische Und-Zeichen (&) ist nicht zulässig. Der &-Operator ist für eine zukünftige Verwendung reserviert.
    Verwenden Sie das kaufmännische Und-Zeichen in doppelten Anführungszeichen ("&"), um es als Teil einer Zeichenfolge zu
    übergeben.
    In C:\_Tools\Skripte\HealthChecker-Recommendations\Apply-ExchangeHealthChecker-Recommendations.ps1:2269 Zeichen:126
    + … js-jump-to-line-field" type="text" placeholder="Jump to line…" …
    + ~
    Das kaufmännische Und-Zeichen (&) ist nicht zulässig. Der &-Operator ist für eine zukünftige Verwendung reserviert.
    Verwenden Sie das kaufmännische Und-Zeichen in doppelten Anführungszeichen ("&"), um es als Teil einer Zeichenfolge zu
    übergeben.
    In C:\_Tools\Skripte\HealthChecker-Recommendations\Apply-ExchangeHealthChecker-Recommendations.ps1:2269 Zeichen:148
    + … pe="text" placeholder="Jump to line…" aria-label="Jump to line …
    + ~~~~
    Unerwartetes Token "Jump" in Ausdruck oder Anweisung.
    In C:\_Tools\Skripte\HealthChecker-Recommendations\Apply-ExchangeHealthChecker-Recommendations.ps1:2311 Zeichen:153
    + … thub-terms-of-service" data-analytics-event="{"category":&q …
    + ~
    Das kaufmännische Und-Zeichen (&) ist nicht zulässig. Der &-Operator ist für eine zukünftige Verwendung reserviert.
    Verwenden Sie das kaufmännische Und-Zeichen in doppelten Anführungszeichen ("&"), um es als Teil einer Zeichenfolge zu
    übergeben.
    In C:\_Tools\Skripte\HealthChecker-Recommendations\Apply-ExchangeHealthChecker-Recommendations.ps1:2311 Zeichen:160
    + … rms-of-service" data-analytics-event="{"category":"Foo …
    + ~
    Das kaufmännische Und-Zeichen (&) ist nicht zulässig. Der &-Operator ist für eine zukünftige Verwendung reserviert.
    Verwenden Sie das kaufmännische Und-Zeichen in doppelten Anführungszeichen ("&"), um es als Teil einer Zeichenfolge zu
    übergeben.
    In C:\_Tools\Skripte\HealthChecker-Recommendations\Apply-ExchangeHealthChecker-Recommendations.ps1:2311 Zeichen:172
    + … ce" data-analytics-event="{"category":"Footer",&q …
    + ~
    Das kaufmännische Und-Zeichen (&) ist nicht zulässig. Der &-Operator ist für eine zukünftige Verwendung reserviert.
    Verwenden Sie das kaufmännische Und-Zeichen in doppelten Anführungszeichen ("&"), um es als Teil einer Zeichenfolge zu
    übergeben.
    In C:\_Tools\Skripte\HealthChecker-Recommendations\Apply-ExchangeHealthChecker-Recommendations.ps1:2311 Zeichen:179
    + … ta-analytics-event="{"category":"Footer","ac …
    + ~
    Ausdruck fehlt nach dem unären Operator ",".
    In C:\_Tools\Skripte\HealthChecker-Recommendations\Apply-ExchangeHealthChecker-Recommendations.ps1:2311 Zeichen:179
    + … a-analytics-event="{"category":"Footer","act …
    + ~
    Unerwartetes Token "&" in Ausdruck oder Anweisung.
    Es wurden nicht alle Analysefehler berichtet. Korrigieren Sie die berichteten Fehler, und versuchen Sie es erneut.
    + CategoryInfo : ParserError: (:) [], ParseException
    + FullyQualifiedErrorId : AmpersandNotAllowed

    Antworten

Schreibe einen Kommentar