If you cannot or do not want to install opendmarc, here is a method I have tested. It uses exim's built in DNS lookup to get the DMARC policy and can easily be extended to get other aspects, such as DMARC reporting, etc.

Once you have the DMARC policy, you can then use it AFTER looking up SPF and DKIM to enable an action according to DMARC policy.

RFC states that BOTH SPF AND DKIM must fail (if both exist) to enforce DMARC policy. If EITHER SPF or DKIM pass and DMARC exists, the mail must be accepted.

This gets added in your acl_smtp_rcpt section:

# Get DMARC policy

require

   set acl_m_dmarc_txt = ''

  set acl_m_dmarcpolicy = ''

warn
       set acl_m_dmarc_txt = ${lookup dnsdb{txt=_dmarc.$sender_address_domain}}
     set acl_m_dmarcvalid = 0

  # Validate
  warn
                        condition = ${if match{$acl_m_dmarc_txt}{\N(?i).*(v=DMARC).*\N}{yes}{no}}
     set acl_m_dmarcvalid = 1

  warn
                        condition = ${if match{$acl_m_dmarc_txt}{\N(?i).*(p=reject).*\N}{yes}{no}}
                        condition = ${if ={$acl_m_dmarcvalid}{1}}
   set acl_m_dmarcpolicy = reject

  warn
                       condition = ${if match{$acl_m_dmarc_txt}{\N(?i).*(p=quarantine).*\N}{yes}{no}}
                       condition = ${if ={$acl_m_dmarcvalid}{1}}
  set acl_m_dmarcpolicy = quarantine

  warn
                       condition = ${if match{$acl_m_dmarc_txt}{\N(?i).*(p=none).*\N}{yes}{no}}
                       condition = ${if ={$acl_m_dmarcvalid}{1}}
  set acl_m_dmarcpolicy = none

--

Evan Booyens
Platform Engineer
xneelo (Pty) Ltd

SA Contact Centre: 0861 0861 08
International: +27 21 970 2000

<https://xneelo.co.za>

Disclaimer: xneelo.co.za/email-disclaimer <https://xneelo.co.za/email-disclaimer>
--
## List details at https://lists.exim.org/mailman/listinfo/exim-users
## Exim details at http://www.exim.org/
## Please use the Wiki with this list - http://wiki.exim.org/

Reply via email to