使用 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 auth mech 發送,Postfix 使用 LOGIN mech。任何想法?

答案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 傳送郵件將要已獲得授權。電子郵件的標題將是X-MS-Exchange-Organization-AuthAs: Internal(在我的例子中)。並且電子郵件將發送至群組!

這是我發現的(透過將 postfix 對等日誌記錄等級設為 4): postfix 傳送 SMTP 命令Mail From: ...... AUTH=<>。離開AUTH=<>了,一切都很好。把它放進去,交易所就會說:.... Anonymous

我現在正在尋找 postfix 撒謊的原因。

啊。找到了。smtp_proto.cpostfix v2.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 之外還能做什麼。噁心。

相關內容