Postfix: выбор узла ретрансляции на основе заголовка From: mail, а не отправителя конверта

9

Я успешно настроил Postfix для ретрансляции электронной почты через Mandrill с использованием SASL и sender_dependent_relayhost_mapsс таблицей MySQL, чтобы разные отправители подключались к Mandrill, используя свое собственное имя пользователя и ключ API Mandrill.

Пока все хорошо, но у меня есть три пользователя, которые все используют поставщика услуг электронной почты, и для Отправителя в конверте сообщения установлено значение «mailer@infusionmail.com» для всех трех пользователей, и единственное место, содержащее электронную почту реального пользователя адрес указан в заголовке письма « От:» .

Я доволен безопасностью (или ее отсутствием) использования заголовка электронной почты « От:», так как я пересылаю только письма, отправленные на конкретные адреса электронной почты, которые строго контролируются, но я был бы очень благодарен за предложения относительно того, как я могу лучше всего указать relayhost на основе значения заголовка From : . Есть ли способ установить значение конверта таким же, как в поле «От»? Или любой другой способ сделать это?

Адриан Сэвидж
источник
Использовали ли три пользователя одинаковые учетные данные SASL?
masegaloeh
Нет, у каждого из них разные учетные данные SASL. Когда они отправляют почту прямо из своего почтового клиента, он корректно идентифицирует их почтовый ретранслятор и учетные данные SASL, основываясь на их адресе отправки. Использование ESP infusionmail.com на данном этапе делает невозможным выполнение одного и того же поиска на основе отправителя, так как отправитель один и тот же, и отличается только заголовок письма «От:».
Адриан Сэвидж

Ответы:

5

Основываясь на этой теме в списке рассылки postfix: различный транспорт для всей почты, введенной через sendmail (1) , похоже, ваш случай был возможен. К сожалению, вы не можете полагаться только на две таблицы sender_dependent_relayhost_mapsи smtp_sasl_password_maps. Вам нужно изменить master.cf. Идея заключается в том, header_checksчтобы направлять электронную почту на другой транспорт. Затем в каждом транспорте мы определяем клиента smtp, который использует независимые учетные данные и relayhost.

Сначала определите header_checks в main.cf и его таблице pcre

#main.cf
header_checks = pcre:/etc/postfix/header_dependent_relay

#/etc/postfix/header_dependent_relay

/^From:.*specialsender1\@example\.com/       smtp1:[host1.example.com]
/^From:.*specialsender2\@example\.com/       smtp2:[host2.example.com]
/^From:.*specialsender3\@example\.com/       smtp3:[host3.example.com]

Хорошо, теперь мы установка smtp1, smtp2, smtp3транспорт в master.cf

#master.cf
smtp1    unix  -       -       -       -       10       smtp
    -o smtp_sasl_password_maps=hash:/etc/postfix/smtp1.relay
smtp2    unix  -       -       -       -       10       smtp
    -o smtp_sasl_password_maps=hash:/etc/postfix/smtp2.relay
smtp3    unix  -       -       -       -       10       smtp
    -o smtp_sasl_password_maps=hash:/etc/postfix/smtp3.relay

Файл smtpX.relayимеет похожее содержание, например

[hostX.example.com]   userX:passwordX

Отказ от ответственности:

masegaloeh
источник
0

Это сработало для меня с одним изменением: необходимо добавить действие «FILTER» в файл header_dependent_relay :

#/etc/postfix/header_dependent_relay

/^From:.*specialsender1\@example\.com/       FILTER smtp1:[host1.example.com]
/^From:.*specialsender2\@example\.com/       FILTER smtp2:[host2.example.com]
/^From:.*specialsender3\@example\.com/       FILTER smtp3:[host3.example.com]

См. Http://www.postfix.org/header_checks.5.html.

Аурел
источник