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".

Weitere Links