У нас есть Постфиксный сервер, который получает почту от наших серверов приложений. Отправители находятся в форме user@host.fqdn (где host.fqdn может варьироваться, в зависимости от исходного сервера), и получатели могут быть внутренними или внешними пользователями.
Сообщениям, идущим к внешним пользователям, нужно изменить отправителя на user@domain.com. Я попытался использовать канонические карты, но так как это обрабатывается демоном очистки, прежде чем любые транспортные решения будут приняты, это влияло бы на все адреса отправителя.
Я также попытался создать пользовательский транспорт smtp с универсальными отображениями и настроить transport_maps для использования того пользовательского транспорта smtp для внешних доменов. Однако универсальные отображения влияют и на отправителя и на адреса получателя.
Наконец, я попробовал следующее:
Однако очевидно только одна транспортная таблица может использоваться на Постфиксный экземпляр.
Я не хочу создавать совершенно новый Постфиксный экземпляр для размещения этой перезаписи. Какие-либо предложения? (и заранее спасибо)
Отказ от ответственности: этот ответ не будет работать должным образом при обработке электронной почты, имеющей несколько получателей с внутренним и внешним доменом
При использовании нескольких экземпляров 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
будет содержать отображение отправителя, как вы и предполагали.