Перейти к основному содержимому
Вернуться в категорию

Настройка SPF, DKIM и DMARC

Полное руководство по настройке SPF-записей, DKIM-подписи, политик DMARC, DNS-записей и инструментов тестирования для повышения доставляемости и безопасности электронной почты.

Время чтения: 15 мин Электронная почта
spfdkimdmarcэлектронная почтаdnsбезопасностьmail

Содержание

Введение

Доставляемость и надёжность электронной почты зависят от правильной настройки DNS. Протоколы SPF (Sender Policy Framework), DKIM (DomainKeys Identified Mail) и DMARC (Domain-based Message Authentication, Reporting & Conformance) предотвращают попадание ваших писем в спам и защищают от подделки домена (spoofing).

В этом руководстве мы пошагово настроим записи SPF, DKIM и DMARC для защиты инфраструктуры отправки почты на вашем сервере REXE.

Что такое SPF (Sender Policy Framework)?

SPF — это DNS-запись, определяющая, какие серверы имеют право отправлять электронную почту от имени вашего домена. Принимающий почтовый сервер проверяет, пришло ли входящее письмо с IP-адреса, указанного в SPF-записи.

Создание SPF-записи

Добавьте TXT-запись в панели управления DNS:

hljs dns
@ IN TXT "v=spf1 ip4:IP_АДРЕС_СЕРВЕРА -all"

Если вы используете несколько серверов:

hljs dns
@ IN TXT "v=spf1 ip4:IP_АДРЕС_1 ip4:IP_АДРЕС_2 include:_spf.google.com -all"

Механизмы SPF

МеханизмОписание
ip4:Конкретный IPv4-адрес или CIDR-блок
ip6:Конкретный IPv6-адрес или CIDR-блок
include:Включить SPF-запись другого домена
aРазрешить IP из A-записи домена
mxРазрешить серверы из MX-записи домена
allПолитика для всех остальных источников

Квалификаторы SPF

+all  → Pass (разрешить всем — НЕ РЕКОМЕНДУЕТСЯ)
~all  → SoftFail (пометить неавторизованных, но не отклонять)
-all  → Fail (отклонить неавторизованных — РЕКОМЕНДУЕТСЯ)
?all  → Neutral (без проверки)

Всегда используйте -all или как минимум ~all в SPF-записи. Использование +all делает ваш домен уязвимым для спуфинга.

Тестирование SPF-записи

hljs bash
# Запрос SPF-записи через dig
dig TXT example.com +short

# Запрос через nslookup
nslookup -type=TXT example.com

Онлайн-инструменты:

Что такое DKIM (DomainKeys Identified Mail)?

DKIM — это протокол, добавляющий цифровую подпись к исходящим письмам, подтверждая, что сообщение не было изменено при передаче. Отправляющий сервер подписывает закрытым ключом, принимающий сервер проверяет с помощью открытого ключа в DNS.

Генерация пары ключей DKIM

Создайте 2048-битную пару ключей RSA с помощью OpenSSL:

hljs bash
# Генерация закрытого ключа
openssl genrsa -out dkim_private.pem 2048

# Извлечение открытого ключа
openssl rsa -in dkim_private.pem -pubout -out dkim_public.pem

# Преобразование открытого ключа в формат DNS
cat dkim_public.pem | grep -v '^-' | tr -d '\n'

Настройка DKIM с Postfix (OpenDKIM)

Установка OpenDKIM:

hljs bash
sudo apt update
sudo apt install opendkim opendkim-tools -y

Генерация ключей:

hljs bash
sudo mkdir -p /etc/opendkim/keys/example.com
sudo opendkim-genkey -b 2048 -d example.com -D /etc/opendkim/keys/example.com -s default -v
sudo chown -R opendkim:opendkim /etc/opendkim

Файл конфигурации OpenDKIM (/etc/opendkim.conf):

hljs conf
AutoRestart             Yes
AutoRestartRate         10/1h
SyslogSuccess           Yes
LogWhy                  Yes

Canonicalization        relaxed/simple
Mode                    sv
SubDomains              no

OversignHeaders         From

KeyTable                refile:/etc/opendkim/key.table
SigningTable            refile:/etc/opendkim/signing.table
ExternalIgnoreList      /etc/opendkim/trusted.hosts
InternalHosts           /etc/opendkim/trusted.hosts

Socket                  inet:8891@localhost

Файл таблицы ключей (/etc/opendkim/key.table):

default._domainkey.example.com example.com:default:/etc/opendkim/keys/example.com/default.private

Файл таблицы подписей (/etc/opendkim/signing.table):

*@example.com default._domainkey.example.com

Файл доверенных хостов (/etc/opendkim/trusted.hosts):

127.0.0.1
localhost
example.com

Добавление DNS-записи DKIM

Добавьте сгенерированный открытый ключ как TXT-запись в DNS:

hljs dns
default._domainkey IN TXT "v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhki...(ОТКРЫТЫЙ_КЛЮЧ)..."

Ключи DKIM должны быть 2048-битными. 1024-битные ключи больше не считаются безопасными.

Интеграция с Postfix

Добавьте в конфигурацию Postfix (/etc/postfix/main.cf):

hljs conf
milter_protocol = 6
milter_default_action = accept
smtpd_milters = inet:localhost:8891
non_smtpd_milters = $smtpd_milters

Перезапустите сервисы:

hljs bash
sudo systemctl restart opendkim
sudo systemctl restart postfix

Тестирование DKIM-записи

hljs bash
# Запрос DKIM-записи из DNS
dig TXT default._domainkey.example.com +short

# Инструмент тестирования OpenDKIM
opendkim-testkey -d example.com -s default -vvv

Что такое DMARC?

DMARC объединяет результаты SPF и DKIM, предоставляя владельцам доменов возможность устанавливать политики аутентификации электронной почты и получать отчёты. Принимающий сервер действует в соответствии с политикой DMARC для писем, не прошедших проверку SPF или DKIM.

Создание DMARC-записи

Добавьте как TXT-запись в DNS:

hljs dns
_dmarc IN TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc-reports@example.com; ruf=mailto:dmarc-forensic@example.com; fo=1; adkim=r; aspf=r; pct=100"

Уровни политики DMARC

ПолитикаОписаниеПрименение
p=noneТолько отчёты, без действийПервый этап — мониторинг
p=quarantineОтправить в папку спамСредняя защита
p=rejectПолностью отклонить письмоПолная защита

Поэтапная стратегия внедрения DMARC

Поэтапное внедрение DMARC — самый безопасный подход:

# Этап 1: Мониторинг (2-4 недели)
_dmarc IN TXT "v=DMARC1; p=none; rua=mailto:dmarc@example.com; fo=1"

# Этап 2: Карантин (2-4 недели)
_dmarc IN TXT "v=DMARC1; p=quarantine; pct=25; rua=mailto:dmarc@example.com"

# Этап 3: Увеличение карантина
_dmarc IN TXT "v=DMARC1; p=quarantine; pct=100; rua=mailto:dmarc@example.com"

# Этап 4: Полная защита
_dmarc IN TXT "v=DMARC1; p=reject; rua=mailto:dmarc@example.com; ruf=mailto:dmarc-forensic@example.com"

Для анализа отчётов DMARC можно использовать бесплатные инструменты: dmarcian.com, postmarkapp.com/dmarc или easydmarc.com.

Проверка всех записей

Проверьте все записи безопасности электронной почты одновременно:

hljs bash
# Проверка SPF
dig TXT example.com +short | grep spf

# Проверка DKIM
dig TXT default._domainkey.example.com +short

# Проверка DMARC
dig TXT _dmarc.example.com +short

# Проверка MX-записи
dig MX example.com +short

Тест отправки электронной почты

Отправьте тестовое письмо из командной строки:

hljs bash
# Детальный тест с помощью swaks
sudo apt install swaks -y
swaks --to test@gmail.com --from info@example.com --server localhost --tls

Распространённые ошибки и решения

ОшибкаПричинаРешение
SPF PermErrorБолее 10 DNS-запросовУменьшите количество include, объедините IP-блоки
DKIM failНесоответствие ключейОткрытый ключ в DNS должен соответствовать закрытому ключу на сервере
DMARC failОшибка выравнивания SPF и DKIMДомен в заголовке From должен совпадать с доменом SPF/DKIM
SoftfailИспользование ~all в SPF-записиЗамените на -all
Body hash mismatchПисьмо изменено при передачеУстановите canonicalization в relaxed/relaxed

Заключение

Тройка SPF, DKIM и DMARC составляет основу безопасности электронной почты. Правильная настройка этих трёх протоколов повышает доставляемость писем, предотвращает подделку домена и защищает репутацию вашего бренда. Внедряйте DMARC поэтапно, анализируйте отчёты и убедитесь, что все легитимные источники отправки совместимы с SPF и DKIM, прежде чем переходить к полной защите.