DMARC (Domain-based Message Authentication, Reporting and Conformance) allows email administrators to prevent hackers from impersonating their organization. This type of attack is also called “spoofing” because the message appears to come from the spoofed organization or domain.

This document specifies the vSMTP implementation of the Domain-based Message Authentication, Reporting and Conformance (DMARC) protocol described in RFC 7489.

<!> DMARC reporting and DMARC feedback system are not implemented.

In order to counter spoofing attacks, DMARC uses SPF and DKIM protocols.

When a message appears to come from an organization, but does not pass authentication checks or does not meet the authentication criteria, DMARC policy tells mail servers what action to perform.

The DMARC implementation of vSMTP support the Mail Receiver part, and apply the policy specified in the DNS record.

We will setup DMARC in this tutorial by:

  • Setting up SPF.
  • Setting up DKIM.
  • Adding filtering using DMARC.

We will use the domain for this example, but feel free to replace it by your own domain.

Setup SPF

See the Using SPF tutorial.

Setup DKIM

See the Using SPF tutorial.

Filtering with DMARC

Add this rule to the domain-available/ script.

  preq: [
    rule "check dmarc" || dmarc::check(),

Filter emails using DMARC

This rule will conducts SPF and DKIM authentication checks by passing the necessary data to their respective modules. The results of these are passed to the DMARC module along with the Author’s domain. The DMARC module attempts to retrieve a policy from the DNS for that domain. If a policy is found, it is combined with the Author’s domain and the SPF and DKIM results to produce a DMARC policy result (“pass” or “fail”).