Bei einem Office 365 Migrationsprojekt stolperte ich über folgenden SPF Fehler:
Authentication-Results: spf=permerror (sender IP is 40.107.1.124) smtp.mailfrom=KundenDomainXYZ.com; hotmail.com; dkim=pass (signature was verified) header.d=KundenDomain.onmicrosoft.com;hotmail.com; dmarc=none action=none header.from=KundenDomainXYZ.com; Received-SPF: PermError (protection.outlook.com: domain of KundenDomain.com used an invalid SPF mechanism)
Das interessante war, dass alle anderen Mail-Systeme (Barracuda) etc. die ausgehenden Emails des Kunden als korrekt durchliess – nur die Server von Microsoft (Office 365, Outlook.com etc.) meckerten immer.
Die gängingen SPF Validatoren fanden interessanterweise auch keinen Fehler im SPF Eintrag für die KundenDomäne:
v=spf1 mx ip4:XYZ.XYZ.XYZ.XYZ/32 include:spf.protection.outlook.com include:mail.kundenserverXZY.de ?all
Der Eintrag sollte die Emails vom Mail-Server mit der IP XYZ.XYZ.XYZ.XYZ als valide darstellen, genau wie die von Office 365 und dem on-premise Exchange-Server.
Ursache
Der Fehler bei Microsoft wurde durch die falschen Nutzung des “include:” Attributes in dem SPF Eintrag verursacht. Denn “include:” bedeutet, dass der Server nachschaut, ob es für “mail.kundenserverXZY.de eigene SPF Einträge existieren. Wenn dieser aber nicht existieren, dann wäre das Attribut “a:” korrekt.
Somit wurde der SPF Eintrag korrigiert:
v=spf1 mx ip4:XYZ.XYZ.XYZ.XYZ/32 include:spf.protection.outlook.com a:mail.kundenserverXZY.de ?all
und schon gingen die Emails durch:
Received-SPF: Pass (protection.outlook.com: domain of kundendomainxyz.com designates 40.107.1.131 as permitted sender) receiver=protection.outlook.com; client-ip=40.107.1.131; helo=EUR02-HE1-obe.outbound.protection.outlook.com;