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