К основному содержимому

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-провайдер одновременно подписывать одни и те же письма не должны — это создаёт путаницу в проверке.

Статья помогла?
← Назад в базу знаний Задать вопрос поддержке