До основного вмісту

SPF, DKIM та DMARC: повне налаштування захисту email

Домени · 19.04.2026 · 5 хв читання
Ілюстрація до статті «SPF, DKIM та DMARC: повне налаштування захисту email»

На VPS із власним Postfix вся відповідальність за репутацію вихідної пошти лежить на вас: немає готової інфраструктури провайдера, яка вже прогріта і налаштована. DKIM, SPF і DMARC на саморобному поштовому сервері — не опціональне посилення, а мінімум, без якого листи масово летять у спам або відхиляються з першого дня.

Встановлення OpenDKIM

apt install opendkim opendkim-tools -y

# Генерація ключів
mkdir -p /etc/opendkim/keys/yourdomain.com
cd /etc/opendkim/keys/yourdomain.com
opendkim-genkey -t -s mail -d yourdomain.com
chown opendkim:opendkim mail.private

Отримання публічного ключа для DNS

cat /etc/opendkim/keys/yourdomain.com/mail.txt
# Додайте цей запис у DNS як TXT для:
# mail._domainkey.yourdomain.com

Повний набір DNS-записів

ЗаписТипІм'яЗначення
MXMX@mail.yourdomain.com (priority 10)
SPFTXT@v=spf1 mx ~all
DKIMTXTmail._domainkeyv=DKIM1; k=rsa; p=PUBLICKEY
DMARCTXT_dmarcv=DMARC1; p=none; rua=mailto:dmarc@yourdomain.com

На відміну від готових поштових сервісів, де MX, SPF і DKIM провайдер видає вже узгодженим набором, на VPS усі чотири записи збираються вручну і повинні посилатися одне на одне без протиріч: домен у MX, домен у SPF і селектор в імені DKIM-запису зобов'язані збігатися з тим, що реально прописано в конфігурації Postfix та OpenDKIM.

Перевірка DKIM-підпису

# Тест підпису
opendkim-testkey -d yourdomain.com -s mail -vvv

# Перевірка після відправлення
# Заголовок листа повинен містити:
# DKIM-Signature: v=1; a=rsa-sha256; d=yourdomain.com; s=mail...
💡 Починайте з p=none у DMARC — це режим моніторингу. Після тижня вивчення звітів переходьте до p=quarantine, потім p=reject.

Часті помилки OpenDKIM

ПовідомленняПричинаРішення
opendkim: mail.private: No such file or directoryШлях KeyFile у /etc/opendkim.conf не збігається з реальним розташуванням ключаЗвірити шлях у конфігу з виводом ls /etc/opendkim/keys/yourdomain.com/
body hash did not verify (DKIM-Signature)Лист змінився після підпису — наприклад, проміжний сервер додав футер розсилкиВиключити такі маршрути з relay або підписувати лист після всіх модифікацій тіла
key not found in DNS (opendkim-testkey)TXT-запис ще не поширився або селектор у DNS не збігається з іменем у конфігуПеревірити dig TXT mail._domainkey.yourdomain.com і зачекати TTL
Postfix: reject: 550 5.7.1 SPF check failedIP вихідного сервера не входить до SPF-запису домену відправника (чужий релей)Додати IP сервера в SPF через механізм ip4: у власника домену-відправника

Перший крок за будь-якої з цих помилок — подивитися /var/log/mail.log (Debian/Ubuntu) або /var/log/maillog (RHEL-родина): там видно, на якому етапі Postfix і milter OpenDKIM обробили лист і з яким саме кодом відмови, а не гадати за симптомами з боку отримувача.

Від p=none до p=reject: план переходу DMARC

ЕтапЗначення pТривалістьЩо відбувається
Моніторингp=none1–2 тижніЗбираються звіти rua, жоден лист не блокується
Частковий карантинp=quarantine; pct=251 тижденьЧверть непройдених листів потрапляє у спам у отримувачів
Повний карантинp=quarantine; pct=1001–2 тижніУсі непройдені листи йдуть у спам
Відхиленняp=rejectпостійноЛисти без коректних DKIM/SPF відхиляються на прийомі

На власному VPS звіти rua надходять звичайним листом на вказану скриньку у вигляді XML усередині gzip-архіву — готової панелі для їх читання, як у великих провайдерів пошти, немає. На практиці їх або парсять самописним скриптом, або заводять окремий безкоштовний сервіс на кшталт dmarcian, який приймає пересилання цих листів і будує таблицю джерел відправлення за вас.

Перевірка SPF і DMARC записів

# Перевірити опубліковану SPF-запис
dig TXT yourdomain.com +short

# Перевірити DMARC-запис і його поточну політику
dig TXT _dmarc.yourdomain.com +short

# Швидка онлайн-перевірка через надсилання листа
# mail-tester.com — надішле розбір SPF/DKIM/DMARC за кілька секунд

Коли DKIM/SPF/DMARC на VPS не підходить

  • Пошта надсилається через кілька зовнішніх сервісів розсилки одночасно — потрібен єдиний SPF з include на кожен сервіс, а не окремі TXT-записи: у зоні допустимий лише один запис типу SPF
  • IP сервера в PBL або динамічному діапазоні провайдера — DKIM не врятує від блокування за репутацією самого IP, потрібна виділена статична адреса
  • Потрібна ротація ключів без простою — доведеться тримати два селектори паралельно, наприклад mail і mail2, і перемикати їх по черзі
  • Пошта вже розміщена в Google Workspace або іншому SaaS — DKIM налаштовується на боці провайдера, див. Google Workspace: MX і DNS, а не через OpenDKIM на VPS

Часті питання

Чи можна одразу встановити p=reject у DMARC, без періоду моніторингу?

Одразу переходити до p=reject ризиковано: якщо DKIM або SPF налаштовано з помилкою, легітимні листи почнуть відхилятися отримувачами ще до того, як ви про це дізнаєтесь. Період моніторингу з p=none потрібен саме для того, щоб побачити реальні джерела відправлення через звіти rua і переконатися, що власна пошта проходить перевірку, перш ніж посилювати політику.

Що станеться, якщо пошта надсилається через кілька зовнішніх сервісів розсилки одночасно?

В одній DNS-зоні допустимий лише один запис типу SPF, тому для кожного сервісу розсилки не можна заводити окремий запис — усі джерела відправлення потрібно перелічити через механізм include всередині єдиного SPF-запису домену. Якщо завести кілька окремих SPF-записів, перевірка стане непередбачуваною, і частина листів почне відхилятися незалежно від DKIM.

Як читати звіти DMARC (rua), якщо немає готової панелі, як у великих поштових провайдерів?

На власному VPS такі звіти надходять звичайним листом у вигляді архіву з розміткою всередині — читати їх очима незручно. На практиці їх або розбирають невеликим самописним скриптом, або пересилають у безкоштовний сторонній сервіс на кшталт dmarcian, який сам будує таблицю джерел відправлення і підсвічує, що проходить перевірку, а що ні.

Чи потрібно змінювати налаштування DKIM при переїзді пошти на Google Workspace чи інший SaaS?

Так, конфігурація на VPS через OpenDKIM у цьому випадку стає зайвою: ключ і підпис формує вже сам провайдер на своєму боці, залишиться лише додати його записи в DNS домену. Власний OpenDKIM і SaaS-провайдер одночасно підписувати одні й ті самі листи не повинні — це створює плутанину в перевірці.

Чи була стаття корисною?
← Назад до бази знань Поставити питання підтримці