Поток назван заголовком, если источнику это разрешено

критично

X-Virtual-MTA header selection
X-Virtual-MTA — самый обычный способ назвать поток

Чтобы это заработало, должны сойтись три вещи: поток объявлен в конфигурации; адрес подачи попадает в какой-нибудь блок <source>; и у этого блока стоит разрешение на обработку заголовка. Без третьего заголовок не ошибка, а пустое место — MTA его просто не читает.

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

Именем пула тоже работает. Тот же заголовок, вместо имени потока — имя пула, и письмо уходит одним из участников по кругу.

Это наш основной способ. Прогрев Хаба называет адрес именно заголовком: он точен до письма, виден в подаче и не требует ничего от конфигурации, кроме одной строки разрешения.

Главная ловушка. Разрешение выдаётся источнику целиком и не ограничивается списком потоков. Нельзя сказать «этот отправитель может называть только свои три адреса»: разрешив заголовок, вы разрешили называть любой поток на узле, в том числе прогреваемый для кого-то другого. Единственная граница — не выдавать разрешение вовсе.
Что делает Хаб. Пишет разрешение сам: process-x-virtual-mta yes стоит во всех источниках рабочей конфигурации — и в подобранных по адресу, и в именованных источниках подачи с логином. Прогрев ставит заголовок на каждое письмо. Ограничения «кому какие потоки называть можно» нет — его нет и в MTA, — поэтому разделение клиентов держится на том, что подача идёт под разными логинами и через сам Хаб, а не напрямую в узел.
Рекомендуемые значения

Собственных значений у механизма нет. Настраиваются три соседние директивы источника: process-x-virtual-mta — читать ли заголовок, retain-x-virtual-mta — оставлять ли его в письме, allow-empty-x-virtual-mta — что считать пустым значением. Умолчания у всех трёх «нет, не делать», и это разумный набор по умолчанию.

Всё из руководства — три директивы, их умолчания и правило «без разрешения заголовок не читается и не снимается».
Пример в конфигурации
# разрешение выдаётся источнику; заголовок в письме называет поток
<virtual-mta shop-example-com>
    smtp-source-host 203.0.113.10 shop.example.com
</virtual-mta>

<source 10.0.0.0/24>
    process-x-virtual-mta yes    always-allow-relaying yes
</source>
Письмо, поданное из этой подсети со строкой x-virtual-mta: shop-example-com, уйдёт с адреса 203.0.113.10. Без строки process-x-virtual-mta тот же заголовок не сделает ничего — и уедет получателю.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

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

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

Ставят разрешение не тому источнику

§ 3.3.7.52

Чем чреватоИсточник выбирается по адресу подающего, и блоков <source> на узле обычно несколько. Разрешение, записанное в блок, под который подача не попадает, не делает ничего: заголовок не читается, поток берётся умолчанием, а сама строка уезжает получателю.
Как заметитьЗаголовок виден в доставленном письме; в учёте стоит имя потока из умолчания.
Как правильноНайти блок <source>, под который попадает адрес подачи, и ставить разрешение в него. Более узкий блок перекрывает более широкий — проверять надо самый узкий из совпавших.

Выдают разрешение клиентскому источнику

§ 9.4.1

Чем чреватоОграничить набор потоков нельзя: разрешив заголовок, вы разрешили называть любой поток узла. Клиент может уйти с адреса, который прогревается для другого, и испортить чужую репутацию.
Как заметитьВ учёте у одного клиента появляются имена потоков другого.
Как правильноНе выдавать разрешение источникам, которым вы не доверяете. Если выбор им всё-таки нужен — давать его правилом по образцу, где соответствие «отправитель → поток» задаёте вы.

Оставляют заголовок в письме без нужды

§ 3.3.7.53

Чем чреватоretain-x-virtual-mta yes доносит до получателя внутренние имена потоков парка. Пользы это не приносит никакой, а устройство инфраструктуры показывает.
Как заметитьВ исходном коде доставленного письма виден X-Virtual-MTA с понятным именем вроде shop-example-com.
Как правильноОставить умолчание no. Если имя потока нужно для разбора — оно и так есть в учёте, в поле vmta.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Наследование
Наследования у механизма нет: заголовок разбирается в каждом письме. Наследуются разрешения — все три директивы записаны в <source> и сливаются по правилу источников: более узкий блок перекрывает более широкий. Поэтому разрешение, выданное в <source> 0/0, действует и на все подсети, для которых не сказано обратное.
Как проверить на узле
Проверять двумя шагами: что поток существует и что письмо ушло именно им. Первое — на узле:
pmta show vmtas
Имя из заголовка должно совпадать со строкой этого списка буквально. Второе — по учёту: pmtaacctfind –output csv[vmta,rcpt] покажет, каким потоком письмо ушло на самом деле. Если в списке имя есть, а в учёте стоит другое — разрешение на заголовок не выдано тому источнику, с которого идёт подача.
В Хабе
Цена ошибки
обратимо: вредит, пока стоит
Сценарии
Прогрев адресов · Разделение отправителей
Важность
критично