Exchange Server: TLS Versionen der Server / Clients ermitteln

In diesem Artikel hatte ich bereits darauf hingewiesen, dass Office 365 ab Oktober 2018 nur noch TLS 1.2 unterstützen wird. Bevor auf die aktuelle TLS 1.2 Version umgestellt wird, sollten jedoch die Clients / Server ermittelt werden, mit denen der lokale Exchange Server noch nicht via TLS 1.2 kommuniziert.

Das folgende kleine Script kann verwendet werden um die TLS Versionen der Clients und Server zu ermitteln, die Mails empfangen / senden. Das Script wertet die Logs der Connectoren aus und erzeugt CSV Dateien mit der jeweiligen TLS Version.

In Zeile 1 muss dazu der Pfad angegeben werden, wo die CSV Dateien gespeichert werden. In Zeile 2 muss der Pfad zu den SMTP Connector Logs angegeben werden (Für Exchange 2016 schon vorbelegt):

$LogExportPath = "C:\Scripts\TLSVersion\"
$SMTPLogPath = "C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\Logs\FrontEnd\ProtocolLog"

write-host "Getting Logs"
$Logs = (Get-ChildItem $SMTPLogPath\*.log -Recurse| select Fullname).Fullname
$TLS12Log = "$LogExportPath" + "TLS12.csv"
$TLS11Log = "$LogExportPath" + "TLS11.csv"
$TLS10Log = "$LogExportPath" + "TLS10.csv"

foreach ($Log in $Logs)
{
 write-host "Processing $Log"
 $LogImport = Get-Content -Path $Log  | Select-Object -Skip 3 | Out-String | ConvertFrom-Csv | select -property @{N='DateTime';E={$_."#Fields: date-time"}}, @{N='LocalEndpoint';E={$_."local-endpoint"}}, @{N='RemoteEndpoint';E={$_."remote-endpoint"}}, @{N='Message';E={$_.context}}
 $TLS12 = $LogImport | where {$_.Message -match "SP_PROT_TLS1_2" -and $_.Message -match "succeeded"} | export-csv $TLS12Log -append -delimiter ";"
 $TLS11 = $LogImport | where {$_.Message -match "SP_PROT_TLS1_1" -and $_.Message -match "succeeded"} | export-csv $TLS11Log -append -delimiter ";"
 $TLS10 = $LogImport | where {$_.Message -match "SP_PROT_TLS1_0" -and $_.Message -match "succeeded"} | export-csv $TLS10Log -append -delimiter ";"
}
write-host "Done"
write-host "For Hosts using TLSv1.2 see $TLS12Log"
write-host "For Hosts using TLSv1.1 see $TLS11Log"
write-host "For Hosts using TLSv1.0 see $TLS10Log"

Das Script durchsucht die Logs nach den Strings SP_PROT_TLS1_2, SP_PROT_TLS1_1 und SP_PROT_TLS1_0 und speichert die gefunden Einträge in den jeweiligen CSV Dateien TLS12.csv, TLS11.csv und TLS10.csv, so lassen sich die Ergebnisse später weiter verarbeiten:

Exchange Server: TLS Versionen der Server / Clients ermitteln

Exchange Server: TLS Versionen der Server / Clients ermitteln

Das Script ist natürlich nur aussagekräftig, wenn der Exchange selbst die Mails aus dem Internet empfängt und auch versendet. Dies dürfte in den meisten Fällen nicht der Fall sein, da beispielsweise ein vorgelagertes AntiSPAM Gateway zum Einsatz kommt.

Falls das AntiSPAM Gateway die verwendete TLS Version in den Logs nicht anzeigt, kann der folgende Test weiterhelfen:

Der Test zeigt die verwendete TLS Version in den Ergebnissen an, dies gibt Aufschluss darüber, ob das Gateway in der Lage ist, Mails via TLS 1.2 zu empfangen:

Exchange Server: TLS Versionen der Server / Clients ermitteln

Damit es keine Schwierigkeiten mit Office 365 und den lokalen Mailservern gibt, sollten auch SPF, DKIM und DMARC  entsprechend umgesetzt sein. Ob SPF, DKIM und DMARC entsprechend implementiert sind, lässt sich mit einer Mail an den folgenden Test feststellen:

Exchange Server: TLS Versionen der Server / Clients ermitteln

4 Gedanken zu „Exchange Server: TLS Versionen der Server / Clients ermitteln“

  1. Bekomme bei dem Script leider folgenden Fehler.

    export-csv : CSV-Inhalt kann nicht an folgende Datei angefügt werden: C:\Script\TLSVersion\TLS12.csv. Das angefügte Objekt hat keine Eigenschaft, die der folgenden Spalte entspricht: . Soll der Ablauf mit nicht übereinstimmenden Eigenschaften fortgesetzt werden, fügen Sie den Parameter „-Force“ hinzu, und wiederholen Sie den Vorgang.
    In C:\Script\TLSCheck.ps1:12 Zeichen:103
    + … age -match „succeeded“} | export-csv $TLS12Log -append -delimiter „;“
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidData: (:String) [Export-Csv], InvalidOperationException
    + FullyQualifiedErrorId : CannotAppendCsvWithMismatchedPropertyNames,Microsoft.PowerShell.Commands.ExportCsvCommand

    Antworten
  2. Hallo,

    kann mir jemand die Quelle für die Voraussetzung von SPF, DKIM und DMARC nennen, ich finde leider keine Informationen dazu.

    VG
    Jürgen

    Antworten
  3. Hier stimmt doch etwas im Skript nicht:
    >>>>>
    $TLS12Log = „$LogExportPath“ + „TLS12.csv“
    $TLS11Log = „$LogExportPath“ + „TLS12.csv“
    $TLS10Log = „$LogExportPath“ + „TLS12.csv“
    <<<<<
    Müssen die CSV-Dateien nicht ebenfalls die Versionen wiederspiegeln?
    Gruß
    WW

    Antworten

Schreibe einen Kommentar