3,9 KiB
3,9 KiB
DMARC Reporting done via Rspamd DMARC Module.
Rspamd documentation can be found here: https://rspamd.com/doc/modules/dmarc.html
Important:
- Before you use the examples below, change
example.com
,mail.example.com
andExample
to reflect your setup - DMARC reporting requires additional attention, especially over the first few days
- All receiving domains hosted on mailcow send from one reporting domain. Recommended to use parent domain of your
MAILCOW_HOSTNAME
, for example:- if your
MAILCOW_HOSTNAME=mail.example.com
then change your reporting config to matchdomain = "example.com";
- set
email
from the same domain also,email = "noreply-dmarc@example.com";
- if your
- This optional, but recommended step: create
noreply-dmarc
email user in mailcow to handle bounces.- Go to mailcow admin UI → Configuration → Mail Setup → Mailboxes → Add mailbox → Create mailbox
noreply-dmarc
, please choose correct domain - In case you want silently discard bounces: login in SOGo from this account and go to Preferences → Mail → Filters → Create Filter → Add action → Provide name, enter
noreply
and add action: Discard the message and save filter - In case you plan to resend a copy of reports to yourself, you need to add a condition to previous filter example
From is not noreply-dmarc@example.com
- Go to mailcow admin UI → Configuration → Mail Setup → Mailboxes → Add mailbox → Create mailbox
Enable DMARC Reporting
- Create or edit file in
data/conf/rspamd/local.d/dmarc.conf
and set contents to:
reporting {
enabled = true;
email = 'noreply-dmarc@example.com';
domain = 'example.com';
org_name = 'Example';
helo = 'rspamd';
smtp = 'postfix';
smtp_port = 25;
from_name = 'Example DMARC Report';
msgid_from = 'rspamd.mail.example.com';
max_entries = 2k;
keys_expire = 2d;
}
- Create
docker-compose.override.yml
or merge with your existing one:
version: '2.1'
services:
rspamd-mailcow:
environment:
- MASTER=${MASTER:-y}
labels:
ofelia.enabled: "true"
ofelia.job-exec.rspamd_dmarc_reporting.schedule: "@every 24h"
ofelia.job-exec.rspamd_dmarc_reporting.command: "/bin/bash -c \"[[ $${MASTER} == y ]] && /usr/bin/rspamadm dmarc_report > /var/lib/rspamd/dmarc_reports_last_log 2>&1 || exit 0\""
ofelia-mailcow:
depends_on:
- rspamd-mailcow
- Run
docker-compose up -d
Send a copy reports to yourself
To receive a hidden copy of reports generated by Rspamd you can set a bcc_addrs
list in reporting
section.
reporting {
enabled = true;
email = 'noreply-dmarc@example.com';
bcc_addrs = ["noreply-dmarc@example.com","parsedmarc@example.com"];
...
Rspamd will load changes in real time, no need to restart it.
This useful in case:
- you want to check that your DMARC Reports send correctly, check that they signed by DKIM, etc.
- you want to analyze own reports to get statics data, for example use with ParseDMARC or other analytic system
Troubleshooting
Check when the report schedule last ran
docker-compose exec rspamd-mailcow date -r /var/lib/rspamd/dmarc_reports_last_log
See last report output
docker-compose exec rspamd-mailcow cat /var/lib/rspamd/dmarc_reports_last_log
Manually Trigger DMARC report
docker-compose exec rspamd-mailcow rspamadm dmarc_report
Validate that Rspamd has recorded data in Redis
docker-compose exec redis-mailcow redis-cli KEYS 'dmarc;*'
docker-compose exec redis-mailcow redis-cli HGETALL "dmarc;example.com;20211231"
Change DMARC Reporting Frequency
In the example above reports are send once a 24 hours. To change this behaviour:
- Adjust
ofelia.job-exec.rspamd_dmarc_reporting.schedule: "@every 24h"
to desired value indocker-compose.override.yml
- Run
docker-compose up -d
- Run
docker-compose restart ofelia-mailcow
Disable DMARC Reporting
To disable reporting:
- Set
enabled
tofalse
indata/conf/rspamd/local.d/dmarc.conf
- Revert changes done to
docker-compose.override.yml
- Run
docker-compose up -d