Linux

Postfix: разные relayhost для отправителей и доменов через sender_dependent_relayhost_maps

Postfix умеет выбирать relayhost не только глобально для всего сервера. Если разные адреса или домены должны отправлять письма через разные SMTP-шлюзы, используйте sender_dependent_relayhost_maps. Это штатный механизм Postfix и он надёжнее набора shell-скриптов и ручной подмены конфигурации.

Когда это нужно

  • несколько доменов используют разных SMTP-провайдеров;
  • часть отправителей должна идти через корпоративный relay, а часть — напрямую;
  • для разных адресов используются разные SASL-учётные записи;
  • нужно постепенно мигрировать домены между SMTP-шлюзами.

Базовая логика

Postfix смотрит на envelope sender и ищет для него соответствующий next-hop в таблице sender-dependent relayhost. Если совпадения нет, может использоваться общий relayhost или стандартная маршрутизация — в зависимости от вашей конфигурации.

Пример main.cf

smtp_sender_dependent_authentication = yes
sender_dependent_relayhost_maps = hash:/etc/postfix/sender_relay
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_security_level = may

Тип lookup table может отличаться в зависимости от сборки Postfix. Перед копированием hash: или lmdb: проверьте, какие типы доступны именно на вашей системе.

Таблица relayhost

user1@example.com    [smtp.provider-a.example]:587
@example.org         [smtp.provider-b.example]:587

Квадратные скобки вокруг SMTP-хоста запрещают подменять указанный сервер через MX lookup. Для smarthost это обычно именно то, что нужно.

SASL-пароли

Если релеи требуют авторизацию, храните учётные данные в отдельной таблице с минимальными правами доступа. Не публикуйте этот файл в Git и не вставляйте реальные пароли в документацию или тикеты.

После изменения таблиц

Для map-типов, которым требуется компиляция, выполните соответствующий postmap, затем проверьте конфигурацию Postfix и сделайте reload. После этого отправьте тестовые письма от каждого типа отправителя и посмотрите в логах выбранный relay.

Не путайте адрес From и envelope sender

Маршрутизация sender-dependent опирается на SMTP envelope sender, а не обязательно на заголовок From, который пользователь видит в почтовом клиенте. Это важно при алиасах, bounce-сообщениях и приложениях, которые формируют Return-Path отдельно.

TLS

Для submission на внешние SMTP-шлюзы используйте TLS согласно требованиям провайдера. Не отключайте проверку сертификата глобально ради одного проблемного relay. Ошибку сертификата лучше исправить адресно.

Диагностика

  • проверьте результат lookup для конкретного sender;
  • посмотрите mail log и очередь;
  • убедитесь, что выбран правильный relay и порт;
  • проверьте SASL username/password;
  • отдельно проверьте DNS, TLS и доступность relay;
  • не забывайте о null sender у служебных bounce-сообщений.

Итог: для нескольких SMTP-шлюзов не нужен отдельный Postfix на каждый домен. Sender-dependent relayhost и sender-dependent SASL позволяют держать маршрутизацию в одной понятной конфигурации и менять её без костылей.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *