Rekord DMARC.
Rekord DMARC, podobnie jak SPF, jest zapisem w strefie DNS domeny. Zawiera on informacje dotyczące akcji podejmowanych przez MTA odbiorcy, które my sami temu MTA "podpowiadamy".
Aby DMARC działał poprawnie, konieczne jest wcześniejsze zdefiniowanie rekordu SPF dla domeny. Rekord SPF zawiera informację o autentyczności MTA wysyłającego, natomiast DMARC zawiera politykę, którą MTA przyjmujący powienien przyjąć w momencie odbierania wiadomości e-mail.
Tak więc to właściciel domeny, korzystając z DMARC podaje odbiorcom poczty instrukcje, co mają robić z otrzymywanymi wiadomościami. Oczywiście chodzi tutaj o politykę dotyczącą zafałszowanych wiadomości e-mail, dla których MTA odbierający może przyjąć podane przez nas zasady, np. odrzucenie wiadomości, skierowanie jej do kwarantanny lub jej przyjęcie mimo tego, że jest zafałszowana, czyli niezgodna z SPF.
Oprócz polityki przyjmowania fałszywych wiadomości, DMARC zawiera inne instrukcje, takie jak np. raportowanie stanu wiadomości z naszej domany na podany adres e-mail, format tego raportu, jego częstotliwość, procent sprawdzania wiadomości z naszej domeny, politykę dla subdomen, stopień dopasowania DKIM i SPF do DMARC.
Przykładowy rekord DMARC w strefie bind'a:
_dmarc	86400	IN	TXT	"v=DMARC1; p=reject; sp=reject; adkim=s; aspf=s; rf=afrf; fo=1; pct=100; rua=mailto:postmaster@domain.tld;"
Przykładowa reakcja na DMARC dla MTA Exim.
Najpierw sprawdzamy, czy Exim ma wkompilowaną obsługę DMARC:
server#exim -bV
Support for: crypteq IPv6 Perl OpenSSL move_frozen_messages Content_Scanning  DNSSEC Event OCSP PIPE_CONNECT PRDR DKIM SPF DMARC TCP_Fast_Open Experimental_SRS
acl_smtp_data:
 defer
    dmarc_status	= nofrom : temperror
    !authenticated	= *
    message		= DMARC: status=$dmarc_status \n $dmarc_status_text \n policy=$dmarc_domain_policy
    log_message		= DMARC: status=$dmarc_status Text=$dmarc_status_text policy=$dmarc_domain_policy
    delay		= 5s
 defer
     dmarc_status	= quarantine
     !authenticated	= *
     message		= DMARC: status=$dmarc_status \n $dmarc_status_text \n policy=$dmarc_domain_policy
     log_message	= DMARC: status=$dmarc_status Text=$dmarc_status_text policy=$dmarc_domain_policy
     delay		= 10s
 deny
     dmarc_status	= reject
     !authenticated	= *
     message		= DMARC: status=$dmarc_status \n $dmarc_status_text \n policy=$dmarc_domain_policy
     log_message	= DMARC: status=$dmarc_status Text=$dmarc_status_text policy=$dmarc_domain_policy
 warn
     dmarc_status	= accept
     !authenticated	= *
     add_header		= X-DMARC: $dmarc_status [$dmarc_status_text]
     add_header		= X-TRACK-MSGID: ${hmac{md5}{SecretPassword}{$primary_hostname $message_id $tod_log}
 warn
     dmarc_status	= none : norecord : off
     !authenticated	= *
     log_message	= DMARC: status=$dmarc_status Text=$dmarc_status_text policy=$dmarc_domain_policy
     add_header		= X-DMARC: $dmarc_status [$dmarc_status_text]
     add_header		= X-TRACK-MSGID: ${hmac{md5}{SecretPassword}{$primary_hostname $message_id $tod_log}}
     delay		= 30s
