Настройка OpenDMARC

Продолжаем настройку почтового сервера Postfix под Arch Linux. В данной записи пойдет речь по настройке OpenDMARC для фильтрации входящих почтовых сообщений.

Устанавливаем пакет OpenDMARC:

pacman -S opendmarc publicsuffix-list

Меняем права запуска. Необходимо сделать override для opendmarc:

systemctl edit opendmarc

Вставляем:

[Service]
Group=postfix
UMask=0007

Применяем изменения:

systemctl daemon-reload
systemctl stop opendmarc
rm -f /run/opendmarc/opendmarc.sock
systemctl start opendmarc
ls -l /run/opendmarc/opendmarc.sock

Делаем бекап конфигурационного файла по умолчанию, и очищаем файл:

cp /etc/opendmarc/opendmarc.conf /etc/opendmarc/opendmarc.conf.old
> /etc/opendmarc/opendmarc.conf

Далее открываем файл и добавляем туда базовый конфиг:

# Кто пишет Authentication-Results
AuthservID HOSTNAME
TrustedAuthservIDs HOSTNAME

# Сокет, к которому подключится Postfix (milter)
Socket local:/run/opendmarc/opendmarc.sock

# Логи
Syslog true
SyslogFacility mail

# Права на сокет
UserID opendmarc:postfix
UMask 0007

# Public Suffix List (организационные домены)
PublicSuffixList /usr/share/publicsuffix/public_suffix_list.dat

# --- ВАЖНО ДЛЯ SPF ---
# Не доверять SPF-результатам, пришедшим в заголовках, и проверять самим
SPFIgnoreResults true
SPFSelfValidate true

# Чтобы не проверять вашу исходящую почту (через SMTP AUTH)
IgnoreAuthenticatedClients true

# Режимы реакции:
#  - false: только добавляет Authentication-Results (мониторинг)
#  - true: отклоняет письма, которые НЕ прошли DMARC (по политике домена отправителя)
RejectFailures true

# --- ВАЖНО: карантин не держим ---
HoldQuarantinedMessages false

Подготовка /run сокета:

cat >/etc/tmpfiles.d/opendmarc.conf <<'EOF'
D /run/opendmarc 0750 opendmarc postfix
EOF

systemd-tmpfiles --create

Запускаем сервис:

systemctl enable --now opendmarc

Подключаем OpenDMARC в Postfix. Открываем конфиг:

nano /etc/postfix/main.cf

Находим параметр:

smtpd_milters = unix:/run/opendkim/opendkim.sock
non_smtpd_milters = $smtpd_milters

Меняем на:

smtpd_milters = unix:/run/opendkim/opendkim.sock, unix:/run/opendmarc/opendmarc.sock
non_smtpd_milters = $smtpd_milters

Применяем настройки:

postfix reload

Настраиваем перенос писем не прошедших проверку в спам. Открываем конфиг Dovecot:

nano /etc/dovecot/dovecot.conf

Добавляем в конец файла:

sieve_script dmark_policy_before {
  type = before
  path = /etc/dovecot/sieve/before.d/10-dmark-to-junk.sieve
}

Открываем файл правил:

nano /etc/dovecot/sieve/10-dmark-to-junk.sieve

Добавляем в содержимое:

require ["fileinto"];

if header :contains "Authentication-Results" "dmarc=fail" {
  fileinto "Junk";
  stop;
}

Компилируем правила:

sievec /etc/dovecot/sieve/10-dmark-to-junk.sieve

Применяем настройки:

systemctl restart dovecot

Далее настраиваем автостарт сервиса при падении:

mkdir -p /etc/systemd/system/opendmarc.service.d

cat > /etc/systemd/system/opendmarc.service.d/restart.conf <<'EOF'
[Unit]
StartLimitIntervalSec=300
StartLimitBurst=5

[Service]
Restart=on-failure
RestartSec=5s
EOF

Применяем настройки:

systemctl daemon-reload
systemctl restart opendmarc