OriginalClientIP
Bei der Suche nach der Quelle einer Mail, insbesondere bei Spam, Angriffen oder Missbrauch, ist es wichtig, die IP-Adresse des letzten externen Systems zu kennen. Wenn ihr eigenes System als sicherer Hafen angesehen wird, dass muss der erste Kontakt auf dem ersten System protokolliert und idealerweise auch auf dem weiteren Weg erkennbar sein. Exchange Administratoren haben in der Regel zwei Threads
- Missbrauch/Fehler per SMTP
Gängige Probleme sind hier "Open Relay", Spam-Messages aber auch Missbrauch durch Credential-Phishing etc. Hier geht es drum auch den Client und den Weg zum Server zu ermitteln, insbesondere ob es ein internes System ist oder der Zugriff sogar von extern möglich war. - Missbrauch/Fehler per HTTP
Die zweite Tür, die in der Regel auch von extern offen ist, ist der Webserver mit OWA, ActiveSync, EWS etc.
Diese Seite fokussiert sich auf das Feld "OriginalClientIP", welche Sie im Message Tracking Log sehen können.
Testserie
Ich habe vom Client 192.168.5.20 verschiedene Tests gestartet, um eine Mail zu senden. Die Zieladresse der Mail war ein externes Konto, so dass der "SMTP SEND" immer der Abschluss der Aktion ist. Hier die Ausgaben auf dem lokalen Exchange Server von:
Get-TransportService ` | Get-MessageTrackingLog ` -Recipients demouser@msxfaq.de ` | ft eventid,source,originalclientip
Einlieferung durch | Beschreibung und Logs |
---|---|
OWA2016 |
Eine Einlieferung per OWA erfolgt quasi "auf dem Exchange Server" aber die OriginalClientIP ist dennoch die Adresse, die der Exchange Server "sieht". Bei Clients aus dem Internet sehen Sie hier dann die Public-IP oder die interne IP der Firewall oder Loadbalancer: EventId Source OriginalClientIp ------- ------ ---------------- RECEIVE STOREDRIVER 192.168.5.20 SUBMIT STOREDRIVER 192.168.5.20 HARECEIVE SMTP HADISCARD SMTP HAREDIRECT SMTP RECEIVE SMTP 192.168.5.20 AGENTINFO AGENT 192.168.5.20 TRANSFER ROUTING SEND SMTP |
Outlook 2016 |
Wird eine Mail per Outlook eingestellt, dann ist dies OWA vergleichbar. Outlook liefert die Mail per MAPI/http oder RPC/http über den Frontend Server direkt auf dem Backend Server ein, der dennoch die IP-Adresse protokolliert, die der Server aus der TCP-Verbindung ermitteln kann. EventId Source OriginalClientIp ------- ------ ---------------- RECEIVE STOREDRIVER 192.168.5.20 SUBMIT STOREDRIVER 192.168.5.20 HARECEIVE SMTP HADISCARD SMTP HAREDIRECT SMTP RECEIVE SMTP 192.168.5.20 AGENTINFO AGENT 192.168.5.20 TRANSFER ROUTING SEND SMTP |
Pickup |
Dieser Test ist natürlich etwas gemein, da eine Datei im Pickup-Verzeichnis ja keine IP-Adresse hat. Insofern ist auch nicht zu sehen. EventId Source OriginalClientIp ------- ------ ---------------- RECEIVE PICKUP AGENTINFO AGENT SEND SMTP |
SMTP |
Ich kann als authentifizierter Client natürlich auch per SMTP Mails auf Port 587 einliefern. Dann sehe ich auch die ClientIP beim SMTP-Receive. EventId Source OriginalClientIp ------- ------ ---------------- RECEIVE SMTP 192.168.5.20 AGENTINFO AGENT 192.168.5.20 HARECEIVE SMTP HADISCARD SMTP HAREDIRECT SMTP SEND SMTP Insofern müssen Sie hier gar nicht die SMTP-Logs von Exchange aktivieren. Nur bei komischen Protokoll-Problemen können Sie diese zusätzliche Funktion nutzen, um in den Logdateien den Client weiter zu analysieren. |
EWS |
Per Exchange Web Services (EWS) kann ich auch einfach Mails senden und sehe dann folgende Einträge: EventId Source OriginalClientIp ------- ------ ---------------- RECEIVE SMTP 192.168.5.20 AGENTINFO AGENT 192.168.5.20 HAREDIRECT SMTP HARECEIVE SMTP HADISCARD SMTP TRANSFER ROUTING SEND SMTP RECEIVE STOREDRIVER 192.168.5.20 SUBMIT STOREDRIVER 192.168.5.20 Das ist die Client-IP, die der Server/IIS sieht. Wenn der Client extern über einen Reverse-Proxy zugreift, dann kann es sein, dass der Proxy den Header "X-Forwarded-For" addieren muss, damit sie zumindest in den IISLogs mehr details erfahren können. |
ActiveSync |
Klassische Mobilclients können Sie per Exchange ActiveSync direkt mit dem Server verbinden. Der "Upload" von Nachrichten erfolgt hierbei natürlich per HTTPS gegen den IIS. EventId Source OriginalClientIp ------- ------ ---------------- RECEIVE SMTP 192.168.100.33 AGENTINFO AGENT 192.168.100.33 TRANSFER ROUTING SENDEXTERNAL SMTP RECEIVE STOREDRIVER SUBMIT STOREDRIVER Bei ActiveSync mit Exchange 2016 sehe ich hier als "OriginalClientIp" leider die IP-Adresse des Exchange Server. Wer hier die reale IP erhalten will, muss wohl oder übel die HTTP-Logs parsen. #Software: Microsoft Internet Information Services 8.5 #Version: 1.0 #Date: 2020-09-18 22:04:11 #Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) cs(Referer) sc-status sc-substatus sc-win32-status sc-bytes cs-bytes time-taken Request-Authorization X-Forwarded-For 2020-09-25 12:24:23 192.168.100.33 POST /Microsoft-Server-ActiveSync/default.eas User=user1@msxfaq.de&DeviceId=xxx&DeviceType=iPhone&Cmd=Sync&CorrelationID=<empty>;&cafeReqId=xxx-xxx-xxx-xxx-xxx; 443 user1@msxfaq.de 192.168.100.5 Apple-iPhone12C1/1801.393 - 200 0 0 1605 911 62 Basic+xxx 94.31.81.126 Selbst hier brauchen Sie bei einem ReverseProxy noch die Hilfe des "X-Forwarded-For"-Headers |
Outlook Mobile |
Die Outlook App kann sich mit dem lokalen Mailserver nur über die Cloud-Dienste von Microsoft verbinden, die dann nach zum On-Premises Exchange Server gehen.. EventId Source OriginalClientIp ------- ------ ---------------- RECEIVE SMTP 104.47.18.111 AGENTINFO AGENT 104.47.18.111 HAREDIRECT SMTP HARECEIVE SMTP HADISCARD SMTP SEND SMTP Die OriginalClientIP ist in dem Fall der einliefernde Exchange Online Server, wie ein NSLOOKUP ergibt. C:\>nslookup 104.47.18.111 Name: mail-am6eur05lp2111.outbound.protection.outlook.com Address: 104.47.18.111 Die reale Client-IP könnten Sie über die Anmeldungen im AzureAD-Portal weiter einkreisen. Einen Zugriff au die IISLogs haben sie ja nicht. |
Outlook Mobile Hybrid |
Mobile Clients über die Cloud kommen natürlich anders beim Exchange Server an. Bei einem Exchange Online Postfach landet die Mail natürlich in Exchange Online und mit einem Hybrid-Mode kommt die Mail per SMTP dann in die On-Premises-Umgebung. EventId Source OriginalClientIp ------- ------ ---------------- RECEIVE SMTP 104.47.18.111 AGENTINFO AGENT 104.47.18.111 HAREDIRECT SMTP HARECEIVE SMTP HADISCARD SMTP SEND SMTP Die OriginalClientIP ist in dem Fall der einliefernde Exchange Online Server, wie ein NSLOOKUP ergibt: C:\>nslookup 104.47.18.111 Name: mail-am6eur05lp2111.outbound.protection.outlook.com Address: 104.47.18.111 |
Das Feld "OriginalClientIp" ist also nur so brauchbar, wie Sie die Verbindung über Firewalls, Proxy-Server und NAT-Gateways konfiguriert haben. Wer vor seinen Exchange Server einen Loadbalancer stellt, der nicht nur die Ziel-Adresse sondern auch die Quell-Adresse ändert, wird in den Exchangelogs nur den Loadbalancer sehen. Für HTTP kann ein Layer-7-Loadbalancer den X-Forwarded-For-Header addieren, damit Sie dann über die IISLogs die Client-IP identifizieren können.
Exchange Online
Die Auswertung bei Exchange Online sieht etwas anders aus. Hier können wir auch per Browser oder PowerShell die Informationen erhalten. Allerdings sind hier zwei Commandlets und Rückgaben relevant. Zuerst brauchen wir den Vorgang als solches:
PS C:\> Get-MessageTrace -SenderAddress user1@msxfaq.de -RecipientAddress user2@@msxfaq.de | fl * PSComputerName : outlook.office365.com Organization : msxfaq.onmicrosoft.com MessageId : <messageid@AM8PR08MB5731.eurprd08.prod.outlook.com> Received : 24.05.2020 11:28:03 SenderAddress : user1@msxfaq.de RecipientAddress : user2@msxfaq.de Subject : Test Outlook Mobile Status : Delivered ToIP : 80.66.20.11 FromIP : 95.222.82.34 Size : 17144 MessageTraceId : <guid> StartDate : 22.05.2020 13:24:43 EndDate : 24.05.2020 13:24:43 Index : 0
Bei dem Befehl wird schon die "From-IP" hinterlegt. Hier ist zwar nicht zu erkennen, mit welchem Client die Mail eingeliefert wurde aber die IP-Adresse zeigt tatsächlich die "Public-IP".
C:\>nslookup 95.222.82.34 Name: ip-95-222-82-34.hsi15.unitymediagroup.de Address: 95.222.82.34
Die über "Get-MessageTraceDetail" gelieferten Werte haben gar keine Informationen mehr über die IP-Adresse des Clients:
$details = Get-MessageTrace -SenderAddress user1@msxfaq.de -RecipientAddress user2@msxfaq.de | Get-MessageTraceDetail $details[0] | fl* Message Trace ID : 2be3ae14-2bf1-4c94-975f-08d8607ce6d0 Message ID : <guid>@AM8PR08MB5731.eurprd08.prod.outlook.com> Date : 24.05.2020 11:28:04 Event : Empfangen Action : Detail : Nachricht empfangen von: AM0PR08MB5186.eurprd08.prod.outlook.com unter Verwendung von TLS1.2 mit AES256 Data : <root><MEP Name="ConnectorId" String="AM0PR08MB5186\Default AM0PR08MB5186"/><MEP Name="ClientIP" String="2603:10a6:20b:1c7::19"/><MEP Name="ServerHostName" String="AM0PR08MB5186.eurprd08.prod.outlook.com"/><MEP Name="FirstForestHop" String="AM0PR08MB5186.eurprd08.prod.outlook.com"/><MEP Name="DeliveryPriority" String="Normal"/><MEP Name="ReturnPath" String="user1@msxfaq.de"/><MEP Name="CustomData" Blob="S:tlsversion=SP_PROT_TLS1_2_SERVER;S:tlscipher=CALG_AES_256"/><MEP Name="SequenceNumber" Long="0"/><MEP Name="RecipientReference" String=""/></root>
Exchange Online scheint also ein anderes Datenmodell hier zu haben. Dieser Event war übrigens eine Mail per "Outlook for IOS".
- Get-MessageTrace
https://docs.microsoft.com/de-de/powershell/module/exchange/get-messagetrace?view=exchange-ps - Get-MessageTraceDetail
https://docs.microsoft.com/de-de/powershell/module/exchange/get-messagetracedetail?view=exchange-ps
Weitere Links
- Nachrichtentracking
- Message Tracking Exchange 2016
- X-Forwarded-For
- Exchange Web Services (EWS)
- FILE - Pickup Verzeichnis
- Hub Transport Logging
- Identify Source IP of SPAM In Exchange Server
https://www.aventistech.com/2020/04/identify-source-ip-of-spam-in-exchange/ - I don't see a true Client IP or hostname in message tracking
logs?
https://social.technet.microsoft.com/Forums/lync/en-US/fae4cc7e-f2c3-45bf-99d5-e000ba9b05e2/i-dont-see-a-true-client-ip-or-hostname-in-message-tracking-logs?forum=exchangesvradmin