Настройка SPF, DKIM и DMARC
Полное руководство по настройке SPF-записей, DKIM-подписи, политик DMARC, DNS-записей и инструментов тестирования для повышения доставляемости и безопасности электронной почты.
Содержание
Введение
Доставляемость и надёжность электронной почты зависят от правильной настройки 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:
@ IN TXT "v=spf1 ip4:IP_АДРЕС_СЕРВЕРА -all"
Если вы используете несколько серверов:
@ 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-записи
# Запрос SPF-записи через dig
dig TXT example.com +short
# Запрос через nslookup
nslookup -type=TXT example.com
Онлайн-инструменты:
Что такое DKIM (DomainKeys Identified Mail)?
DKIM — это протокол, добавляющий цифровую подпись к исходящим письмам, подтверждая, что сообщение не было изменено при передаче. Отправляющий сервер подписывает закрытым ключом, принимающий сервер проверяет с помощью открытого ключа в DNS.
Генерация пары ключей DKIM
Создайте 2048-битную пару ключей RSA с помощью OpenSSL:
# Генерация закрытого ключа
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:
sudo apt update
sudo apt install opendkim opendkim-tools -y
Генерация ключей:
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):
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:
default._domainkey IN TXT "v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhki...(ОТКРЫТЫЙ_КЛЮЧ)..."
Ключи DKIM должны быть 2048-битными. 1024-битные ключи больше не считаются безопасными.
Интеграция с Postfix
Добавьте в конфигурацию Postfix (/etc/postfix/main.cf):
milter_protocol = 6
milter_default_action = accept
smtpd_milters = inet:localhost:8891
non_smtpd_milters = $smtpd_milters
Перезапустите сервисы:
sudo systemctl restart opendkim
sudo systemctl restart postfix
Тестирование DKIM-записи
# Запрос 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:
_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.
Проверка всех записей
Проверьте все записи безопасности электронной почты одновременно:
# Проверка 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
Тест отправки электронной почты
Отправьте тестовое письмо из командной строки:
# Детальный тест с помощью 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, прежде чем переходить к полной защите.
Связанные статьи
Настройка почтового сервера: Postfix и Dovecot
Полное руководство по настройке Postfix MTA, Dovecot IMAP/POP3, конфигурации SSL/TLS, поддержке виртуальных доменов, фильтрации спама и Docker Mail Server.
Руководство по удалению из чёрного списка email
Руководство по проверке чёрных списков, заявкам на удаление, процедурам Spamhaus/Barracuda/SORBS и управлению репутацией IP.