Я использую Postfix для ретрансляции почты на Exchange 2010. Вот моя конфигурация:
relayhost = [smtp.exchange.2010]
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/relay_passwd
smtp_sasl_security_options =
#smtp_sasl_mechanism_filter = ntlm
(/etc/postfix/relay_passwd содержит информацию для входа в некоторые учетные записи на Exchange) С этой конфигурацией я могу ретранслировать почту на Exchange. Проблема в следующем: сообщение, отправленное из Postfix, имеет заголовок:
X-MS-Exchange-Organization-AuthAs: Anonymous
и сообщение обрабатывается как неаутентифицированное сообщение в системе Exchange (т. е. при отправке в группу рассылки, требующей аутентификации отправителей, я получаю ошибку: #550 5.7.1 RESOLVER.RST.AuthRequired; требуется аутентификация ##rfc822;[email protected]). Я использую Outlook с той же учетной записью, что и в Postfix, и он может отправлять без проблем. Разница, которую я понял между двумя случаями, заключается в следующем: Outlook отправляет с помощью механизма аутентификации NTLM, Postfix использует механизм LOGIN. Есть идеи?
решение1
Согласно ответу AlexRobinson, проблема в Postfix. Это исправлено (по умолчанию) в Postfix 2.9 и более поздних версиях: http://www.postfix.org/postconf.5.html#smtp_send_dummy_mail_auth
[Incompat 20111106] To work around broken remote SMTP servers, the Postfix SMTP client by default no longer appends the "AUTH=<>" option to the MAIL FROM command. Specify "smtp_send_dummy_mail_auth = yes" to restore the old behavior.
решение2
У меня та же проблема. И это вызывает проблемы, если письмо отправляется группе, а не отдельному лицу. Сервер Exchange не отправляет сообщения группам, если сообщение не AUTH'ed. Но если postfix настроен на аутентификацию путем входа в систему, почему письмо не AUTH'ed? Подсказка: если вы используете telnet для отправки письма, письмоволябыть AUTH'd. заголовок, который будет иметь электронное письмо, будет X-MS-Exchange-Organization-AuthAs: Internal
(в моем случае). И электронное письмо будет отправлено группам!
Вот что я обнаружил (установив уровень ведения журнала одноранговых соединений postfix на 4): postfix отправляет команду SMTP Mail From: ...... AUTH=<>
. Оставьте AUTH=<>
out и все будет хорошо. Вставьте его и Exchange скажет, .... Anonymous
.
Теперь я пытаюсь выяснить, почему постфикс лжет.
Ага. Нашел. Строка 1358 в smtp_proto.c
postfix v2.8. Жестко закодирована. Ну, теперь. Это очень досадно. Код вполне корректен с точки зрения безопасности, но некорректен, если у вас есть контроль над тем, кто получает этот код отправки SMTP в вашем postfix SMTP-клиенте.
/* postfix: smtp_proto.c
#ifdef USE_SASL_AUTH
if (var_smtp_sasl_enable
&& (session->features & SMTP_FEATURE_AUTH))
vstring_strcat(next_command, " AUTH=<>");
#endif
На данный момент я не знаю, что делать, кроме как пропатчить smtp_proto.c
и собрать Postfix с нуля. Фу.