allow-unencrypted-plain-auth

<source>Хаб задаёт сам

Разрешать ли механизм PLAIN на незашифрованном соединении
в конфигурации это строкаallow-unencrypted-plain-auth falseвнутри блока <source>
Второй путь, которым пароль уходит в открытую

Механизм авторизации PLAIN передаёт логин и пароль в кодировке, а не в шифре: прочитать их из перехваченного трафика — дело одной команды. Строка решает, можно ли им пользоваться на незашифрованном соединении.

Умолчание — false, то есть по умолчанию нельзя. Это верное умолчание, и включают его обычно ради совместимости с платформой, которая иначе не подключается.

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

Главная ловушка — включить ради «пусть заработает» и забыть. Строка чаще всего появляется при отладке подачи: платформа не подключается, разрешение помогает, вопрос закрыт. Пароль после этого уходит по сети в читаемом виде при каждом соединении — и заметить это нечем.
Что делает Хаб. Пишет yes в базовой конфигурации — в общем источнике, ради совместимости платформ подачи. Вместе с этим require-starttls-before-auth не задан, а значит пароль подачи может уйти незашифрованным. Это стоит пересмотреть: включить требование шифрования перед авторизацией и проверить, что подающие платформы его выдерживают.
Рекомендуемые значения

Значение булево, и его надо читать вместе с соседом:

Эта строка require-starttls-before-auth Пароль в открытую
no (умолчание) не задан нет для PLAIN, возможно для других механизмов
yes не задан да
yes true нет: авторизация только по шифрованному соединению
no true нет, с запасом

Если включать пришлось — включать вместе с требованием шифрования перед авторизацией. Тогда разрешение относится к соединениям, которые и так зашифрованы.

Умолчание false — из руководства (§ 3.3.7.12). Разбор пары с требованием шифрования и оценка нашей базовой конфигурации — наши.
Пример в конфигурации
# совместимость плюс защита: разрешение работает только внутри шифрования
<source 0/0>
    allow-starttls true
    require-starttls-before-auth true
    allow-unencrypted-plain-auth yes</source>
В такой связке разрешение безопасно: авторизация без шифрования всё равно запрещена, и PLAIN применяется только внутри уже поднятого TLS. Сейчас в базовой конфигурации Хаба средней строки нет.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

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

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

Включают при отладке и оставляют навсегда

наш опыт

Чем чреватоПароль подачи уходит по сети в читаемом виде при каждом соединении. Ничего не ломается, никаких сообщений — поэтому строка живёт годами.
Как заметитьВ базовой конфигурации yes, а требования шифрования перед авторизацией нет.
Как правильноДобавить require-starttls-before-auth. Тогда разрешение относится только к уже зашифрованным соединениям.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Справочные данные
Синтаксис
allow-unencrypted-plain-auth <boolean>
Значения
yes | no | true | false
Умолчание
false § 3.3.7.12
Применение
reload, перезапуск не нужен
Очередь
уже поставленное в очередь не затронет
Где писать
<source>
Сколько раз
один раз в блоке
Всё здесь — из руководства, с разделом.
Наследование
Директива живёт в <source> и сливается по правилу источников: более узкий блок перекрывает более широкий. Выбор источника идёт по адресу подающего, до авторизации.
Как проверить на узле
Проверяется тем же способом, что и требование, — попыткой авторизоваться без шифрования:
printf 'EHLO test\r\nQUIT\r\n' | nc localhost 25 | grep -i "AUTH"
Если в списке расширений на незашифрованном соединении есть AUTH PLAIN, механизм разрешён в открытую. При включённом требовании шифрования перед авторизацией строки AUTH там быть не должно.
В Хабе
Значение
Хаб подбирает сам — темп, стадия прогрева, метрики
Цена ошибки
обратимо: вредит, пока стоит
Сценарии
Безопасность узла