Заголовок балансировщика на входе

use-inbound-proxy
Как узел узнаёт клиента из-за балансировщика

Балансировщик или устройство, снимающее шифрование, подключается к узлу от своего имени, и настоящий адрес клиента теряется. Механизм возвращает его: узел ждёт заголовок PROXY первым и берёт адрес и порт оттуда. Версию определяет сам, обе.

Троица строк одинакова у обоих видов входа — у почтового слушателя и у входа Transmissions API: use-inbound-proxy включает, inbound-proxy-timeout ограничивает ожидание (пять секунд по умолчанию, потом разрыв), log-inbound-proxy показывает, что пришло.

🔴 Без этого механизма рушится всё, что смотрит на адрес источника. Совпадение блока <source> — а с ним право отправлять через узел, лимиты и обработка управляющих заголовков — считается по адресу клиента. Потеряв его, узел увидит один и тот же адрес балансировщика у всех подающих и перестанет их различать.

🔴 И тут же обратная опасность: адрес становится утверждением клиента. За балансировщиком в закрытой сети это безопасно. На входе, доступном откуда угодно, — нет: подключившийся сможет объявить любой адрес и получить те права, какие у этого адреса есть.

Главная ловушка — включить приём заголовка на входе, доступном снаружи. Это превращает список источников из проверки в формальность: право отправлять получит тот, кто назовётся нужным адресом. Механизм рассчитан на закрытую сеть между балансировщиком и узлом.
Что делает Хаб. Не пишет: балансировщика перед узлами нет, подающие подключаются напрямую.

🔎 Если появится, включать надо одновременно с ним — строка без балансировщика закрывает каждое соединение, — и вход при этом обязан быть закрыт для всех, кроме самого балансировщика. Иначе право подачи достанется любому, кто назовётся нашим адресом.

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

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

Что Строка Умолчание
включить приём use-inbound-proxy выключено
сколько ждать inbound-proxy-timeout 5 секунд
показать полученное log-inbound-proxy выключено
Ожидание заголовка первым, автоопределение версии, извлечение адреса и порта, разрыв по истечении и наличие той же троицы у обоих входов — из руководства (§ 3.3.17.16–18, § 3.3.21.13–15). Разбор опасности на открытом входе — наш.
Пример в конфигурации
# вход закрыт для всех, кроме балансировщика — иначе адрес можно назвать любой
<smtp-listener 10.0.0.0/24:2525>
    use-inbound-proxy yes    inbound-proxy-timeout 1s
</smtp-listener>
Ограничение адреса в имени блока здесь не украшение, а условие безопасности механизма.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

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

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

Включают приём заголовка на входе, открытом наружу

наш опыт

Чем чреватоАдрес клиента становится тем, что он сам объявил. Подключившийся назовётся разрешённым адресом и получит его права — вплоть до права отправлять через узел.
Как заметитьВход слушает 0/0, и приём заголовка включён.
Как правильноСузить вход до адреса балансировщика.

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

§ 3.3.17.16

Чем чреватоЗаголовка никто не шлёт, и узел закрывает каждое соединение. Приём останавливается полностью.
Как заметитьВсе подключения рвутся сразу после установления.
Как правильноВключать одновременно с балансировщиком, а не заранее.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Наследование
Наследования у механизма нет — наследуются директивы, которыми он включается, а они живут внутри своего входа. Входов может быть несколько, и приём заголовка включается у каждого отдельно.
Как проверить на узле
Проверка прямая — подключиться в обход балансировщика:
nc -zv NODE 2525
Соединение должно закрыться: заголовка от nc не придёт. Держится — значит приём заголовка не включён. А вот проходит с любого адреса — значит вход открыт шире, чем следует.
В Хабе
Цена ошибки
с перерывом: применение прерывает работу узла
Сценарии
Безопасность узла · Подключить платформу отправки