http-redirect-to-https

Globalнужен перезапускХаб задаёт сам

Запрещать ли незашифрованные соединения с веб-монитором
в конфигурации это строкаhttp-redirect-to-https trueвнутри блока Global
Единственная строка, которая делает шифрование монитора обязательным

Порт монитора отвечает и обычным запросом, и рукопожатием TLS — мы проверили это на узле парка. Клиент выбирает сам, и по умолчанию выберет то, что проще. Эта строка отнимает у него выбор: со значением true обычные соединения перенаправляются на https.

Умолчание менялось между версиями. В PowerMTA 4.5 было false, с версии 5.0 — true. Руководство предупреждает: чтобы отключить перенаправление на 5.0 и выше, false надо написать явно.

Без неё весь набор настроек TLS монитора не значит ничего. Границы версий, списки шифров, порядок предпочтений — всё это про соединения, до шифрования дошедшие. Клиент, которому проще не шифровать, ни одной из этих настроек не заметит.

А через монитор идёт ключ управления — заголовком X-API-Key, внутри разговора. Незашифрованный разговор означает ключ на проводе.

Главная ловушка — выключить строку ради самоподписанного сертификата. Клиент не доверяет сертификату монитора, разработчик ставит false, и вместо одной проблемы с доверием получается другая — открытый ключ на проводе. Лечение — научить клиент доверять сертификату, а не убрать шифрование.
Что делает Хаб. Пишет — и пишет false. Опрос идёт по обычному http://, потому что сертификат монитора самоподписанный, а клиент Laravel по умолчанию проверяет цепочку.

🔴 Цена этому решению — ключ управления открытым текстом при каждом опросе (см. http-api-key). Проверено на узле парка: порт отвечает по TLS 1.3 уже сейчас, менять на узле ничего не надо. Лечится на нашей стороне: verify => false в клиенте либо закрепление webmon.pem, снятого при установке, — и true в шаблоне.

Рекомендуемые значения

Выбор один, и он про то, доверяет ли клиент сертификату:

Значение Когда
true (умолчание с 5.0) всегда, если клиент умеет доверять сертификату монитора
false клиент не умеет — временная мера, а не решение

Сертификат у монитора свой и настраивается не строкой, а файлом /var/lib/pmta/webmon.pem.

Умолчание true с версии 5.0, false в 4.5 и требование писать false явно — из руководства (§ 3.3.1.58.2). Что порт отвечает и по TLS, и по обычному соединению — наша проверка на узле парка.
Пример в конфигурации
# шифрование монитора становится обязательным только этой строкой
http-mgmt-port 1000
http-tls-min-version tlsv1.2
http-redirect-to-https true
Вторая строка без третьей ничего не гарантирует: клиент просто не станет шифровать. Границу версии и запрет обычных соединений ставят вместе.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

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

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

Ждут прежнего умолчания на версии 5.0 и выше

§ 3.3.1.58.2

Чем чреватоУмолчание сменилось на true начиная с 5.0. Клиент, не понимающий перенаправления, после обновления перестаёт работать без единой правки конфигурации.
Как заметитьПосле обновления MTA клиент получает 301 вместо данных.
Как правильноЛибо научить клиент ходить по https, либо написать false явно — руководство требует именно явной записи.

Выключают перенаправление из-за самоподписанного сертификата

наш опыт

Чем чреватоПроблема доверия меняется на проблему открытого текста: ключ управления, дающий полный доступ к узлу, идёт по сети без шифра.
Как заметитьВ конфигурации false, а клиент передаёт X-API-Key.
Как правильноОставить true, а на стороне клиента либо отключить проверку цепочки, либо закрепить сертификат монитора.

Настраивают версии и шифры, оставив перенаправление выключенным

наш опыт

Чем чреватоНи одна из настроек TLS не применяется: клиент выбирает незашифрованное соединение и до согласования не доходит.
Как заметитьГраницы и списки заданы, а в журнале нет ни одного рукопожатия.
Как правильноПоставить true — это первая строка, а не последняя.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Справочные данные
Синтаксис
http-redirect-to-https <boolean>
Значения
yes | no | true | false
Умолчание
true § 3.3.1.58.2
Применение
нужен перезапуск сервиса
Очередь
уже поставленное в очередь не затронет
Где писать
Global
Сколько раз
один раз в блоке
Всё здесь — из руководства, с разделом.
Наследование
Наследования нет: строка пишется в корне файла, раздел Global, и действует на весь управляющий интерфейс узла. Разделения по адресам или по API у неё нет.
Как проверить на узле
Смотрим, что ответит монитор на обычный запрос:
curl -s -o /dev/null -w '%{http_code} %{redirect_url}\n' http://NODE:1000/status
Код 301 или 302 с адресом на https:// — перенаправление включено. 200 или 403 означают, что обычное соединение принято как есть, и всё, что передано в нём, прошло открытым текстом.
В Хабе
Управляется
Инфраструктура → Параметры узла
Значение
Хаб подбирает сам — темп, стадия прогрева, метрики
Цена ошибки
обратимо: вредит, пока стоит
Сценарии
Безопасность узла