Назад | Перейти на главную страницу

Как изменить получателя на ретрансляторе Postfix (smtp_generic_maps не работает)?

У меня настроен почтовый шлюз Postfix, и я хочу изменить адрес получателя. Я хочу, чтобы вся почта пересылалась на ceo@yahoo.com вместо этого передается ceo@somewhere.org Я настроил Postfix с помощью smtp_generic_maps (как показано ниже), однако это работает только для почты, создаваемой на самом сервере Postfix. Любая почта, пересылаемая через сервер Postfix, по-прежнему отправляется ceo@yahoo.com эффективно игнорируя smtp_generic_maps. Какую конфигурацию мне следует изучить для этого?

# grep smtp_generic_maps main.cf
smtp_generic_maps = hash:/etc/postfix/generic

# postmap /etc/postfix/generic
# service postfix reload

# cat /etc/postfix/generic
ceo@yahoo.com               ceo@somewhere.org

Вы не должны использовать smtp_generic_maps для этого

В Readme для перезаписи адресов Postfix описывает правильное использование для smtp_generic_maps:

С smtp_generic_maps параметр вы можете указать универсальный (5) таблицы поиска, которые заменяют локальные почтовые адреса действительными интернет-адресами, когда почта покидает машину через SMTP. В универсальный (5) отображение заменяет адреса конверта и заголовка и не является рекурсивным. Этого не происходит, когда вы отправляете почту между адресами на локальной машине.

Вы пытаетесь использовать его (вместо замены локальных адресов, например ceo@localdomain.local) для замены адреса на полное доменное имя ceo@yahoo.com. Так как yahoo.com не настроен в mydestination он не считается локальным доменом, поэтому не обрабатывается универсальный (5) отображение.

Однако вам не следует настраивать чужой домен в качестве локального, так как он действительно должен обрабатываться smtp (8) агент доставки вместо этого. Это предотвратит отправку почты любым пользователем @yahoo.com адрес. Такое вмешательство было бы технически некорректным и, возможно, даже незаконным.


Привлечение пользователей к политике компании check_recipient_access

Если проблема в том, что кто-то пытается отправить электронное письмо вашему генеральному директору на адрес личного @yahoo.com адрес, и вы хотите предотвратить это и принудительно использовать корпоративный адрес электронной почты ceo@example.com вместо этого вы можете добавить check_recipient_access ограничение на ваш main.cf:

 smtpd_recipient_restrictions =
     ...
     check_recipient_access hash:/etc/postfix/denied_recipients,
     ...
     permit

а затем добавьте отказ с понятной человеку причиной в /etc/postfix/denied_recipients:

 ceo@yahoo.com  REJECT  The CEO must be contacted using official <ceo@example.com> address.

(Как я использовал hash: в моем примере не забудьте postmap /etc/postfix/denied_recipients.)


С помощью транспорт (5) таблица для переопределения встроенных настроек Postfix по умолчанию

Чтобы все ceo@yahoo.com быть доставленным ceo@example.com ты можешь использовать transport_maps вместо того smtp_generic_maps.

ОПИСАНИЕ

Необязательный транспорт (5) Таблица определяет сопоставление адресов электронной почты с механизмами доставки сообщений и местами назначения следующего перехода. Транспорты доставки сообщений, такие как local или smtp, определены в master.cf файл, а места назначения следующего перехода обычно являются хостами или доменными именами. Таблица просматривается тривиально-переписать (8) демон.

Это сопоставление отменяет значение по умолчанию transport:nexthop выделение, встроенное в Postfix.

Добавить transport_maps на ваш /etc/postfix/main.cf:

 transport_maps = hash:/etc/postfix/transport

А затем добавить к /etc/postfix/transport одна строка для ceo@yahoo.com изменение значения по умолчанию transport:nexthop к virtual:ceo@example.com:

 ceo@yahoo.com   virtual:ceo@example.com
 yahoo.com       :
 *               :

В других строках просто указано, что никаких изменений для yahoo.com а остальные, возвращаясь к значениям по умолчанию transport:nexthop поведение.