MSXFAQ MeetNow aktiv: Komm doch einfach dazu.

SMTP-Clients ermitteln

Wie kann ich über das einfache Exchange Messagetracking ermitteln, welche Mails per SMTP von Clients oder extern eingeliefert werden, wo doch auch interne Mails per OWA oder MAPI ebenfalls durch den Transport per SMTP übertragen werden. Das ist insbesondere wichtig, wenn Sie einen Exchange Server z.B. im Rahmen einer Migration abschalten wollen.

Exchange SMTP-Empfang

Jeder Exchange Server hat einen "Default Frontend Receive Connector, der auf allen IP-Adressen über Port 25 per SMTP eingehende Mails anonym oder authentifiziert, mit oder ohne STARTTLS annimmt und intern routet.

Das macht es sehr einfach, mal eben von Skripten, Monitoring, Scannern und anderen Absendern eine Information an interne Empfänger zu senden. Wer den internen Exchange Server per SMTP erreicht, kann Mails an interne Empfänger einliefern. Nicht immer fragen dabei die Absender um Erlaubnis und nicht jeder Administrator führt ein Buch über solche Clients und die wenigsten Firmen steuern den Zugriff von intern auf Port 25 über Firewalls oder Acces-Listen im Router.

Ein Sonderfall sind hier Firmen, die ihre Exchange Server in einem eigenen Subnetz installieren und den Zugriff über einen Loadbalancer regulieren. Aber selbst hier wird der Zugriff auf den virtuellen Service auf dem Loadbalancer meist nicht reglementiert und wenn der Loadbalancer noch die Source-IP umsetzt, dann sehen Sie in Exchange gar nichts mehr. Dann ist diese Seite hier zu Ende und sie dürfen Logs aus dem Loadbalancer auswerten.

Testmail per SMTP

Das Commandlet "Send-Mailmessage" ist nicht nur abgekündigt, sondern versucht auch einen Anmeldung per SMTPAUTH, was natürlich nur geht, wenn mein Konto auch ein Exchange Postfach in der Organisation hat. Eine einfache SMTP-Mail können wir anonym mit folgenden Zeilen senden

$smtpServer = "ex01.msxfaq.de"
$smtpFrom = "test@extern.msxfaq.de"
$smtpTo = "mailbox1@msxfaq.de"
$messageSubject = "Anonym $(([System.DateTime]::UtcNow).tostring("u"))"
$messageBody = "Testmail anonym per SMTP"
$smtp = New-Object Net.Mail.SmtpClient($smtpServer)
$smtp.Send($smtpFrom,$smtpTo,$messagesubject,$messagebody)

Mit dem Zeitstempel im Betreff findet sich diese Mail auch einfach im Messagetracking wieder.

Exchange Routing

Es ist egal, ob eine Mail per SMTP, MAPI, OWA, EAS oder EWS in Exchange OnPremises eingeliefert wird. Sie geht immer erst durch den SMTP-Transport, damit auch Transportregeln angewendet werden. Das ist seit Exchange 2007 so. Bei früheren Versionen hat ein Client eine Mail zu seine, Nachbarn in der gleichen Datenbank gerne direkt zugestellt.

Heute finden wir alle Einträge im Messagetrackinglog.

Eine Mail, die per OWA lokal eingeworfen und nach extern gesendet wird, durchläuft auf einem Server folgende Stationen:

Timestamp              EventId          Source        
---------              -------          ------
21.11.2025 10:36:49    NOTIFYMAPI       STOREDRIVER
21.11.2025 10:36:53    RECEIVE          STOREDRIVER
21.11.2025 10:36:55    SUBMIT           STOREDRIVER
21.11.2025 10:36:54    RECEIVE          SMTP
21.11.2025 10:36:54    RESOLVE          ROUTING
21.11.2025 10:36:54    AGENTINFO        AGENT
21.11.2025 10:36:58    TRANSFER         ROUTING
21.11.2025 10:36:59    SENDEXTERNAL     SMTP

Eine per SMTP anonym lokal eingelieferte und per Hybrid über den Remote-Mailbox-Eintrag an Exchange Online weitergeleitet Mail halt einen etwas kleineren Abdruck im Messagetracking:

Timestamp              EventId          Source
---------              -------          ------
21.11.2025 10:12:52    RECEIVE          SMTP
21.11.2025 10:12:52    RESOLVE          ROUTING
21.11.2025 10:12:52    AGENTINFO        AGENT
21.11.2025 10:12:54    SENDEXTERNAL     SMTP

Interessant finde ich hier den "SMTP RECEIVE" Event.

Feld Per OWA eingeliefert Per SMTP eingeliefert

ClientIp

192.168.100.33

192.168.100.33

ClientHostname

EX01.msxfaq.de

EX01.msxfaq.de

ServerIp

192.168.100.33

192.168.100.33

ServerHostname

EX01

EX01

ConnectorID

EX01\Default EX01

EX01\Default EX01

Recipients

{mailbox1@msxfaq.de}

{mailbox1@msxfaq.de}

Sender

demo1@msxfaq.de

test@extern.msxfaq.de

ReturnPath

demo1@msxfaq.de

test@extern.msxfaq.de

Directionality

Originating

Incoming

OriginalClientIP

192.168.102.72

192.168.102.72

MessageInfo

0cI:

0cA:

EventData

{[MessageValue, MediumHigh],
[Replication, Disabled],
[FirstForestHop,EX01.msxfaq.de],
[FromEntity, Hosted],
[DeliveryPriority, Normal],
[AccountForest, msxfaq.de]}
{[ProxyHop1, EX01.msxfaq.de(192.168.100.33)],
[MessageValue, MediumHigh],
[Replication, Disabled],
[FirstForestHop, EX01.msxfaq.de],
[FromEntity, Internet],
[ProxiedClientIPAddress, 192.168.102.72],
[ProxiedClientHostname, FC-T14G5],
[DeliveryPriority, Normal], [AccountForest, msxfaq.de]

Betrachten wir uns ein paar Felder genauer:

  • Client-IP
    Sie sehen gut, dass das Felder Client-IP nicht der echte Client ist, sondern der Exchange Frontend Proxy, der die Nachricht zum Backend Service gibt. Der Frontend schreibt kein Messagetrackinglog, da er nur ein SMTP-Proxy ist. Damit ist das Feld interessant, wenn dort die IP-Adresse eines anderen Exchange Frontend-Servers erscheint.
  • Directionality
    Damit ist die Richtung der Mail protokolliert. "Incoming" steht für von extern anonym eingelieferte Mails. Wenn der Absender aber authentifiziert ist und Exchange daher als autoritative Quelle gelten soll, dann finden wir hier ein "Originating". Das hilft uns also nicht weiter, das der Wert auch bei per SMTP authentifizierten Mails auf "Originating" steht.
  •  Original Client IP
    Hier sehen ich wirklich die IP-Adressen, welche die Mail bei mir eingeliefert hat. Es ist bei OWA und SMTP der echte Client oder im schlechteren Fall die IP-Adresse einer NAT-Firewall oder eines Loadbalancers. Sie ist daher zwar kein Indikator für eine SMTP-Einlieferung aber immer noch gut zum ermitteln des Clients.
  • Eventdata
    Hier sehen wir größere Unterschiede und nur bei der SMTP-Einlieferung finde ich den Key "ProxiedClientIPAddress". Das könnte ein geeigneter Schlüssel für eine SMTP-Einlieferung sein. Bei MAPI oder OWA habe ich das Feld noch nicht gesehen

Es gibt im Messagetracking keinen gesicherten Eintrag zum Protokoll. Wer 100% erreichen möchte, muss für jeden "SMTP RECEIVE" prüfen, ob es auch einen STOREDRIVER RECEIVE gibt. Nur wenn der fehlt, ist die Mail per SMTP gekommen. Dazu müssen Sie aber über alle Server hinweg die Messagetrackinglogs durchsuchen und z.B. mit Hashtables konsolidieren. Aber der Schlüssel "ProxiedClientIPAddress" in Eventdata sieht vielversprechend aus.

Einsammeln und Auswerten

Damit ist es relativ einfach ein PowerShell-Skript zu bauen, welches auf dem Exchange Server aufgerufen wird und die Verbindungen ausfiltert, die per SMTP eingeliefert wurden. Denken Sie aber daran, dass der Backend SMTP-Service dieses Protokoll generiert. Wenn ein Client über einen Frontend von Server1 auf den Backend von Server2 geht, wird auf dem Server 1 im Messagetrackinglog nichts sehen.

Get-Messagetrackinglog `
   -Source SMTP `
   -EventID Receive `
   -Resultsize Unlimited `
| where {$_.eventdata.key.IndexOf("ProxiedClientIPAddress") -ne -1} `
| Select OriginalClientIP,Directionality,Sender,Recipients,Messagesubject

So bekomme ich eine Liste aller SMTP-Verbindungen zu meinen Exchange Server, die ich dann natürlich jederzeit als CSV-Datei o.ä. exportieren oder in PowerShell weiter verarbeiten kann.

Ich habe hier z.B. eine Ausgabe von PRTG, welches authentifiziert eine Mail über meinen Exchange Server an ein externes Postfach sendet, welches per Regel diese Mail wieder an ein internes Postfach einliefert. Der erste Eintrag zeigt die private IP-Adresse des PRTG-Servers und ist "Originating" und der zweite Eintrag kommt anonym (Directionality:Incoming) an

OriginalClientIp : 192.168.100.59
Directionality   : Originating
Sender           : prtg.service@msxfaq.de
Recipients       : {prtg.roundtrip@gmx.de}
MessageSubject   : PRTG Roundtrip Mail: {1C51FC60-0E74-4999-B22A-02ECD5AD7882}

OriginalClientIp : 193.37.132.94
Directionality   : Incoming
Sender           : prtg.service@msxfaq.de
Recipients       : {PRTG.Service@msxfaq.de}
MessageSubject   : PRTG Roundtrip Mail: {1C51FC60-0E74-4999-B22A-02ECD5AD7882}

Ich kann aus der Mail also nicht nur die IP-Adresse des SMTP-Clients, sondern auch die Authentifizierung sehen. Mit dem Absender, Empfänger und Betreff sollte sich die entsprechende Applikation dann auch ausfindig machen lassen. Allerdings lässt sich nicht ermitteln, wie der Client den Server gefunden hat. Er könnte die IP-Adresse aber auch einen DNS-Namen verwendet haben. Für eine Migration ist es daher wichtig, alle Client auf ihre Verbindungseinstellungen zu untersuchen.

Weitere Links