SPF / DKIM / DMARC

Hallo zusammen,

In den letzten Tagen habe ich mich mit verschiedenen Techniken auseinandergesetzt, welche die Echtheit der Mails bestätigen und somit helfen Spam zu bekämpfen.

Sender Policy Framework (SPF)

Das Sender Policy Framework basiert auf der Tatsache, dass Emails von einer Domäne meist nur von einem Mailserver versendet werden. Mit diesem Framework kann man anderen Mailservern mitteilen, welche Mailserver autorisiert sind, Mails mit dieser Domäne zu versenden. Ausgewertet wird ein DNS Record vom Typ TXT welcher in DNS eingetragen ist und die Liste der Mailserver enthält, bei welchen im FROM Header die Domäne vorkommt.

Beim weiterleiten von Nachrichten kann dies jedoch zu Problemen führen. Ansonsten ist das eine sehr zuverlässige Technik.

 

Tag Zweck Beispiel
v Version v=spf1
mx Mails Exchange mx
ip4 IPv4 Adresse

ip4:1.2.3.4 oder Ip4:1.2.3.4/24

ip6 IPv6 Adresse ip6:1080::8:800:200C:417A/96
a Domain oder FQDN a:icewolf.ch oder a:webserver.icewolf.ch
ptr Pointer ptr:otherdomain.com
include SPF Record von der Domäne ebenfalls verwenden include:example.com
redirect Redirect SPF Lookup to the Domain redirect=example.com
exp explanation string in the TXT Record of Domain exp=example.com

Bei jedem der obengenannten Tags kann man ein Qualifizierungszeichen verwenden.

"+" Pass
"-" Fail
"~" SoftFail
"?" Neutral

Um nur die Mailserver der Domäne zu autorisieren reicht folgender Eintrag "v=spf1 mx  -all"

Um den SPF Eintrag für eine Domäne abzufragen, gibt man folgenden Befehl ein

nslookup -type=txt yahoo.com

DomainKeys Identified Mail (DKIM)

DKIM wurde von Cisco und Yahoo im Jahr 2005 entwickelt. Mittlerweile ist das von ein Standard der IETF und die aktuelle Version ist das folgende RFC http://www.ietf.org/rfc/rfc6376.txt

Bei DKIM wurde das Problem von weitergeleiteten Nachrichten angegangen. Bei dieser Technik wird jeder Nachricht signiert und die Hashwerte im Header der Mail gespeichert. Dazu werden Zertifikate benötigt und der Public Key wird im DNS veröffentlicht was nicht mehr ganz so einfach ist. Es gibt auch einen Keychecker http://dkimcore.org/tools/keycheck.html

 

Tag Zweck Beispiel
v Version(Required) v=1
a algorithm used to generate the signature (Required) a=rsa-sha256
b The signature data (Base64) (Required)
bh The hash of the canonicalized body part (Required) bh=4mYWi8+h2G1DZC07cyp6wqZr0aHaW/dYyoHq+aN7aRs=
c Header/Body Message canonicalization (Optional) c=relaxed/relaxed
d The SDID claiming responsibility (Required) d=gmail.com
h Signed header fields h=mime-version:date:message-id:subject:from:to:content-type
i The Agent or User Identifier = AUID (Optional) i=@eng.example.net
l Body length count (Optional)
q A colon-separated list of query methods used to retrieve the public key q=dns/txt
s The selector subdividing the namespace for the "d=" tag (Required) s=20120113
t Signature Timestamp (Recommended) t=1117574938
x ignature Expiration (Recommended) x=1118006938
z Copied header fields (Optional) z=From:foo@eng.example.net|To:joe@example.com


Und so sieht DKIM im Header eines Emails aus.

Wenn man nun den TXT Record samt Selector abfragt, erhält man den Public Key

nslookup -type=txt 20120806._domainkey.accounts.google.com


Domain-based Message Authentication, Reporting and Conformance (DMARC)

DMARC ist ein System, welches auf SPF und/oder DKIM aufsetzt und bestimmt, was mit den Nachrichten passieren soll.

https://support.google.com/a/answer/2466563?hl=en
http://de.wikipedia.org/wiki/DMARC
http://dmarc.org/overview/

Weitere Informationen

http://blogs.msdn.com/b/tzink/archive/2013/04/27/how-to-setup-dmarc-records-if-you-are-outsourcing-some-or-all-of-your-email-part-1.aspx
http://blogs.office.com/2015/01/20/enhanced-email-protection-dkim-dmarc-office-365/
http://blogs.msdn.com/b/tzink/archive/2014/12/03/using-dmarc-in-office-365.aspx
http://www.netal.com/dkimx.htm 
http://www.msxfaq.de/spam/dmarc.htm

 

Tag Name Zweck Beispiel
v Protocol version v=DMARC1
pct  Percentage of messages subjected to filtering pct=20
ruf  Reporting URI for forensic reports ruf=mailto:authfail@example.com
rua  Reporting URI of aggregate reports rua=mailto:aggrep@example.com
p  Policy for organizational domain p=none/quarantine/reject
sp  Policy for subdomains of the OD sp=none/quarantine/reject
adkim  Alignment mode for DKIM adkim=s (r=relaxed mode/s=strict mode)
aspf  Alignment mode for SPF  aspf=r (r=relaxed mode/s=strict mode)

Um den DMARC Eintrag einer Domain abzufragen wird ein TXT Eintrag mit dem Prefix "_dmarc" und der Domäne abgefragt.

Mit folgendem Befehl fragt man einen DMARC Eintrag einer Domäne ab

nslookup -type=txt _dmarc.yahoo.com

Ich habe mir ebenfalls einen DMARC Eintrag angelegt _dmarc.icewolf.ch TXT

"v=DMARC1; p=none; sp=none; rua=mailto:postmaster@icewolf.ch"

Und dann habe ich ein Mail an meine @outlook.com Adresse gesendet. Um Mitternacht habe ich dann eine RUA Meldung erhalten. Nur eine ZIP Datei im Anhang

In der ZIP Datei ist eine XML Datei versteckt, welche die Reportingdaten enthält

Grüsse
Andres Bohren