relay-domain

Global

Домены получателей, почту для которых узел принимает от кого угодно
в конфигурации это строкаrelay-domain local domainsвнутри блока Global
Входящий механизм, а не право отправлять

Строка называет домен получателя (или образец домена), для которого узел принимает почту независимо от адреса отправителя. Директиву повторяют — по строке на домен.

Умолчание руководство описывает словами «локальные домены»: то, что узел и так считает своим, включая объявленные строкой host-name.

Это механизм приёма, а не отправки. Руководство говорит прямо: строка полезна главным образом там, где узел обслуживает входящую почту и передаёт её дальше. Если узел занимается только отправкой, перечислять домены не нужно вовсе — там работает always-allow-relaying.

Перечислять несколько доменов разом удобно domain-macro: имя списка подставляется в шаблон вида yahoo.$topLevel.

Главная ловушка — имя обещает не то. «Relay» в названии наводит на мысль о праве отправлять через узел, и отправитель, которому нужно разрешить подачу, берётся именно за эту строку. Она не даёт ничего: подача продолжает получать отказ, а домены в конфигурации создают впечатление сделанной работы.

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

Что делает Хаб. Не пишет: приём он открывает адресами, а не доменами — три правила по образцу в базовой конфигурации: жалобы, асинхронные отказы и роль-адреса.

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

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

Что ставить. Строка нужна не всем и не всегда:

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

Если нужны лишь несколько служебных адресов — жалобы, отказы, роль-адреса, — точнее relay-address: он открывает адрес, а не весь домен.

Синтаксис, повторяемость, умолчание «локальные домены» и оговорка «полезно главным образом для входящей почты» — из руководства, § 3.3.1.54.2. Сравнение с приёмом по адресу наше.
Пример в конфигурации
# узел принимает входящую почту этого домена и передаёт дальше
relay-domain example.comrelay-domain some.other.domain
Почта на любой адрес в перечисленных доменах будет принята от кого угодно. Право отправлять через узел эти строки не дают — за него отвечает разрешение в блоке источника.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

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

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

Берутся за эту строку, когда нужна отправка

§ 2.3

Чем чреватоОна решает обратную задачу — приём почты на ваши домены. Право отправлять через узел не появляется, и подача продолжает отбиваться.
Как заметитьДомены получателей перечислены, а подача получает relaying denied.
Как правильноРазрешать подачу строкой в блоке источника; перечисление доменов оставить для входящей почты.

Открывают целый домен ради нескольких адресов

наш опыт

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