Приёмник объявляет требование шифрования в своей зоне DNS

DANE
Требование шифрования приходит от приёмника, а не из нашей конфигурации

Обычный STARTTLS оппортунистичен: получилось зашифровать — хорошо, не получилось — письмо уйдёт открытым текстом, и молча. require-starttls это запрещает, но решение принимаем мы, а не приёмник.

DANE переворачивает роли. Приёмник публикует в своей зоне записи, где сказано: у нас есть STARTTLS, и вот отпечаток нашего сертификата. Узел эти записи читает и действует по ним — понижение до открытого текста запрещено самим стандартом, а не нашей настройкой.

Проверяется не только шифрование, но и сертификат — по отпечатку из DNS, а не по цепочке удостоверяющих центров. Это и есть главное отличие от MTA-STS.

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

Письмо не отбивается, а ждёт. Если согласование не сложилось, письмо остаётся в очереди до тех пор, пока STARTTLS по правилам DANE не получится.

Главная ловушка — включить DANE, не проверив резолвер. В конфигурации это выглядит как включённая защита; на деле без DNSSEC механизм не имеет смысла. Проверять надо не наличие строки name-server, а то, что указанный резолвер действительно умеет DNSSEC.
Что делает Хаб. Не пишет: во всех блоках шаблона политик, включая общий, стоит связка require-starttls плюс use-mta-sts, а DANE не включён. Причина в резолвере — DANE требует DNSSEC, и это надо проверять на каждом узле парка отдельно. Включать стоит только после такой проверки; иначе строка создаёт видимость защиты, которой нет.
Рекомендуемые значения

Собственных значений у механизма нет: его включает use-dane. Сравнить стоит с двумя соседними способами:

Способ Кто решает Что проверяется Чего требует
require-starttls мы только шифрование ничего
DANE приёмник, через свою зону DNS шифрование и отпечаток сертификата резолвер с DNSSEC
use-mta-sts приёмник, через свой сайт шифрование, цепочка и имя в сертификате ничего особенного

Они не исключают друг друга. Разумный порядок для парка: обязательность своей рукой у крупных приёмников, MTA-STS — потому что ничего не требует, DANE — когда резолвер проверен.

Порядок работы, запрет понижения и требование DNSSEC — из руководства (§ 10.5). Сравнительная таблица трёх способов — наша.
Пример в конфигурации
# DANE бессмысленен без резолвера с DNSSEC — строки идут парой
name-server 8.8.8.8
<domain hotmail.com>
    use-starttls yes
    use-dane true
</domain>
Пример руководства с его же комментарием: резолвер объявлен на уровне узла, а сам механизм включается по приёмнику. Порядок строк роли не играет, важно наличие обеих.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

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

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

Включают DANE при резолвере без DNSSEC

§ 10.5

Чем чреватоРуководство называет резолвер с DNSSEC строго обязательным. Без него записи DANE ничем не защищены, и механизм не даёт того, ради чего включён, — а в конфигурации выглядит включённым.
Как заметитьСтрока стоит, поведение не отличается от обычного STARTTLS.
Как правильноПроверить резолвер командой из справки и, если он не умеет DNSSEC, сменить его в name-server — или не включать DANE.

Ждут отказа вместо ожидания

§ 10.5

Чем чреватоПри неудачном согласовании письмо не отбивается, а остаётся в очереди до тех пор, пока STARTTLS по правилам DANE не сложится. На приёмнике со сломанными записями это молча растущая очередь.
Как заметитьОчередь к одному приёмнику растёт, отказов нет.
Как правильноСледить за глубиной очередей после включения. Сломанный DANE у приёмника — не наша проблема, но письма стоят у нас.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Наследование
Наследования у самого механизма нет — наследуется директива, которой он включается: use-dane живёт в <domain> и сливается по обычному правилу блоков получателей, побеждает самое точное совпадение. А вот резолвер name-server задаётся на уровне узла и уровней не имеет: он один на всю установку.
Как проверить на узле
Сначала проверяется резолвер — умеет ли он DNSSEC вообще:
dig +dnssec TXT example.com @8.8.8.8 | grep -c "flags:.* ad"
Единица в ответе означает, что резолвер отдаёт проверенные записи (флаг ad). Ноль — DANE работать не будет, сколько бы строк ни стояло в конфигурации. Дальше смотреть учёт: у приёмника с DANE письма без версии протокола появляться не должны вовсе.
В Хабе
Цена ошибки
обратимо: вредит, пока стоит
Сценарии
Разобрать зависшую очередь · Шифрование соединений