Что защищает веб-монитор и чем эта защита не является

web monitor access control
Список адресов вместо учётных записей

Защит три, и ломаются они по-разному, поэтому их стоит разделять.

Первая — список адресов, и по умолчанию он пуст. Свежий узел отвечает браузеру отказом, а не данными; руководство отдельно предупреждает об этом, потому что отказ выглядит поломкой и ею не является. Уровень задаётся диапазону строкой http-access: monitor, operator или admin, с оговоркой deny-logs для журналов.

Учётных записей нет ни одной. Уровень получает диапазон адресов, и все, кто приходит из него, — один и тот же безымянный посетитель. Диапазон уровня admin может прочитать конфигурацию, заменить лицензию, скачать файлы учёта и выполнить команду — и следа о том, кто это сделал, не останется. Уровни сужают, что можно делать, но не делают происходящее разбираемым.

Вторая — шифрование, и сертификат для него выпускается при установке, самоподписанный. Браузеры о нём предупреждают; лечится он не строкой конфигурации, а заменой файла /var/lib/pmta/webmon.pem и перезапуском монитора. Вендор называет одно конкретное последствие: Internet Explorer на Windows работает с таким сертификатом очень медленно.

Третья — не защита, а указание: монитор должен быть доступен только в локальной сети и не из интернета. Формулировка вендора — предупреждение, а не совет, и она справедлива: через монитор видны файл конфигурации, лицензия, журналы, файлы учёта, список локальных адресов и страница выполнения команд.

Главная ловушка — читать главу 5 как описание одного плоского списка разрешений. Про уровни доступа, оговорку deny-logs и про то, что ключ отменяет ограничение по адресу, она не говорит ни слова — это в § 3.3.1.58.3 и в главе 8. Читавший только главу 5 будет уверен, что запись в списке означает «пустить посмотреть».
Что делает Хаб. Пишет список сам: admin локальным адресам узла, monitor — своим. Административные действия выполняет ключом, потому что собственный внешний адрес Хаба непостоянен. Отсюда следствие, которое стоит держать в голове: от нашего ключа узел защищает не список адресов, а хранение ключа.

🔴 И это стоит проверить на парке. На узле парка порт монитора оказался доступен с произвольной машины из интернета — отказ 403 пришёл, но пришёл он после того, как соединение установилось, и в теле отказа MTA назвал путь к конфигурации, путь к журналу и строку, дающую полный доступ. Это единственная поверхность узла, где ошибка не видна и используется удалённо.

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

Собственных значений у механизма нет: их задают три директивы.

Что Чем задаётся Умолчание
порт http-mgmt-port 8080
кого пускать http-access никого
обязательно ли шифрование http-redirect-to-https true с версии 5.0

Сертификат — не директива, а файл /var/lib/pmta/webmon.pem.

Отказ по умолчанию, самоподписанный сертификат, способ его замены, случай с Internet Explorer и предупреждение про интернет — из руководства (§ 5.1). Уровни доступа и отмена ограничения ключом — из § 3.3.1.58.3 и главы 8; глава 5 о них не говорит. Что порт узла парка доступен снаружи — наша проверка.
Пример в конфигурации
# три защиты в одном месте: порт, список, обязательность шифра
http-mgmt-port 1000
http-access 127.0.0.1 adminhttp-access 10.0.0.5 monitor
http-redirect-to-https true
Четвёртой строки для сертификата нет и быть не может: он лежит файлом. Замена сертификата — отдельная операция с перезапуском монитора.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

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

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

Принимают отказ свежего узла за поломку

§ 5.1

Чем чреватоПо умолчанию не разрешён никто, и монитор отвечает отказом. Ищут неисправность в службе, хотя она работает как задумано.
Как заметитьМонитор слушает порт и отвечает 403 всем без исключения.
Как правильноДобавить свой адрес в http-access и перезапустить монитор.

Полагаются на список адресов вместо межсетевого экрана

наш опыт

Чем чреватоСоединение до порта доходит, и отказ приходит уже от приложения — вместе с путями к файлам и готовой строкой для полного доступа. Плюс любой сбой в разборе списка сразу означает открытый узел.
Как заметитьПорт монитора отвечает с произвольной машины из интернета.
Как правильноЗакрыть порт на уровне сети, оставив адреса Хаба; список внутри — второй рубеж.

Ждут, что уровни доступа дадут разбор действий

§ 5.1

Чем чреватоУровень получает диапазон адресов, а не человек. Кто именно заменил лицензию или остановил очередь, из журнала не следует.
Как заметитьДействие произошло, а ответственного не найти.
Как правильноВключить http-log-requests и выдавать разным приложениям разные ключи — тогда хотя бы видно, чей ключ работал.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Наследование
Наследования у механизма нет — наследуются директивы, которыми он включается, а все они пишутся в корне файла, раздел Global. Монитор на узле один, и разделить его настройки по интерфейсам или по посетителям нельзя.
⇄

Связанные записи

4 связи

Как проверить на узле
Первый вопрос — не «кто в списке», а «кто вообще дотянется до порта». Проверять надо снаружи, с машины вне доверенной сети:
curl -s -o /dev/null -w '%{http_code}\n' --connect-timeout 5 http://NODE:1000/status
Ответ 403 означает, что список работает — и что порт при этом доступен из интернета. Правильный ответ здесь — таймаут: до порта не должно доходить соединение. Список адресов — второй рубеж, а не первый.
В Хабе
Цена ошибки
обратимо: вредит, пока стоит
Сценарии
Подготовить узел к отправке · Безопасность узла