Я хочу настроить postfix для ретрансляции почты только от определенных адресов отправителя. Postfix должен пересылать почту на разные ретрансляторы (/ smarthosts) (Gmail, AOL, ...) в зависимости от адреса отправителя («ПОЧТА ОТ:»).
Пока моя текущая конфигурация работает следующим образом:
Пользователи обычно проходят аутентификацию на postfix для ретрансляции почты. Если они не могут аутентифицироваться, ретрансляция невозможна. Обратите внимание, что эта аутентификация отличается от аутентификации для ретрансляторов.
В зависимости от адреса отправителя («ПОЧТА ОТ:») выбирается определенный узел ретрансляции (smtp_sender_dependent_authentication, sender_dependent_relayhost_maps, smtp_sasl_password_maps). Это тоже отлично работает.
Однако, если пользователь может пройти аутентификацию и имеет адрес отправителя, не указанный в sender_dependent_relayhost_maps, postfix пытается напрямую ретранслировать почту, что часто не работает из-за ограничений IP-адреса (черные списки).
Теперь у меня вопрос: как отклонить почту, которая была бы ретранслирована напрямую (без smarthost), то есть если адрес отправителя не указан в sender_dependent_relayhost_maps? Любые подсказки, как этого добиться?
Вам понадобится ограничивающий тест перед permit_sasl_authenticated. Предварительным условием для этого было бы разделение smtpd на порту 25 для входящей почты и еще один smtpd для подчинение в порту 587. В противном случае это ограничение приведет к отклонению входящей почты, поскольку она не пройдет проверку. Затем удалите permit_sasl_authenticated из порта 25 все вместе и добавьте тест в конфигурацию отправки в master.cf.
Чтобы ответить на ваш вопрос буквально, check_sender_access будет подходящим тестом, включив в белый список все домены, перечисленные в sender_dependent_relayhost_maps и отклонение почты для остальных.
check_sender_access type:tableИскать в указанном доступ (5) база данных для
MAIL FROMадрес, домен, родительские домены илиlocalpart@, и выполните соответствующее действие.
Это можно добавить либо к smtpd_sender_restrictions или smtpd_recipient_restrictions.
Что бы сделать то же самое, но еще больше запретить пользователям использовать адреса друг друга, используя reject_sender_login_mismatch. Это требует дополнительного smtpd_sender_login_maps стол, но если ваш virtual_alias_maps записи уже сформированы как address@example.com username, вы можете использовать тот же файл, и разрешенные адреса отправителей автоматически обновляются всякий раз, когда вы обновляете базу данных виртуальных псевдонимов с помощью postmap. Пример такой конфигурации представления в master.cf:
submission inet n - - - - smtpd
# Other parameters
-o smtpd_sender_login_maps=hash:/etc/postfix/virtual
-o smtpd_sender_restrictions=reject_sender_login_mismatch
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
# Other parameters