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

Как три механизма дополняют друг друга

SPF хранится в TXT-записи домена и проверяется по адресу отправителя из конверта SMTP. DKIM добавляет к письму подпись: сервер считает хеш выбранных заголовков и тела, подписывает его закрытым ключом, а получатель достаёт открытый ключ из DNS по имени селектора. DMARC связывает результат обеих проверок с доменом в заголовке From, который видит человек.

Слабое место есть у каждого механизма по отдельности. SPF ломается при пересылке: письмо уходит с чужого сервера, и проверка не проходит. DKIM переживает пересылку лучше, но не мешает подделать адрес в From, если подписан другой домен. DMARC требует, чтобы хотя бы одна проверка прошла и совпала с доменом From, — это и называется выравниванием.

dig +short TXT example.com
dig +short TXT mail._domainkey.example.com
dig +short TXT _dmarc.example.com
dig +short MX example.com

Эти запросы показывают, что уже опубликовано: без TXT с v=spf1 домен не защищён, и письма от его имени может отправить кто угодно.

SPF: синтаксис и лимит в десять запросов

Запись начинается с версии и содержит механизмы, которые проверяются по порядку до первого совпадения. Квалификатор задаёт результат: + — пропустить, - — отклонить, ~ — пометить как подозрительное, ? — нейтральный. Завершать запись принято квалификатором -all, но только когда перечислены все легальные отправители.

v=spf1 mx ip4:203.0.113.10 include:_spf.google.com -all
v=spf1 mx include:spf.protection.outlook.com ~all
v=spf1 -all

Механизм mx разрешает серверы из MX-записей, a — адрес самого домена, include подключает чужую политику, например почтового провайдера. На проверку SPF отводится не более десяти DNS-запросов, причём include, mx, a и redirect считаются каждый. Превышение даёт permerror, и письма начинают отклоняться. Вложенные include у провайдеров съедают лимит незаметно, поэтому после правок пересчитайте цепочку вручную.

Для домена без исходящей почты подойдёт v=spf1 -all: такая запись запрещает любые отправления.

DKIM: ключи, селектор и подпись

DKIM работает на стороне почтового сервера. В Postfix его обычно подключают через OpenDKIM: милтер добавляет подпись к исходящим письмам и проверяет входящие. Ключ создаётся один раз, приватная часть остаётся на сервере, публичная публикуется в DNS.

sudo apt install opendkim opendkim-tools
sudo mkdir -p /etc/dkimkeys
sudo opendkim-genkey -b 2048 -d example.com -s mail -D /etc/dkimkeys
sudo chown opendkim:opendkim /etc/dkimkeys/mail.private

Селектор mail — произвольное имя, по нему строится запись mail._domainkey.example.com. В файле mail.txt лежит готовая TXT-запись: скопируйте её в DNS целиком, включая v=DKIM1; k=rsa; p=.... Длинный ключ провайдер может потребовать разбить на строки по 255 символов — при ручной правке зоны проверьте, что части склеиваются без пробелов.

Конфигурация OpenDKIM минимальна: домен, селектор, файл ключа и сокет. В /etc/opendkim.conf укажите:

Domain                  example.com
Selector                mail
KeyFile                 /etc/dkimkeys/mail.private
Socket                  inet:8891@localhost
Canonicalization        relaxed/relaxed

Затем в /etc/postfix/main.cf добавьте милтер для исходящей и входящей почты:

milter_default_action = accept
milter_protocol = 6
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891

После перезапуска обоих сервисов проверьте, что ключ и DNS совпадают: sudo opendkim-testkey -d example.com -s mail -vvv. Если тест ругается, подождите обновления зоны: отрицательный кеш DNS может держаться минуты.

DMARC: политика и отчёты

Запись DMARC публикуется в _dmarc.example.com и всегда начинается с v=DMARC1. Политика p задаёт действие для писем, не прошедших проверку: none только собирает статистику, quarantine отправляет в спам, reject отклоняет. Начинать с reject без периода наблюдения опасно — можно потерять легальную рассылку.

v=DMARC1; p=none; rua=mailto:dmarc@example.com; fo=1
v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com; adkim=r; aspf=r
v=DMARC1; p=reject; sp=reject; adkim=s; aspf=s; rua=mailto:dmarc@example.com

Параметр rua указывает адрес для агрегированных отчётов: раз в сутки крупные провайдеры присылают архив с XML, где видно, сколько писем прошло и с каких IP. ruf включает отчёты о единичных сбоях, но присылают их редко. adkim и aspf задают строгость выравнивания: r — расслабленное, s — строгое. sp задаёт политику для поддоменов, иначе они наследуют p.

Отчёты приходят в формате gzip+XML и выглядят нечитаемо. Разобрать их помогает parsedmarc: он собирает статистику по домену, отправителям и результатам проверок.

python3 -m pip install --user parsedmarc
parsedmarc -r ./dmarc-reports -o ./out
gzip -dc ./dmarc-reports/*.xml.gz | head -40

Смотрите и на источники: незнакомый IP с большим объёмом — повод проверить забытый сервис или форму на сайте.

Проверка перед строгой политикой

Самый быстрый способ увидеть все три результата — отправить письмо на диагностический адрес. Ответ обычно приходит в течение нескольких минут и содержит разбор SPF, DKIM и DMARC с причинами сбоя.

swaks --to check-auth@verifier.port25.com --from postmaster@example.com
sudo journalctl -u opendkim -n 50 --no-pager
sudo postfix flush

В Gmail откройте полученное письмо, меню «Показать оригинал» и найдите блок Authentication-Results: там перечислены spf=pass, dkim=pass и dmarc=pass. Если DKIM не проходит, сверьте селектор и домен в подписи с DNS. Если SPF даёт softfail, проверьте, все ли отправители перечислены в записи.

Чек-лист внедрения

  • Опубликуйте SPF, уложитесь в десять DNS-запросов и завершите запись квалификатором -all.
  • Сгенерируйте ключ DKIM на 2048 бит, опубликуйте TXT и проверьте через opendkim-testkey.
  • Запустите DMARC с p=none и rua, накапливайте отчёты две-четыре недели.
  • Убедитесь, что легальные отправители проходят выравнивание, затем переходите к quarantine, а потом к reject.
  • Для доменов без почты поставьте v=spf1 -all и v=DMARC1; p=reject.
  • Раз в квартал пересматривайте записи: диапазоны сервисов меняются.

Итог

SPF, DKIM и DMARC работают только вместе: первый ограничивает серверы, второй подтверждает подлинность письма, третий превращает проверки в понятную политику. Настройка занимает несколько часов, но требует дисциплины — сначала аудит и наблюдение, потом строгие правила. Домен с корректными записями перестаёт быть удобной мишенью: поддельные письма отклоняются на стороне получателя, а отчёты показывают, кто и откуда пытался отправить почту от вашего имени.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте