smtp-tls-min-version

<domain>

Нижняя граница версии TLS к приёмнику
в конфигурации это строкаsmtp-tls-min-version tlsv1.1внутри блока <domain>
Ниже какой версии не опускаться

Строка задаёт нижнюю границу: версии старее указанной узел согласовывать не станет. Значения — tlsv1, tlsv1.1, tlsv1.2, tlsv1.3. Умолчание — tlsv1.1.

Она заменила пять отдельных переключателей. До версии 5.5 каждая версия протокола включалась своей строкой — smtp-tls-allow-tlsv1 и родня; все они объявлены устаревшими в пользу этой пары.

Порог — не единственное ограничение. openssl-security-level может запретить версию раньше: библиотека шифрования у PowerMTA своя, встроенная в поставку, и её уровень безопасности действует поверх всего. Разрешить tlsv1 строкой и получить отказ на уровне библиотеки — обычная последовательность событий.

Главная ловушка — поднять порог и не заметить потерю приёмников. tlsv1.2 выглядит безобидно и на крупных приёмниках ничего не меняет, но мелкие корпоративные почтовики до сих пор встречаются с TLS 1.0. При включённом require-starttls такие письма не уйдут вовсе; при выключенном — уйдут открытым текстом, что обычно хуже, чем старое шифрование.
Что делает Хаб. Не пишет — оставляет вендорское умолчание tlsv1.1. Смысла поднимать порог у нас нет: у крупных приёмников и так согласуется tlsv1.2 или tlsv1.3, а у мелких поднятый порог означал бы или незашифрованную доставку, или недоставку вовсе. Сторона приёма настраивается отдельно — smtp-server-tls-min-version.
Рекомендуемые значения

Четыре значения, и выбор между ними — про хвост, а не про большинство:

Значение Кого теряете Когда так
tlsv1 никого приёмник с очень старым стеком, точечно
tlsv1.1 (умолчание) почти никого обычный парк
tlsv1.2 мелкие почтовики со старым стеком требование клиента или регулятора
tlsv1.3 заметную часть только по конкретному приёмнику, который её поддерживает

Смотреть надо на пару с require-starttls: поднятый порог без обязательности превращается в незашифрованную доставку, а с обязательностью — в недоставку.

Значения и умолчание tlsv1.1 — из руководства (§ 3.3.10.108.11). Разбивка по потерям и связка с обязательностью — наши.
Пример в конфигурации
# порог поднят только для приёмника, который точно тянет
<domain hotmail.com>
    use-starttls yes
    smtp-tls-min-version tlsv1.2</domain>
В <domain *> такую строку не ставят: у мелких почтовиков со старым стеком письма после этого либо уйдут открытым текстом, либо не уйдут совсем — смотря что стоит в require-starttls.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

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

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

Поднимают порог в общем блоке получателей

наш опыт

Чем чреватоКрупные приёмники не заметят, мелкие перестанут получать почту или начнут получать её открытым текстом. Разница зависит от require-starttls, и обе ветки плохи.
Как заметитьРастут очереди к небольшим доменам либо у них пропадает версия протокола в учёте.
Как правильноПоднимать порог по конкретному приёмнику, а не всем. Общий блок оставлять с умолчанием.

Ищут причину отказа в этой строке, а дело в библиотеке

§ 3.3.1

Чем чреватоopenssl-security-level действует поверх и может запретить версию, которую строка разрешает. Разрешение в конфигурации при этом остаётся видимым и создаёт впечатление, что версия доступна.
Как заметитьВерсия разрешена, а согласование всё равно срывается.
Как правильноПроверить уровень безопасности библиотеки: он один на весь узел и меняет доступный набор версий и шифров.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Справочные данные
Синтаксис
smtp-tls-min-version <enumeration>
Значения
tlsv1 | tlsv1.1 | tlsv1.2 | tlsv1.3
Умолчание
tlsv1.1 § 3.3.10.108.11
Применение
reload, перезапуск не нужен
Очередь
уже поставленное в очередь не затронет
Где писать
<domain>
Сколько раз
один раз в блоке
Всё здесь — из руководства, с разделом.
Наследование
Директива живёт в <domain> и сливается по обычному правилу блоков получателей: побеждает самое точное совпадение по имени приёмника. Те же три уровня действуют по адресу отправки — узел, <virtual-mta-pool>, <virtual-mta>. Поверх всего этого стоит openssl-security-level: он не наследуется вместе с блоками, а действует на весь узел.
⇄

Связанные директивы

3 связи

Как проверить на узле
Какая версия согласована на самом деле, пишется в учёт — там же, где и остальное про письмо:
pmtaacctfind --output csv[rcpt,dlvTlsProtocol,dlvTlsCipher] /var/log/pmta/acct-*.csv | head -20
Значения ниже заданного порога встречаться не должны. Столбцы заполнены, только если dlvTlsProtocol и dlvTlsCipher названы в record-fields, — на узлах Хаба их нет. Если поля названы, а у приёмника вместо версии пусто, шифрование не сложилось вовсе — и причина может быть как раз в пороге: подробности пишет log-tls.
В Хабе
Цена ошибки
обратимо: вредит, пока стоит
Сценарии
Шифрование соединений