使用 Postfix 作为身份验证 SMTP 客户端中继到 Exchange 2010 时出现问题

使用 Postfix 作为身份验证 SMTP 客户端中继到 Exchange 2010 时出现问题

我正在使用 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;[电子邮件保护])。我使用 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 服务器将不会发送给组。但是,如果已将 postfix 设置为通过登录进行身份验证,那么为什么电子邮件未经身份验证?提示:如果您使用 telnet 发送邮件,则电子邮件将要获得 AUTH。电子邮件的标题将是X-MS-Exchange-Organization-AuthAs: Internal(就我而言)。电子邮件将发送到群组!

我发现以下情况(通过将 postfix 对等日志记录级别设置为 4):postfix 发送 SMTP 命令Mail From: ...... AUTH=<>。将 去掉AUTH=<>,一切正常。将其放入,Exchange 会说,.... Anonymous

我现在正在查找为什么 Postfix 会说谎。

啊,找到了。postfix smtp_proto.cv2.8 中的第 1358 行。硬编码。好吧,现在。这太不幸了。从安全角度来看,该代码非常正确,但如果您可以控制谁在 postfix SMTP 客户端中获取此 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,我不知道还能做什么。真恶心。

相关内容