Перейти к содержанию

DMARC Reporting

Отчетность DMARC осуществляется через модуль Rspamd DMARC.

Документацию Rspamd можно найти здесь: https://rspamd.com/doc/modules/dmarc.html

Важно:

  1. Замените example.com, mail.example.com и Example в соответствии с вашей конфигурацией.

  2. Отчетность DMARC требует дополнительного внимания, особенно в первые несколько дней.

  3. Все принимающие домены, размещенные в animails, отправляют отчеты с одного домена отчетности. Рекомендуется использовать родительский домен вашего MAILCOW_HOSTNAME:

    • Если ваш MAILCOW_HOSTNAMEmail.example.com, измените следующий параметр конфигурации на domain = "example.com";
    • Аналогично настройте email, например: email = "noreply-dmarc@example.com";
  4. Рекомендуется (но не обязательно) создать почтового пользователя noreply-dmarc в animails для обработки рикошетных сообщений (bounces).

Включение отчетности DMARC

Создайте файл data/conf/rspamd/local.d/dmarc.conf и установите следующее содержимое:

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;
}

Создайте или измените docker-compose.override.yml в корневой директории animails:

services:
  rspamd-animails:
    environment:
      - MASTER=${MASTER:-y}
    labels:
      ofelia.enabled: "true"
      ofelia.job-exec.rspamd_dmarc_reporting_yesterday.schedule: "@every 24h"
      ofelia.job-exec.rspamd_dmarc_reporting_yesterday.command: "/bin/bash -c \"[[ $${MASTER} == y ]] && /usr/bin/rspamadm dmarc_report $(date --date yesterday '+%Y%m%d') > /var/lib/rspamd/dmarc_reports_last_log 2>&1 || exit 0\""
  ofelia-animails:
    depends_on:
      - rspamd-animails

Запустите стек animails командой:

docker compose up -d
docker-compose up -d

Отправка копий отчетов себе

Чтобы получать скрытую копию отчетов, созданных Rspamd, вы можете настроить список bcc_addrs в секции reporting конфигурационного файла data/conf/rspamd/local.d/dmarc.conf:

reporting {
    enabled = true;
    email = 'noreply-dmarc@example.com';
    bcc_addrs = ["noreply-dmarc@example.com","parsedmarc@example.com"];
[...]

Rspamd загружает изменения в режиме реального времени, поэтому перезапуск контейнера на данном этапе не требуется.

Это может быть полезно, если вы...

  • ...хотите убедиться, что ваши отчеты DMARC отправляются корректно и проходят аутентификацию.
  • ...хотите анализировать собственные отчеты для получения статистики, например, для использования в ParseDMARC или других аналитических системах.

Устранение неполадок

Проверьте время последнего запуска расписания отчетов:

docker compose exec rspamd-animails date -r /var/lib/rspamd/dmarc_reports_last_log
docker-compose exec rspamd-animails date -r /var/lib/rspamd/dmarc_reports_last_log

Просмотрите вывод последнего отчета:

docker compose exec rspamd-animails cat /var/lib/rspamd/dmarc_reports_last_log
docker-compose exec rspamd-animails cat /var/lib/rspamd/dmarc_reports_last_log

Запустите формирование отчета DMARC вручную:

docker compose exec rspamd-animails rspamadm dmarc_report
docker-compose exec rspamd-animails rspamadm dmarc_report

Убедитесь, что Rspamd записал данные в Redis: замените 20220428 на интересующую вас дату.

docker compose exec redis-animails redis-cli SMEMBERS "dmarc_idx;20220428"
docker-compose exec redis-animails redis-cli SMEMBERS "dmarc_idx;20220428"

Возьмите одну из строк вывода, которая вас интересует, и запросите ее, например:

docker compose exec redis-animails redis-cli ZRANGE "dmarc_rpt;microsoft.com;mailto:d@rua.agari.com;20220428" 0 49
docker-compose exec redis-animails redis-cli ZRANGE "dmarc_rpt;microsoft.com;mailto:d@rua.agari.com;20220428" 0 49

Изменение частоты отправки отчетов DMARC

В приведенном выше примере отчеты отправляются раз в 24 часа за вчерашний день. Этого достаточно для большинства систем.

Если у вас большой объем почты и вы хотите запускать отчетность DMARC чаще одного раза в день, вам нужно создать второе расписание и запустить его с параметром dmarc_report $(date '+%Y%m%d') для обработки текущего дня. Важно убедиться, что первый запуск в день также обрабатывает последний отчет за предыдущий день, поэтому его нужно запускать дважды: один раз с $(date --date yesterday '+%Y%m%d') в 00:05 (0 5 0 * * *) и затем с $(date '+%Y%m%d') с нужным интервалом.

Расписание Ofelia имеет ту же реализацию, что и cron в Go; поддерживаемый синтаксис описан в документации cron.

Чтобы изменить расписание:

  1. Отредактируйте docker-compose.override.yml:
services:
  rspamd-animails:
    environment:
      - MASTER=${MASTER:-y}
    labels:
      ofelia.enabled: "true"
      ofelia.job-exec.rspamd_dmarc_reporting_yesterday.schedule: "0 5 0 * * *"
      ofelia.job-exec.rspamd_dmarc_reporting_yesterday.command: "/bin/bash -c \"[[ $${MASTER} == y ]] && /usr/bin/rspamadm dmarc_report $(date --date yesterday '+%Y%m%d') > /var/lib/rspamd/dmarc_reports_last_log 2>&1 || exit 0\""
      ofelia.job-exec.rspamd_dmarc_reporting_today.schedule: "@every 12h"
      ofelia.job-exec.rspamd_dmarc_reporting_today.command: "/bin/bash -c \"[[ $${MASTER} == y ]] && /usr/bin/rspamadm dmarc_report $(date '+%Y%m%d') > /var/lib/rspamd/dmarc_reports_last_log 2>&1 || exit 0\""
  ofelia-animails:
    depends_on:
      - rspamd-animails
  1. Перезапустите необходимые контейнеры:

    docker compose up -d
    
    docker-compose up -d
    
  2. Перезапустите только контейнер ofelia:

    docker compose restart ofelia-animails
    
    docker-compose restart ofelia-animails
    

Отключение отчетности DMARC

Чтобы отключить отчетность:

  1. Установите enabled в значение false в файле data/conf/rspamd/local.d/dmarc.conf.

  2. Отмените изменения, внесенные в docker-compose.override.yml для rspamd-animails и ofelia-animails.

  3. Перезапустите необходимые контейнеры:

    docker compose up -d
    
    docker-compose up -d