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
Poprawne rozpoznanie i reakcja na DMARC wymaga wkompilowania DMARC,DKIM,SPF.
Gdy są one wkompilowane, możemy obsługiwać DMARC w sesji SMTP:
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