Dies ist eine alte Version des Dokuments!
Artikel befindet sich gerade in der Bearbeitung!
DMARC - Domain-based Message Authentication, Reporting & Conformance unter CentOS 7.x
DMARC1) ist an sich kein eigenständiger Prozess in der eMail-Verarbeitung, vielmehr erweitert DMARC auf die beiden Techniken SPF2) und DKIM3). DMARC ergänzt somit DKIM und SPF, ohne die DMARC nicht funktionieren kann. Hinweise zu DMARC findet man bei auch auf der Webseite von DMARC.org, oder im Entwurf der Network Working Group, die der ITF4) Anfang 2012 zur Prüfung vorgelegt wurde.
Obwohl DMARC aktuell noch als Entwurf gilt, wird laut den Angaben der aktuellen DMARC-Präsentation aus 2014 bereits mehr als 60% der weltweiten eMail-Postfächer mit Hilfe von DMARC geschützt.
Die weltgößten eMail-Provider setzen auf DMARC, wie z.B.:
- GMail, Yahoo, AOL, Comcast, oder Outlook.com
- Mail.ru (größter eMail-Provider in Russland)
- NetEase (größter eMail-Provider in China)
- XS4All (größter eMail-Provider in den Niederlanden)
Alles gute Gründe, sich dem Thema DMARC dennoch intensiver zu widmen!
Bei DMARC kann definiert werden, wie ein empfangender Mailserver Nachrichten behandeln und verarbeiten soll, insbesondere mit Hinblick auf die Bewertung der Versandberechtigung des einliefernden Mailservers (SPF) und der nicht veränderten Nachricht (DKIM). Fällt eine oder beide Überprüfungen negativ aus, definiert DMARC, ob die eMail in Quarantäne gestellt, die Annahme der eMail abgelehnt (reject) oder eben dennoch zugestellt werden soll.
Das nachfolgende Schaubild zeigt den Bearbeitungsverlauf einer eMail mit Berücksichtigung auf DMARC auf.
<uml width=900 title=„DMARC - Verarbeitungsschritte einer eMail“> skinparam defaultFontName Courier state „Absender Klaus generiert eMail“ as sender sender : ——————————————- sender : From: klaus@tachtler.net sender : To: michael@nausch.org sender : Subject: Gratulation! sender : Date: Thu, 20 Mar 2014 18:40:18 +0100 sender : ——————————————- sender : Nachrichtentext
state Mailserver_des_Absenders {
state "Mail-Eingang" as smtpd_a smtpd_a : Annahme der eMail smtpd_a : nach SPAM- und smtpd_a : Viren-Überprüfung
state "DKIM-Signatur" as dkim_sig dkim_sig : Einfügen der DKIM dkim_sig : Signatur (Mailheader dkim_sig : und Mailbody) im dkim_sig : Header der eMail
state "Mail-Ausgang" as smtp_a smtp_a : Versand der eMail smtp_a : zum eMail-Server (MTA) smtp_a : des Empfängers
}
state Mailserver_des_Empfängers {
state "Mail-Eingang" as smtpd_b smtpd_b : Bewertung der eMail smtpd_b : mit Hilfe von Blacklists smtpd_b : und greylisting
state "SPAM- und Virenüberprüfung" as amavis1 amavis1 : Bewertung der eingehenden Nachricht amavis1 : durch SPAM- und/oder Virenfilter
state "SPAM- und Virenüberprüfung" as amavis2 amavis2 : Bewertung der eingehenden Nachricht amavis2 : durch SPAM- und/oder Virenfilter
state "Mail-Quarantäne" as quarantäne quarantäne : Bestätigung (250) der Annahme an den quarantäne : sendenen Mailserver und Einstellung quarantäne : der Nachricht in die MAIL-Quarantäne
state "Annahme der eingehenden Nachricht" as imap imap : Bestätigung (250) der Annahme an den imap : sendenen Mailserver und Zustellung imap : der Nachricht in die INBOX des Empfängers
state "REJECT der eMail" as reject reject : Annahme der eMail verweigern reject : Rückmeldecode 500 an den reject : einliefernden Mailserver
state DMARC_Überprüfungen { state "DKIM-Signatur" as dkim_val dkim_val : Überprüfen der vorhandenen dkim_val : DKIM-Signatur im Mailheader dkim_val : der eingehenden Nachricht
state "SPF-Validierung" as spf_check spf_check : Überprüfung ob der spf_check : Versendene Mailserver spf_check : zum Mailversand der spf_check : Maildomäne berechtigt ist
state "Anwenden der DMARC-Policy" as dmarc_check dmarc_check : Bewertung der Legitimität dmarc_check : der eingehenden Nachricht dmarc_check : an Hand der DMARC-Policy dmarc_check : des absendenden Mailservers }
state DMARC_Ergebnis_Reports { state Report_aggregat { state "DMARC Check" as ok ok : Test O.K. ok : DMARC-policy -> Zustellung }
state Report_forensic { state "DMARC Check" as nok1 nok1 : Test nicht O.K.! nok1 : DMARC-policy -> Quarantäne
state "DMARC Check" as nok2 nok2 : Test nicht O.K.! nok2 : DMARC-policy -> REJECT } }
}
sender -down→ smtpd_a smtpd_a -left→ dkim_sig dkim_sig -left→ smtp_a smtp_a -down→ smtpd_b smtpd_b -right→ dkim_val dkim_val -right→ spf_check spf_check -right→ dmarc_check dmarc_check –> ok ok –> amavis1 dmarc_check –> nok1 dmarc_check –> nok2
amavis1 –> imap
nok1 –> amavis2 amavis2 –> quarantäne
nok2 –> reject
note left of smtpd_b
Standard Validierungs- Überprüfung, wie z.B. IP-Blacklists, greylisting und policyd-weight und ggf. weiteren Filtern
end note
note left of DMARC_Überprüfungen
Abfrage des DKIM public-keys ("DKIM"-TXT-Record) und der berechtigten Sender der Mail- Domäne ("SPF"-/TXT-Record) beim zuständigen Nameserver der Absendedomäne
end note
note right of dmarc_check
Abfrage der DMARC-Policy des absendenden Mail- Servers durch Abfrage des DMARC-/TXT-Record beim zuständigen Nameserver
end note
note right of Report_aggregat
regelmäßig aggregierter Bericht an den im DMARC- Record hinterlegten "rua=mailto"-Adresse des Mailserverbetreibers des Absender-Mailservers
end note
note left of Report_forensic
regelmäßiger forensischer Bericht an den im DMARC-Record hinterlegten "ruaf=mailto"- Adresse des Mailserver- betreibers des Absender- Mailservers
end note
</uml>
Zusammenspiel von DKIM, SPF und DMARC
Auch wenn DMARC noch immer im Status DRAFT5) ist, macht es doch Sinn, sich mit DMARC näher zu beschäftigen!
Möchten wir DMARC bei unserem Mailserver einsetzen, ist es wichtig, dass alle drei Komponenten via Milter6) an unseren Postfix-Mailserver angebunden werden. Nur so stehen dem DMARC-Daemon alle relevanten Headerinformationen zur Bewertung zur Verfügung.
Wir setzen daher bei unserer Installation jeweils folgende Pakete ein:
- SPF smf-spf aus Djangos-Repository
- DKIM opendkim aus dem EPEL
- DMARC opendmarc aus Djangos-Repository
Die Installation von SPF-Milter ist im Kapitel SPF - Sender Policy Framework und OpenDKIM-Milter im Kapitel DKIM - Domain Key Identified Mail genauer beschrieben.
DMARC-Record
Beschreibung des Datensatzes
Mit Hilfe des DMARC Record Assistant kann man sich sehr leicht und einfach den nötigen DMARC-Record generieren lassen, den man dann über einen TXT-Record der Subdomain _dmarc in seinem DNS einträgt. Im Kapitel 6.2. General Record Format des DMARC Standardisierungs-Entwurf ist die
Als Beispiel sehen wir uns nun den aktuellen DMARC-Record von nausch.org an, den wir u.a. mit dem Aufruf des Befehls host vom DNS-Server abfrsagen können.
# host -t TXT _dmarc.nausch.org
_dmarc.nausch.org descriptive text "v=DMARC1\; p=reject\; rua=mailto:postmaster@nausch.org\; ruf=mailto:django@nausch.org\; adkim=r\; aspf=r\; pct=100\; rf=afrf\; ri=86400\; sp=reject"
Die einzelnen Werte haben nun folgende Bedeutung.
Parameter | Art | Wert | Bedeutung |
---|---|---|---|
v | Plaintext; REQUIRED | DMARC1 | Identifiziert den Datensatz als DMARC-Record. Der Parameter muss als erster wert im DMARC-Record gesetzt sein. Fehlt dieser ist der gesamte DMARC-Record zu verwerfen! |
p | Plaintext; REQUIRED | reject | Beschreibt, wie der Empfänger die Nachrichten des Domain-Inhabers verwerten soll. Diese gilt auch für die Subdomains, sofern für diese mit dem Parameter sp keine separate Definition vorliegt. Mögliche Werte sind: ![]() ![]() ![]() |
sp | Plaintext;OPTIONAL | reject | Beschreibt, wie der Empfänger die Nachrichten des Domain-Inhabers einer Subdomäne verwerten soll. Der Parameter beschreibt nur die abgefragte Subdomäne, nicht die Domäne an sich! Der Syntax entspricht dem Parameter p. Wird der Paramter sp nicht gesetzt, gelten die Definitionen des Parameters p auch für alle Subdomänen. |
rua | Kommaseparierte plain-text Liste von DMARC URIs; OPTIONAL | mailto:postmaster@nausch.org | Der Domaininhaber wünscht, per eMail mit aufbereiteten Statiskdaten der verarbeiteten eMails, informiert zu werden. Ist dieser Parameter nicht gesetzt, braucht der Empfänger keine Statistikdaten aufbereiten. |
ruf | Kommaseparierte Plaintext Liste von DMARC URIs; OPTIONAL | mailto:django@nausch.org | Der Domaininhaber wünscht, per eMail mit detailierten forensischen Statiskdaten der verarbeiteten eMails, informiert zu werden. Ist dieser Parameter nicht gesetzt, braucht der Empfänger keine Statistikdaten aufbereiten. |
adkim | Plaintext; OPTIONAL; Default = relaxed | r | Definiert, wie konservativ das Ergebnis der DKIM-Signaturprüfung bewertet werden soll. Mögliche Werte sind entweder r=relaxed oder s=strikt. |
aspf | Plaintext; OPTIONAL; Default = relaxed | r | Definiert, wie konservativ das Ergebnis der SPF-Prüfung bewertet werden soll. Mögliche Werte sind entweder r=relaxed oder s=strikt. |
pct | Plaintext/Zahlenwert zwischen 0 und 100; OPTIONAL; Default = 100 | 100 | Der Domaininhaber wünscht, daß der angegebene Prozentwert an Nachrichten von den DMARC-Prüfungen benutzt werden soll. Der Wert beschreibt nicht das Verhältnis in den DMARC-Reports. |
rf | Kommaseparierte Plaintext Liste; OPTIONAL; Default = afrf | afrf | Der Domaininhaber wünscht, dass die aufbereiteten forensischen Prüfberichte im Format AFRF7) oder IODEF8) zu erhalten, wenn sowohl der DKIM- wie auch der SPF-Test negativ ausfällt. |
ri | Plaintext; OPTIONAL; Default = 86400 | 86400 | Der Domaininhaber wünscht, dass die aufbereiteten Statistik- und Forensikdaten spätestens alle „n“ Sekunden verschickt werden sollen. |
Generierung unseres DMARC-Records
Nach Erstellung des DMARC-Records von Hand oder über den DMARC Record Assistant, tragen wir demnach bei unserem zuständigen DNS entsprechenden eigenen und richtigen Daten ein.
_dmarc.nausch.org IN TXT "v=DMARC1\; p=reject\; rua=mailto:postmaster@nausch.org\; ruf=mailto:django@nausch.org\; adkim=r\; aspf=r\; pct=100\; rf=afrf\; ri=86400\; sp=reject"
Testen der DMARC Definitionen
Über die URL OTA Query Tool for SPF & DMARC Records der Online trust Alliance kann man online bei Bedarf testen, ob der DMARC-Eintrag soweit richtig ist.
Mit Hilfe der DMARC Inspectors kann man (s)einen DMARC-Record testen und sich die Optionen die der Domaininhaber gesetzt hat, beschreiben lassen. Möchte man seinen SPF-Record testen lassen, steht einem der SPF Surveyor zur Verfügung.
Zu guter Letzt kann mit dem DKIM Key Checker der, im DNS hinterlegte, DKIM-Schlüssel einer Domäne getestet werden.
Möchte man dann noch testen, ob der eigene Mailserver alle Voraussetzungen für eine DMARC-policy hat, schickt man einfach eine „leere eMail“ an checkmyauth@auth.returnpath.net, so erhält man anschließen einen ausführlichen Prüfbericht.
From: "Return Path" <noreply@returnpath.net> Subject: Return Path DKIM/SPF Reflector Report Date: Fri, 21 Mar 2014 03:58:12 -0600 (MDT) To: undisclosed-recipients:; Return Path DKIM/SPF Reflector Report ===================================== Source IP = 217.91.103.190 Mail From = django@nausch.org Identity Alignment Results ========================== SPF Domain Alignment Result = PASS The From domain 'nausch.org' is an exact match with the SPF domain 'nausch.org'. Note that the alignment policy is set to relaxed in your DMARC record. DKIM Domain Alignment Results: Result for DNS Record: 140224._domainkey.nausch.org = PASS The From domain 'nausch.org' is an exact match with the DKIM domain 'nausch.org'. Note that the alignment policy is set to relaxed in your DMARC record. DKIM Results ============ Result = pass Domain = nausch.org Selector = 140224 DNS Record(s) = 140224._domainkey.nausch.org TXT v=DKIM1; p=MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuJ3/CruOs3fCU0ujOStcNN85TJh+5HvMa9m99C5XuRBlxOr+fp5BeIEtiPO0szKvvPojwrueCq0oOuEzjR/i2ObpRkzKRUXmAa0qVezUZwQIbKeiuKII0PnpQclDrmQrzSXcQWPT57tkPg17Q9WamFUUaHeN3+pVGtMyjYekRaAoRlV+a1gD111kXMPhiaFTMIncoRBS/gYN8FjfekH+ezqbLHLB8DLJQBZEGUILvJjAHX0722XyqYtkn1qfv63nPRGw/qqAW1072Gchq4ZS4ZPQ89SrK4KcHt/XptSlztXMWtmRFQriHdvbjr1Fx7ZwXdTQ+ik2AUZLMdhMrQe6/1GujQiMD6po81NpYbrjnfd+QF4sUbus4wPQKVNzsctiuzGlWsFexSHP4dAZtKnImJhVDnzZODQy0nSafedlr5g4VR36vgm0YPWjSyRNnC/APHyw0DtHIrzTqfKuDeGv80uMPbEdujrw9gLbK3H8ow42iTicmgPgT3J5j70ZOo4o4FMtpZ/AEQw+VnWpSfw7bkMjufLc29XHbtp22wfgq2Lmarr3+psaHokFaQrImkMbzdSL9CdabkLptanAilLScvq8UaKVC+G1+vHDgaweq3BhXD5+YcJnJlp4msUqqxGYlnx4RSvv8PipMU2DsVFbNJSH5NJuS7GuzplNg+f20ysCAwEAAQ== Public Key Length = 4096 DomainKeys Results ================== No DomainKeys signature(s) found. SPF Results =========== Result = pass Domain = nausch.org DNS Record(s) = nausch.org TXT v=spf1 ip4:217.91.103.190/32 mx ?all DMARC Results ============= Domain = _dmarc.nausch.org DNS Record = _dmarc.nausch.org TXT v=DMARC1; p=reject; rua=mailto:postmaster@nausch.org; ruf=mailto:django@nausch.org; adkim=r; aspf=r; pct=100; rf=afrf; ri=86400; sp=reject DMARC Record Validation Results =============================== DMARC Errors Detected: None. Non-DMARC flags encountered (skipped): None. Visit http://www.returnpath.com/solution-content/dmarc-support/ for more information on DMARC record creation and validation.