source

<smtp-listener>

Какой именованный источник действует для соединений этого приёмника
в конфигурации это строкаsourceвнутри блока <smtp-listener>
То же имя ещё 1:<smtp-listener><smtp-user>— часть из них другие настройки, часть та же самая
Права по приёмнику, а не по адресу

Строка называет блок <source>, чьи настройки действуют для соединений, принятых на адресе этого приёмника. Руководство описывает результат одним словом: они перекрывают то, что дал бы подбор по адресу отправителя.

Умолчания нет: не написана — действует обычный подбор.

То же самое можно записать параметром прямо в строке приёмника уровня узла (smtp-listener 1.2.3.4:25 source=mta1) — это две формы одной настройки.

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

Главная ловушка — перекрытие сильнее адреса. Соединение, пришедшее на такой приёмник, получает настройки названного блока независимо от того, откуда оно пришло. Правило «сузить блок источника до своей сети» на этом порту перестаёт работать: блок выбран приёмником, а не адресом.

Значит все ограничения по адресу для этого порта надо задавать либо в самом названном блоке, либо диапазоном в адресе приёмника.

Что делает Хаб. Не пишет: приёмники он объявляет строками уровня узла без параметра, а разведение прав держит на логинах — именованный источник выбирает source внутри <smtp-user>, а не приёмник.

Разница существенная: у нас права привязаны к учётной записи и действуют с любого адреса, а эта директива привязала бы их к порту.

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

Что ставить. Значение — имя блока; вопрос в том, по чему разводить права:

Значение Когда
не писать права разводятся по логину или по адресу — обычный случай
имя блока у портов разные роли: подача на одном, приём входящей почты на другом

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

Назначение, слово «перекрывает» и равнозначная форма параметром source= в строке приёмника — из руководства, § 3.3.17.3 и § 3.3.1.27. Совет выписывать полный набор — наш, из опыта с именованными источниками логинов.
Пример в конфигурации
# у порта приёма жалоб свои права: ретрансляция запрещена
<source inbound-only>
    smtp-service yes
    max-message-size 30M
</source>

<smtp-listener 0/0:25>
    source inbound-only</smtp-listener>
Соединение на этом порту получит настройки названного блока с любого адреса. Разрешения на ретрансляцию в нём нет — значит через этот порт чужую почту не сдать.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

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

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

Ждут, что ограничение по адресу останется в силе

§ 3.3.17.3

Чем чреватоНазванный блок перекрывает подобранное по адресу. Правило «разрешать только своей сети», записанное в адресных блоках, на этом порту не действует, и права получает каждый, кто до него дотянулся.
Как заметитьЧерез порт с названным источником проходит подача с адресов, которым она запрещена в адресных блоках.
Как правильноЗадавать ограничение в самом названном блоке или сузить диапазон в адресе приёмника.

Пишут в названном блоке только отличия

наш опыт

Чем чреватоНастройки, оставленные в адресных блоках, до соединений этого порта могут не дойти. Тот же случай, что и с именованными источниками логинов, где наследование у нас не подтвердилось.
Как заметитьНастройка действует на одном порту и не действует на другом при одинаковой подаче.
Как правильноВыписывать в названном блоке полный набор и проверять поведением.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Справочные данные
Синтаксис
source <name>
Значения
имя блока источника
Применение
reload, перезапуск не нужен
Очередь
уже поставленное в очередь не затронет
Где писать
<smtp-listener>
Сколько раз
один раз в блоке
Всё здесь — из руководства, с разделом.
Наследование
Директива живёт в <smtp-listener> и относится к одному приёмнику. Она не наследуется — наследуется то, на что она указывает: именованный блок вступает в силу для соединений этого порта и перекрывает подобранное по адресу. Полагаться на то, что неупомянутое в нём достанется из адресных блоков, мы не советуем.
Как проверить на узле
Связь приёмника с блоком видна в конфигурации; действует ли она — только по поведению:
grep -n 'smtp-listener\|^ *source ' /etc/pmta/config
printf 'HELO test\r\nMAIL FROM:<a@example.com>\r\nRCPT TO:<b@example.net>\r\nQUIT\r\n' | nc <адрес-узла> 25
Вторая команда выполняется с чужой машины и проверяет права именно этого порта. Отказ на RCPT означает, что ретрансляция на нём закрыта; ответ 250 — что открыта, кем бы ни был подающий.
В Хабе
Цена ошибки
обратимо: вредит, пока стоит
Сценарии
Безопасность узла · Подключить платформу отправки