PowerShell: SMTP Relay-Verbindungen zu einem Exchange Server herausfinden

Bei der Migration von einem Exchange Server ist es sehr wahrscheinlich, dass der Server für ein oder mehrere Geräte im Unternehmen noch als SMTP-Relay-Server eingetragen ist und Emails von Druckern, Scannern und sonstigen Gerätschaften annimmt und verteilt. Um alle Systeme aufzuspüren, die mit dem alten Server kommunizieren, kann das SMTP-Log vom Exchange Server selbst sein.

In meinem Fall geht es um einen Exchange 2010, der gegen einen Exchange 2016 abgelöst wird.

Der Standort vom Logfile

Generell befindet sich das Standard-Logfile unter

C:\Program Files\Microsoft\Exchange Server\V14\TransportRoles\Logs\ProtocolLog\SmtpReceive

Ist ein Logging überhaupt aktiv?

Es kann sein, dass die SMTP-Verbindungen aktuell noch gar nicht mitprotokolliert werden. Dies kann wie folgt überprüft bzw. aktiviert/deaktiviert werden:

Die Auswertung der Logfiles

Da es keinen Spass macht, tausende von Zeilen Code per Hand auszuwerten, habe ich mir dazu ein kleines PowerShell-Skript geschrieben. Das Skript durchforstet alle .log-Dateien in dem definierten Ordner, sucht nach der IP-Adresse des Senders, schneidet den Client-Port ab (weil sonst würden auch bei dem Parameter -unique ganz viele identische Systeme auftauchen, nur mit einem anderen Port während der Kommunikation) und listet jede IP-Adresse nur einmal auf.

<#    
    .SYNOPSIS
    Auflistung aller SMTP-Verbindungen zum Exchange Server
    .DESCRIPTION
    PowerShell Skript zur automatischen Auswertung der 
        SmtpReceive-Log-Dateien auf einem oder mehreren Exchange Servern 
    .EXAMPLE
    C:\Scripts\Exchange_SMTP_Connections.ps1
    .NOTES
    Date:    08.01.2019
    Author:  Jan Kappen
    Website: https://www.zueschen.eu
    Twitter: @JanKappen
    Thanks to Mike F Robbins for his cool function, for more 
        informations have a look at his blog: mikefrobbins.com
#>

#Requires -Version 3.0
function Get-SMTPConnections {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory,
                   ValueFromPipeline)]
        [ValidateScript({
            Test-Path -Path $_ -PathType Leaf -Include '*.log'
        })]
        [string[]]$LogFile
    )
    PROCESS {
        foreach ($file in $LogFile) {
            $Headers = (Get-Content -Path $file -TotalCount 5 | Where-Object {$_ -like '#Fields*'}) -replace '#Fields: ' -split ','
            Import-Csv -Header $Headers -Path $file |
            Where-Object {$_.'connector-id' -match 'NAME_RELAY_CONNECTOR'} |
            Select-Object -Unique -Property remote-endpoint
        }
    }
}

# 
$stringBuilder = New-Object System.Text.StringBuilder
$list1 = New-Object System.Collections.Generic.List[System.String]
$list2 = New-Object System.Collections.Generic.List[System.String]

## Definition der Log-Pfade
## Muss auf einem Exchange Server direkt noch angepasst werden
#

$cas1 = Get-ChildItem -Path 'C:\Temp\Exchange SMTP Receive Log\cas1\*.log' | Get-SMTPConnections | Sort-Object -Property remote-endpoint -Unique
$cas2 = Get-ChildItem -Path 'C:\Temp\Exchange SMTP Receive Log\cas2\*.log' | Get-SMTPConnections | Sort-Object -Property remote-endpoint -Unique

# Server 1
foreach ($cas in $cas1."remote-endpoint") {
$cas = $cas -split(":")
$cas = $cas[0]
$null = $stringBuilder.Append("$cas`r`n")
$list1.Add("$cas")
}
$list1 | Sort-Object -Unique

# Server 2
foreach ($cas in $cas2."remote-endpoint") {
$cas = $cas -split(":")
$cas = $cas[0]
$null = $stringBuilder.Append("$cas`r`n")
$list2.Add("$cas")
}
$list2 | Sort-Object -Unique

 

Ergebnis

Als Ergebnis bekommen Sie eine Liste der Systeme, die per SMTP mit dem Exchange Server bzw. den Systemen kommuniziert haben. Achten Sie darauf, in Zeile 33 den korrekten Namen des Konnektors anzugeben, da sonst kein Ergebnis erscheint.


Sie benötigten persönliche Unterstützung oder haben nicht die richtige Lösung für Ihr Problem gefunden?

Dieser Blog wird von mir, Jan Kappen, in seiner Freizeit betrieben, hier beschreibe ich Lösungen für Probleme aller Art oder technische Anleitungen mit Lösungsansätzen.

Die berufliche Unabhängigkeit

Ich bin seit Januar 2020 vollständig selbstständig und habe meine eigene Firma gegründet, die Building Networks mit Sitz in Winterberg im schönen Sauerland. Hier stehe ich als Dienstleister gerne für Anfragen, Support oder Projekte zur Verfügung.

Die Firma Building Networks bietet Ihnen:

  • Hilfe und Support per Telefon, Fernwartung oder persönlich vor Ort
  • Projekt-Unterstützung
  • Ausgezeichnete Kompetenz zu den Themen
    • Microsoft Hyper-V
    • Microsoft Failover Clustering & HA
    • Storage Spaces Direct (S2D) & Azure Stack HCI
    • Veeam Backup & Recovery
    • Microsoft Exchange
    • Microsoft Exchange Hybrid Infrastruktur
    • Microsoft Active Directory
    • Microsoft Office 365
    • Ubiquiti
    • 3CX VoIP PBX
    • Fortinet Network Security
    • Baramundi Software
    • ...

Ich freue mich über Ihren Kontakt, weitere Informationen finden Sie auf der Webseite meiner Firma unter Building-Networks.de

Jan

Jan Kappen arbeitet seit 2005 in der IT. Er hat seine Ausbildung 2008 abgeschlossen und war bis 2018 als IT-Consultant im Bereich Hyper-V, Failover Clustering und Software Defined Storage unterwegs. Seit 2015 wurde er jährlich von Microsoft als Most Valuable Professional (MVP) im Bereich "Cloud & Datacenter Management" ausgezeichnet für seine Kenntnisse und die Weitergabe seines Wissens. Jan ist häufig auf Konferenzen als Sprecher zu finden, weiterhin bloggt er viel. Von September 2018 bis Dezember 2019 war Jan als Senior Network- und Systemadministrator bei einem großen mittelständischen Unternehmen im schönen Sauerland angestellt. Im Januar 2020 hat er den Sprung in die Selbstständigkeit gewagt und ist seitdem Geschäftsführer der Firma Building Networks in Winterberg. In seiner Freizeit kümmert er sich um das Freifunk-Netzwerk in Winterberg und Umgebung.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert