Поток следует за адресом, на который вы подключились

selection by listener
Свой адрес подачи — свой поток

Механизм держится на именованных блоках источника. Обычный блок <source> выбирается по адресу подающего; именованный — не выбирается сам, а подключается к слушателю директивой smtp-listener и с этого момента действует на всех, кто соединился с указанным адресом и портом. Внутри такого блока и стоит default-virtual-mta.

Слушателей может быть сколько угодно — на разных адресах и портах, у каждого свой именованный источник и, значит, свой поток по умолчанию. Отправителю остаётся выбрать, куда подключаться.

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

Главная ловушка — перепутать «выбор» с «правом». Строка always-allow-relaying yes в именованном источнике превращает слушатель в открытый ретранслятор для всех, кто до него дотянется: никакой проверки адреса отправителя тут уже нет, блок выбран самим фактом подключения. Руководство пишет об этом явно.
Что делает Хаб. Не пользуется: слушателей Хаб объявляет два — порт подачи и порт приёма жалоб и отказов, оба на всех адресах (0/0) и без ссылки source=. Поток выбирается логином подачи, заголовком X-Virtual-MTA, правилом по домену обратного адреса или по адресу, на который пришло подключение (by-smtp-source-ip), — последнее решает ту же задачу без слушателя на каждый адрес.

Способ остаётся в запасе для случая «платформе нужен собственный вход»: выдать ей отдельный адрес и порт, и она получит свой поток, ничего у себя не меняя.

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

Собственных значений у механизма нет: он собирается из двух директив — smtp-listener со ссылкой source= и default-virtual-mta внутри именованного блока. Что в такой блок писать можно и чего нельзя:

Строка Можно ли Почему
default-virtual-mta да, ради этого всё и делается выбор потока, не право
always-allow-relaying нет действует на всех, кто дотянулся до адреса
allow-mailmerge нет то же самое, плюс верхняя ступень выбора
лимиты и таймауты да это свойства приёма, а не разрешения
Запрет на права в именованном источнике — из руководства, прямым предупреждением. Разбивка по строкам таблицы — наша.
Пример в конфигурации
# у каждого адреса свой вход и свой поток по умолчанию
<virtual-mta vmta1>
    smtp-source-host 203.0.113.10 vmta1.example.com
</virtual-mta>

<source vmta1>
    default-virtual-mta vmta1</source>

smtp-listener 203.0.113.10:25 source=vmta1
smtp-listener 0.0.0.0:25
Кто подключился на 203.0.113.10, отправляет потоком vmta1. Второй слушатель оставлен намеренно: без него узел перестанет принимать почту на всех остальных адресах. Прав в блоке <source vmta1> нет ни одного — они раздаются в других источниках, по адресу отправителя.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

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

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

Дают права в источнике, подключённом к слушателю

§ 9.4.3

Чем чреватоИменованный источник выбирается самим фактом подключения к адресу и порту, без всякой проверки, кто подключился. Строка always-allow-relaying yes в нём превращает узел в открытый ретранслятор для всех, кто до этого адреса дотянется.
Как заметитьЧерез узел проходит почта неизвестных отправителей; в учёте обратные адреса из доменов, которых у вас нет.
Как правильноВ именованном источнике держать только выбор потока. Права раздавать по авторизации или по адресу отправителя — отдельными блоками <source>.

Убирают общий слушатель, объявив именованный

§ 9.4.3

Чем чреватоСлушатель — не дополнение к умолчанию, а полный список того, что узел слушает. Объявив только 1.2.3.4:25, вы перестали принимать почту на всех остальных адресах, включая приём отказов и жалоб.
Как заметитьПодача с одних адресов работает, с других соединение не устанавливается вовсе.
Как правильноОставлять общий слушатель 0.0.0.0:25 рядом с именованными — так и сделано в примере руководства.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Наследование
Именованный источник в общем слиянии источников не участвует: он не выбирается по адресу подающего и применяется только там, где на него сослался слушатель. Это и делает его отдельным механизмом, а не частным случаем обычного блока <source>.
Как проверить на узле
Что узел слушает и с какими источниками — видно в конфигурации:
grep -rn '^ *smtp-listener' /etc/pmta/
У строки слушателя должна стоять ссылка source= с именем блока. Если её нет, подключение попадает в обычный источник по адресу отправителя, и поток берётся оттуда — механизм не работает вовсе.
В Хабе
Цена ошибки
обратимо: вредит, пока стоит
Сценарии
Безопасность узла · Подключить платформу отправки