Указание экземпляра Postfix для отправки исходящей электронной почты

У меня есть сервер CentOS 6.5 с Postfix 2.6x (дистрибутив по умолчанию) с пятью публичными IPv4-IP-адресами, привязанными к нему. Каждый IP имеет DNS и rDNS, установленные отдельно. Каждый использует свое имя хоста в своем домене. У меня есть пять экземпляров Postfix, по одному на каждый IP, как в следующем примере:

  • 192.168.34.104 red.example.com /etc/postfix
  • 192.168.36.48 green.example.net /etc/postfix-green
  • 192.168.36.49 pink.example.org /etc/postfix-pink
  • 192.168.36.50 orange.example.info /etc/postfix-orange
  • 192.168.36.51 blue.example.us /etc/postfix-blue

Я проверил каждый IP-адрес, используя telneting к порту 25. Postfix отвечает и баннеры правильно с правильным именем хоста. Электронная почта получена во всех этих случаях без проблем и направлена ​​в правильное место. Эта установка, за исключением последнего экземпляра, существует уже пару лет и работает.

Тем не менее, я никогда не пытался настроить исходящую электронную почту для прохождения любого, кроме основного экземпляра; не было необходимости. Теперь мне нужно отправить электронное письмо с blue.example.us, которое фактически выходит из этого интерфейса и IP-адреса, чтобы заголовки Received отображали blue.example.us в качестве отправляющего почтового хоста, чтобы SPF и DKIM проверяли и т. Д. И т. Д.

Сообщение электронной почты, которое будет отправлено с сайта blue.example.com, представляет собой цикл обратной связи, отправляемый одной учетной записью оболочки на сервере (account5), учетной записью, предназначенной для отправки этого сообщения. Учетная запись получает электронные письма петли обратной связи от серверов в других сетях, сохраняет тела этих электронных писем, а затем создает новый заголовок исходящей электронной почты, добавляет сохраненное тело и отправляет электронную почту. Он отправляет по электронной почте каждое письмо sendmail -oi -t, Мы делаем это таким образом, чтобы замаскировать личности начальных серверов. Скрипт procmail, который обрабатывает эти электронные письма, работает правильно.

Однако я не могу настроить эту учетную запись для отправки электронной почты через соответствующий экземпляр Postfix /IP/ интерфейс. Точно такая же учетная запись и сценарий отправляет электронную почту через основной экземпляр Postfix /etc/postfix без каких-либо проблем. Когда я изменяю MAIL_CONFIG, чтобы указать на /etc/postfix-blue либо в.bash_profile, либо в скрипте Procmail, который обрабатывает это письмо, я получаю эту ошибку:

sendmail: fatal: User account5(###) is not allowed to submit mail

Я прочитал руководства на Postfix.org, искал в Google и попробовал предложения в трех предыдущих ответах здесь на ServerFault.com:

Postfix - указать интерфейс для доставки исходящей почты на

Пользователь Postfix не имеет права отправлять почту

Postfix отклоняет php письма

Я старался останавливать и перезапускать Postfix после каждого изменения конфигурации и проверял результаты. Ничего не сработало. Основной экземпляр postfix с радостью принимает исходящую электронную почту от account5. Экземпляр postfix-blue продолжает отклонять электронную почту от account5 с ошибкой sendmail выше.

Как бы ни было соблазнительно обвинять враждебность машины, я знаю, что я что-то упускаю или делаю что-то не так. У кого-нибудь есть предложения относительно того, что это может быть? Пожалуйста, не стесняйтесь спрашивать дополнительную информацию о моей настройке, если вам это нужно.

= - = - = - = - = - = - = - = - = - =

По запросу респондента, здесь находятся main.cf и master.cf для а) основного экземпляра postfix ("red.example.com") и б) экземпляра FBL ("blue.example.us")

[ПРИМЕЧАНИЕ: все параметры, не указанные ниже, остались с настройками Postfix 2.6 по умолчанию]

ГЛАВНЫЙ:

master.cf

smtp      inet  n       -       n       -       -       smtpd

main.cf

myhostname = red.example.com
mydomain = example.com
inet_interfaces = $myhostname, localhost
inet_protocols = all
lmtp_host_lookup = native
smtp_host_lookup = native
ignore_mx_lookup_error = yes
mydestination = $myhostname, localhost.$mydomain, localhost
local_recipient_maps =
mynetworks = 192.168.34.104/32
relay_domains = example.com,
            example.info,
            example.net,
            example.org,
            example.us
relayhost = [192.168.34.102] # Separate physical server, main mailserver.
relay_recipient_maps = hash:/etc/postfix/relay_recipients
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
smtpd_banner = $myhostname ESMTP $mail_name
multi_instance_wrapper = ${command_directory}/postmulti -p --
multi_instance_enable = yes
multi_instance_directories = /etc/postfix-green /etc/postfix-pink /etc/postfix-orange /etc/postfix-blue

FBL:

master.cf

184.173.119.103:25      inet  n       -       n       -       -       smtpd

main.cf

myhostname = blue.example.us
mydomain = blue.example.us <= Deliberately set to subdomain only.
myorigin = $mydomain
inet_interfaces = $myhostname
lmtp_host_lookup = native
smtp_host_lookup = native
ignore_mx_lookup_error = yes
mydestination = $myhostname
local_recipient_maps  = unix:passwd.byname $alias_maps $virtual_alias_maps
mynetworks = 192.168.36.51/32, 192.168.35.20/31 <= Second IP is backup MX servers
relay_domains = $mydestination
recipient_canonical_maps = hash:/etc/postfix-blue/canonical
virtual_alias_maps = hash:/etc/postfix-fbl/virtual
alias_maps = hash:/etc/aliases, hash:/etc/postfix-blue/canonical
alias_maps = hash:/etc/aliases, hash:/etc/postfix-blue/canonical
mailbox_command = /usr/bin/procmail -a "$EXTENSION" DEFAULT=$HOME/Mail/ MAILDIR=$HOME/Mail
smtpd_banner = $myhostname ESMTP $mail_name
authorized_submit_users = 
multi_instance_name = postfix-blue
multi_instance_enable = yes

** Дополнительная информация после тестирования последнего предложения Масегалоэ **

Я только что попытался добавить "account5" к авторизованному_submit_users и установить MAIL_CONFIG в.bash_profile для учетной записи оболочки "account5", с также установленным параметром "export MAIL_CONFIG". Procmail больше не жалуется; он думает, что он правильно генерирует и отправляет FBL. Тем не менее, maillog сообщает следующее:

May 29 14:47:42 newton postfix-blue/qmgr[3522]: 5BC773E612F: from=<fbl@blue.example.us>, size=1106, nrcpt=1 (queue active)
May 29 14:47:42 newton postfix-blue/qmgr[3522]: warning: connect to transport private/smtp: Connection refused
May 29 14:47:42 newton postfix-blue/error[3766]: 5BC773E612F: to=<fbl-test@example.com>, relay=none, delay=0.01, delays=0/0/0/0, dsn=4.3.0, status=deferred (mail transport unavailable)

Возможно, мне нужно что-то добавить в файл конфигурации транспорта?

1 ответ

Решение

Когда вы отправляете электронную почту через локальное представление ака sendmail он будет использовать экземпляр по умолчанию, например, red.example.com. Такое поведение было объяснено в официальной документации postfix.

Один экземпляр Postfix является особенным: это экземпляр, каталог конфигурации которого является каталогом по умолчанию, скомпилированным в утилиты Postfix. Расположение каталога конфигурации по умолчанию обычно находится в /etc/postfix, и его можно запросить с помощью команды "postconf -d config_directory". Мы называем экземпляр с этим каталогом конфигурации "экземпляром по умолчанию".

Экземпляр по умолчанию отвечает за отправку локальной почты. Утилита setgid postdrop(1) используется программой локальной отправки sendmail(1) для спулинга сообщений в подкаталог maildrop каталога очереди экземпляра по умолчанию.

Даже в редком случае, когда "sendmail -C" используется для отправки локальной почты в экземпляр Postfix, отличный от используемого по умолчанию, по соображениям безопасности postdrop (1) сверится с файлом main.cf по умолчанию, чтобы проверить правильность запрошенного не- каталог конфигурации по умолчанию.

Таким образом, хотя в большинстве других случаев все экземпляры равны, экземпляр по умолчанию "более равен, чем другие". Вы можете создать дополнительные экземпляры, но у вас должен быть хотя бы экземпляр по умолчанию с его каталогом конфигурации в скомпилированном местоположении по умолчанию.

Некоторые предложения:

  1. Основываясь на приведенном выше фрагменте, вы можете попробовать использовать sendmail -C указать экземпляр для отправки электронной почты. Или же
  2. Другим обходным решением является замена экземпляра, например, red.example.com становится blue.example.us и наоборот.

Редактировать на основе комментариев ниже

sendmail: fatal: User account5(###) is not allowed to submit mail

Вышеуказанная ошибка вызвана authorized_submit_users Параметр пуст (постфиксно-синий экземпляр). Эффект никто не мог выполнить sendmail через postfix-синий экземпляр. Добавление account5 этот параметр должен решить проблему.

Еще одна ошибка

warning: connect to transport private/smtp: Connection refused

был вызван отсутствием транспорта smtp в master.cf. Убедитесь, что эта строка присутствует в master.cf

smtp      unix  -       -       n       -       -       smtp

и добавьте -o smtp_bind_address=192.168.36.51 в конце строки, чтобы электронное письмо отправлялось по адресу 192.168.36.51.

Другие вопросы по тегам