Как узел подписывает письма и выбирает ключ

критично

DKIM key selection
Ключ выбирается письмом, а не настройкой

Подпись включается строкой dkim-sign у получателя, а ключ выбирается по самому письму. Узел смотрит на домен отправки — берёт его из заголовка Sender, а если того нет, из From, — и ищет подходящий ключ среди объявлений domain-key.

Перебор идёт сверху вниз, побеждает первое подходящее. Подходит объявление, чей домен совпал с доменом отправки или является для него родительским: ключ для example.com подпишет письма с mail.example.com, обратное неверно.

Ключи потока сильнее общих. Если подходящие объявления есть и на уровне узла, и внутри VirtualMTA, выигрывают те, что внутри.

Не нашлось ни одного — письмо уходит без подписи. Молча: ни ошибки, ни записи в журнале.

Главная ловушка — звёздочка выше конкретных объявлений. Объявление с доменом * подходит любому письму, а перебор идёт сверху вниз — значит оно перехватит и те письма, для которых ниже лежит точный ключ. Руководство прямо советует держать звёздочку последней.
Что делает Хаб. Ведёт ключи на карточке домена в разделе «DNS → Домены и зоны», публикует записи и раскладывает объявления по узлам. Порядок объявлений Хаб выстраивает сам — точные домены выше, звёздочка ниже, — так что перехвата не случается.
Пример в конфигурации
# точные домены выше, звёздочка последней — иначе она перехватит всё
domain-key m, mail.port25.com, /etc/pmta/m.pem
domain-key k1, example.org, /etc/pmta/k1.example.org.pem
domain-key base, *, /etc/pmta/base.pem
<domain *>
    dkim-sign yes
</domain>
Поменяйте строки местами — и подсвеченная подпишет всё своим ключом, а два точных объявления не отработают ни разу.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

Типичные ошибки и проблемы

что делают не так и чем это кончается3 ошибки▶

Ставят объявление со звёздочкой первым

§ 3.3.1.55.1

Чем чреватоОно подходит любому письму, а перебор идёт сверху вниз. Все точные объявления ниже не отрабатывают ни разу, и вся почта подписывается одним ключом.
Как заметитьВ заголовке подписи у всех писем один и тот же селектор.
Как правильноДержать звёздочку последней — руководство советует именно так.

Заводят ключ на поддомен и ждут, что он подпишет родительский

§ 3.3.1.55.1

Чем чреватоСовпадение идёт в одну сторону: объявление для example.com подходит письмам с mail.example.com, но не наоборот. Письма с родительского домена остаются без ключа.
Как заметитьЧасть писем не подписана, ключ при этом есть.
Как правильноРегистрировать ключ на домене подписи или на его родителе.

Считают, что домен подписи — это домен получателя

наш опыт

Чем чреватоКлюч ищется по домену отправки из заголовков письма, а dkim-sign задаётся у получателя. Настроив ключ по получателю, вы не найдёте совпадения ни для одного письма.
Как заметитьПодпись включена у всех получателей, писем с подписью нет.
Как правильноКлюч — на домен из Sender или From, включение — у получателя.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
⇄

Связанные записи

3 связи

Как проверить на узле
Какой ключ достался письму, видно по заголовку подписи в нём — селектор и домен стоят там прямо:
dig +short TXT k1._domainkey.example.org
grep -i 'DKIM-Signature' /var/log/pmta/pmta.log | tail -5
В заголовке подписи селектор стоит в поле s=, домен — в d=: по ним и сверяют, то ли объявление выиграло. Хаб порядок объявлений выстраивает сам.
В Хабе
Цена ошибки
обратимо: вредит, пока стоит
Сценарии
Ротация ключей · Подпись и аутентификация писем
Важность
критично