Как включить подпись DKIM с нуля

критично

Setting up DKIM signing
Восемь шагов от пустой конфигурации до подписанного письма

Подпись DKIM устроена так: у вас есть пара ключей, публичная часть лежит в DNS, приватная — на узле, и узел добавляет к письму заголовок с подписью. Получатель берёт публичную часть из DNS и проверяет.

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

Восемь шагов ниже — из руководства. Последний нужен не всем: он про случай, когда ключ объявлен внутри потока отправки, а не на уровне узла.

Главная ловушка — порядок пятого и седьмого шагов. Включить подпись раньше, чем запись разошлась по DNS, — значит некоторое время слать письма с подписью, которую получатель проверить не может. Провал проверки хуже её отсутствия: у подписи без ключа в DNS результат permerror, и приёмники относятся к нему строже, чем к неподписанному письму.
Что делает Хаб. Делает всё, кроме последнего шага проверки: генерирует пару, публикует запись через свой модуль DNS и раскладывает объявления по узлам. Дождаться расхождения записи по кэшам и убедиться, что подпись проверяется, — по-прежнему человеческая работа.
Пример в конфигурации
# 3. генерация: получаются два файла — .pem и .dns
pmtakeytool newdk k1 example.org 2048

# 4. права: читать может только узел
install -o pmta -g pmta -m 600 k1.example.org.pem /etc/pmta/

# 6. объявление ключа и 7. включение подписи
domain-key k1, example.org, /etc/pmta/k1.example.org.pem
<domain *>
    dkim-sign yes</domain>
Между шестой и седьмой строкой должен уместиться пятый шаг — публикация записи в DNS и ожидание, пока она разойдётся.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

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

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

Включают подпись до публикации записи

наш опыт

Чем чреватоПисьма уходят с подписью, которую получатель проверить не может. Результат проверки — постоянная ошибка, и приёмники относятся к такому письму строже, чем к неподписанному.
Как заметитьВ отчётах получателей подпись помечена ошибкой, а не отсутствием.
Как правильноПубликовать запись и дожидаться её расхождения по кэшам до включения подписи.

Объявляют ключ внутри потока и не направляют в него почту

§ 10.3.2

Чем чреватоКлюч есть, подпись включена, а письма уходят другим потоком, где ключа нет. Узел их просто не подписывает — молча, без ошибки в журнале.
Как заметитьПодпись включена, заголовка в письмах нет.
Как правильноЛибо объявить ключ на уровне узла, либо направить почту с этого домена в нужный поток.

Оставляют приватный ключ доступным на чтение

наш опыт

Чем чреватоКлюч подписи читает любой пользователь узла. Забрав его, можно подписывать письма от вашего имени, и получатель им поверит — подпись будет верной.
Как заметитьПрава на файл .pem шире, чем у пользователя службы.
Как правильноВладелец — пользователь службы, права 600.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Как проверить на узле
Что запись действительно опубликована, проверяется до включения подписи; что подпись работает — по заголовку в отправленном письме:
dig +short TXT k1._domainkey.example.org
pmta show settings example.com/vmta1 | grep -i dkim-sign
Пустой ответ первой команды означает, что включать подпись рано: запись ещё не видна снаружи. Хаб публикует записи сам, но расхождение по кэшам ждать всё равно приходится.
В Хабе
Цена ошибки
обратимо: вредит, пока стоит
Сценарии
Подпись и аутентификация писем · Подготовить узел к отправке
Важность
критично