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

Постфикс: изменить адрес отправителя в зависимости от получателя

У нас есть сервер Postfix, который принимает почту с серверов наших приложений. Отправители имеют вид user@host.fqdn (где host.fqdn может варьироваться в зависимости от исходного сервера), а получатели могут быть внутренними или внешними пользователями.

Для сообщений, отправляемых внешним пользователям, необходимо изменить отправителя на user@domain.com. Я пробовал использовать канонические карты, но поскольку это обрабатывается демоном очистки, до принятия каких-либо транспортных решений это повлияет на все адреса отправителя.

Я также попытался создать настраиваемый транспорт smtp с общими сопоставлениями и настроить transport_maps для использования этого настраиваемого транспорта smtp для внешних доменов. Однако общие сопоставления влияют как на адреса отправителя, так и на адреса получателя.

Наконец, я пробовал следующее:

Однако очевидно, что для каждого экземпляра Postfix можно использовать только одну транспортную таблицу.

Я хочу избежать создания совершенно нового экземпляра Postfix, чтобы приспособиться к этому переписыванию. Какие-либо предложения? (и заранее спасибо)

Отказ от ответственности: этот ответ не будет работать должным образом при обработке электронной почты, у которой было несколько получателей с внутренним и внешним доменом.

С множественным экземпляром postfix решение было бы тривиальным. Просто настройте transport_maps ко второму экземпляру, затем выполните переписывание во втором экземпляре.

Без нескольких экземпляров вам понадобится два процесса smptd, два процесса очистки и карта доступаИдея состоит в том, чтобы фильтровать карты доступа вместо transport_maps. Когда у электронного письма есть получатель из внешнего домена, оно передается второму демону smtpd. Затем второй демон smtpd вызовет второго демона очистки. Первый демон очистки не будет иметь параметра канонических карт, тогда как во втором демоне очистки мы добавим этот параметр для перезаписи.

В main.cf определите check_recipient_access в ограничении smtpd _ * _. Например:

smtpd_recipient_restriction =
   ... 
   check_recipient_access hash:/etc/postfix/external-filter
   ... 

В external-filter файл определяет механизм фильтрации

external.example.com    FILTER smtp:[127.0.0.1]:12525

В этом примере мы настроим второй демон smtpd, который прослушивает 127.0.0.1 порт 12525.

Теперь установите второй демон smtpd и очистки в master.cf

[127.0.0.1]:12525  ....  smtpd -o cleanup_service_name=cleanup_rewrite

cleanup_rewrite .... cleanup -o canonical_maps=hash:/etc/postfix/mysender_rewriting

файл mysender_rewriting будет содержать отображение отправителя, как вы и предполагали.