relay-address

GlobalХаб задаёт сам

Адреса получателей, почту на которые узел принимает от кого угодно
в конфигурации это строкаrelay-addressвнутри блока Global
Приём на отдельные адреса, а не на домен целиком

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

Это механизм приёма. Как и соседний relay-domain, он про право доставить письмо вам, а не про право отправлять через вас. Руководство говорит то же: полезен главным образом там, где узел обслуживает входящую почту.

Именно так на узел попадают отказы, жалобы и служебная почта, которую потом разбирают обработчики.

Отличие от приёма по домену в точности: домен принимает на любой адрес внутри себя, образец — только на подходящие.

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

Практический вывод: служебные адреса стоит делать неугадываемыми, а образцы — узкими. Правило вида /^bounce@/ открывает bounce@ во всех ваших доменах разом; /^bounce@bounce\./ — только в служебном поддомене.

Что делает Хаб. Пишет — три правила по образцу в базовой конфигурации узла:

/^fbl@fbl\./ — приём жалоб ARF на адрес в служебном поддомене. /^bounce@bounce\./ — приём асинхронных отказов туда же, куда их направляет переписывание обратного адреса. /^(dmarc|postmaster|abuse)@/ — роль-адреса.

Третье правило появилось не сразу, и в шаблоне рядом с ним стоит объяснение: без него анти-релей отбивал агрегатные отчёты DMARC ответом 550 relaying denied, а вместе с ними письма служб на abuse@ и всё, что пишут на postmaster@.

Образцы у первых двух правил узкие: они открывают адрес только в служебном поддомене, а не во всех доменах узла.

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

Что ставить. Значение — адрес или образец; выбирать приходится ширину:

Значение Когда
конкретный адрес адрес один и меняться не будет
узкий образец адрес один и тот же в служебном поддомене каждого домена
широкий образец роль-адреса, которые обязаны работать во всех доменах

Третье допустимо только для адресов, которые обязаны быть открыты по стандарту: postmaster@, abuse@, адрес для отчётов DMARC. Всё остальное сужать.

Синтаксис, повторяемость и оговорка «полезно главным образом для входящей почты» — из руководства, § 3.3.1.54.3. Совет о ширине образца — наш, из шаблона базовой конфигурации.
Пример в конфигурации
# так пишет базовую конфигурацию Хаб — узкие образцы плюс роль-адреса
relay-address /^fbl@fbl\./
relay-address /^bounce@bounce\./relay-address /^(dmarc|postmaster|abuse)@/
Первые два образца открывают адрес только в служебном поддомене. Третий шире намеренно: эти адреса обязаны работать во всех доменах узла, иначе отчёты DMARC и письма служб отбиваются анти-релеем.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

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

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

Открывают роль-адреса слишком поздно

наш опыт

Чем чреватоПока правила нет, анти-релей отбивает всё, что приходит на postmaster@, abuse@ и адрес для отчётов DMARC, — ответом 550 relaying denied. Агрегатные отчёты, которые вы сами запросили записью в DNS, до вас не доходят.
Как заметитьОтчётов DMARC нет, хотя запись rua опубликована.
Как правильноДобавить правило для роль-адресов и проверить приём подачей с чужой машины.

Пишут широкий образец там, где хватило бы узкого

наш опыт

Чем чреватоПравило вида /^bounce@/ открывает адрес во всех доменах узла. Всё, что пришлют на него перебором, узел примет и поставит в очередь.
Как заметитьВ очередях письма на служебные адреса доменов, которые этим не пользуются.
Как правильноСузить образец до служебного поддомена — так, чтобы совпадала и левая, и правая часть адреса.

Ждут от строки права отправлять

§ 3.3.1.54.3

Чем чреватоОна про приём, а не про отправку. Подача через узел продолжает отбиваться, сколько адресов ни перечисляй.
Как заметитьАдреса перечислены, а подача получает relaying denied.
Как правильноРазрешать подачу строкой в блоке источника.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Справочные данные
Синтаксис
relay-address { EMAIL-ADDRESS | REGEX }
Значения
адрес получателя или регулярное выражение; строку можно повторять
Применение
reload, перезапуск не нужен
Очередь
уже поставленное в очередь не затронет
Где писать
Global
Сколько раз
можно повторять
Всё здесь — из руководства, с разделом.
Наследование
Директива пишется в корне файла конфигурации и действует на весь узел: блока для неё нет, и наследования тоже. Ограничить приём по источнику нельзя — в этом и смысл: адрес принимается независимо от того, кто подаёт.
Как проверить на узле
Правила видно в конфигурации, поведение проверяется подачей с чужой машины:
grep -n 'relay-address' /etc/pmta/config
printf 'HELO test\r\nMAIL FROM:<a@example.com>\r\nRCPT TO:<postmaster@ваш.домен>\r\nQUIT\r\n' | nc <адрес-узла> 25
Ответ 250 означает, что адрес открыт для приёма. Проверять стоит и обратное: адрес, который открывать не собирались, должен получить отказ. Отказ 550 relaying denied на роль-адресе — признак того, что третьего правила нет.
В Хабе
Управляется
Инфраструктура → Адреса отправки
Значение
Хаб подбирает сам — темп, стадия прогрева, метрики
Цена ошибки
обратимо: вредит, пока стоит
Сценарии
Приём входящей почты