DMARC

Domain-based Message Authentication, Reporting & Conformance

DMARC definiert, was mit E-Mails passieren soll, die SPF oder DKIM nicht bestehen. Es ist die Policy-Schicht über SPF und DKIM.


Warum DMARC?

Problem ohne DMARC:

E-Mail failed SPF und DKIM
  → Was soll der Empfänger tun?
  → Durchlassen? Blockieren? Spam-Ordner?
  → Jeder Mailserver entscheidet anders

Lösung mit DMARC:

Domain-Owner definiert Policy:
  "Bei SPF/DKIM Fail: Bitte blockieren!"

Empfänger:
  → Befolgt die Policy
  → Blockiert E-Mail ✓

Funktionsweise

1. Empfänger prüft SPF und DKIM

2. SPF/DKIM failed?
   → Hole DMARC-Policy aus DNS

3. DMARC-Policy sagt:
   - "none": Nichts tun (nur berichten)
   - "quarantine": In Spam-Ordner
   - "reject": E-Mail ablehnen

4. Empfänger befolgt Policy

5. Empfänger sendet Report an Domain-Owner

DMARC-Record

_dmarc.example.com. IN TXT "v=DMARC1; p=reject; rua=mailto:[email protected]"

Aufbau:

Policies

none (Monitoring-Mode)

p=none

Bedeutung:

quarantine (Spam-Ordner)

p=quarantine

Bedeutung:

reject (Ablehnen)

p=reject

Bedeutung:

Alignment

DMARC prüft "Alignment":

Von: [email protected]

SPF Alignment:
  Return-Path: [email protected]  → Aligned ✓
  Return-Path: [email protected]    → Not Aligned ✗

DKIM Alignment:
  d=example.com → Aligned ✓
  d=other.com   → Not Aligned ✗

Alignment-Modi:

aspf=r  → Relaxed SPF Alignment (Subdomains OK)
aspf=s  → Strict SPF Alignment (exakte Domain)

adkim=r → Relaxed DKIM Alignment (Subdomains OK)
adkim=s → Strict DKIM Alignment (exakte Domain)

Vollständiger Record

_dmarc.example.com. IN TXT "v=DMARC1; p=reject; rua=mailto:[email protected]; ruf=mailto:[email protected]; pct=100; adkim=r; aspf=r; fo=1"

Parameter:

Reports

Aggregate Reports (rua)

Täglich:

Beispiel:

<record>
  <source_ip>203.0.113.50</source_ip>
  <count>42</count>
  <policy_evaluated>
    <disposition>none</disposition>
    <spf>pass</spf>
    <dkim>pass</dkim>
  </policy_evaluated>
</record>

Forensic Reports (ruf)

Bei jedem Fail:

Schrittweise Einführung

Phase 1: Monitoring (p=none)

_dmarc.example.com. IN TXT "v=DMARC1; p=none; rua=mailto:[email protected]"

Ziel: Reports sammeln, nichts blockieren

Phase 2: Partial Quarantine

_dmarc.example.com. IN TXT "v=DMARC1; p=quarantine; pct=10; rua=mailto:[email protected]"

Ziel: 10% in Quarantäne, 90% noch durch

Phase 3: Full Quarantine

_dmarc.example.com. IN TXT "v=DMARC1; p=quarantine; pct=100; rua=mailto:[email protected]"

Ziel: Alle Fails in Spam-Ordner

Phase 4: Reject

_dmarc.example.com. IN TXT "v=DMARC1; p=reject; rua=mailto:[email protected]"

Ziel: Alle Fails ablehnen

Subdomain-Policy

_dmarc.example.com. IN TXT "v=DMARC1; p=reject; sp=quarantine; rua=mailto:[email protected]"

Testing

# DMARC-Record abfragen
dig TXT _dmarc.example.com

# Test-E-Mail senden
# → Reports analysieren

Online-Tools:

Häufige Fehler

❌ Fehler 1: Sofort p=reject

Tag 1: p=reject
→ Legitime E-Mails werden blockiert
→ Chaos ✗

Besser: Langsam steigern (none → quarantine → reject)

❌ Fehler 2: Keine Reports-Adresse

"v=DMARC1; p=reject"
→ Keine rua= Adresse
→ Keine Reports
→ Blind gegenüber Problemen

❌ Fehler 3: SPF/DKIM nicht konfiguriert

DMARC ohne SPF/DKIM = Nutzlos
→ Alle E-Mails fallen durch

Zusammenspiel

E-Mail kommt an:

1. SPF-Check:
   - Server erlaubt? → Pass/Fail

2. DKIM-Check:
   - Signatur gültig? → Pass/Fail

3. DMARC-Check:
   - SPF ODER DKIM passed UND aligned? → Pass
   - Beide failed? → Fail
     → Policy anwenden (none/quarantine/reject)

4. Report senden an Domain-Owner
SPF + DKIM + DMARC = Vollständiger Schutz

DMARC ist die Policy-Schicht über SPF und DKIM. Alle drei zusammen bieten starken E-Mail-Schutz!