У меня есть сервер CentOS 6.5 с Postfix 2.6x (дистрибутив по умолчанию) с пятью общедоступными IPv4 IP-адресами, привязанными к нему. Для каждого IP-адреса отдельно задаются DNS и rDNS. Каждый из них использует разные имена хостов в разных доменах. У меня есть пять экземпляров Postfix, по одному на каждый IP-адрес, как в этом примере:
Я проверил каждый IP-адрес, подключившись к порту 25. Postfix правильно отвечает и показывает правильное имя хоста. Электронная почта во всех этих случаях поступает без проблем и направляется в нужное место. Эта установка, за исключением последнего экземпляра, существует уже пару лет и работает.
Однако я никогда не утруждал себя настройкой исходящей электронной почты для прохождения каких-либо инстанций, кроме основного; не было необходимости. Теперь мне нужно отправить электронное письмо с blue.example.us, которое фактически отправляется с этого интерфейса и IP, так что в заголовках Received отображается blue.example.us как отправляющий почтовый хост, чтобы SPF и DKIM проверяли и т. Д.
Электронное письмо, которое будет отправлено с blue.example.com, представляет собой цикл обратной связи, отправляемый одной учетной записью оболочки на сервере (account5), учетной записью, предназначенной для отправки этого электронного письма. Учетная запись получает электронные письма с обратной связью с серверов в других сетях, сохраняет тела этих писем, а затем генерирует новый заголовок исходящей электронной почты, добавляет сохраненное тело и отправляет электронное письмо. Он отправляет каждое электронное письмо по конвейеру sendmail -oi -t
. Мы делаем это таким образом, чтобы замаскировать идентификаторы начальных серверов. Скрипт procmail, обрабатывающий эти электронные письма, работает правильно.
Тем не менее, я не может настройте эту учетную запись для отправки электронной почты через соответствующий экземпляр / IP / интерфейс Postfix. Точно такая же учетная запись и сценарий отправляет электронную почту через основной экземпляр 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 после каждого изменения конфигурации и тестировал результаты. Ничего не получилось. Основной экземпляр постфикса с радостью принимает исходящую почту от account5. Экземпляр postfix-blue продолжает отклонять электронную почту от account5 с ошибкой sendmail выше.
Как бы ни было заманчиво обвинять враждебность к машинам, я знаю, что я, должно быть, что-то упускаю или делаю что-то не так. Есть ли у кого-нибудь предложения относительно того, что это может быть? Пожалуйста, не стесняйтесь спрашивать дополнительную информацию о моей настройке, если она вам нужна.
= - = - = - = - = - = - = - = - = - =
По запросу респондента здесь находятся main.cf и master.cf для а) основного экземпляра постфикса ("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
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» в authorized_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)
Возможно, мне нужно что-то добавить в файл конфигурации транспорта?
Когда вы отправляете электронное письмо через местную отправку a.k.a 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 по умолчанию, чтобы проверить правильность запрошенного не- каталог конфигурации по умолчанию.
Таким образом, в то время как в остальном все экземпляры равны, экземпляр по умолчанию «более равный, чем другие». Вы можете создать дополнительные экземпляры, но у вас должен быть хотя бы экземпляр по умолчанию с его каталогом конфигурации в месте для компиляции по умолчанию.
Некоторые предложения:
sendmail -C
чтобы указать экземпляр для отправки электронной почты. Илиsendmail: fatal: User account5(###) is not allowed to submit mail
Вышеупомянутая ошибка вызвана authorized_submit_users
параметр не заполнен (экземпляр синего постфикса). Эффект - никто не мог выполнить sendmail
через экземпляр postfix-blue. Добавление 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.