Smtp

exim 配置:未公佈時使用的 503 AUTH 命令

  • November 19, 2019

我正在通過遠端 SMTP 伺服器發送電子郵件通知的 Windows 伺服器上執行一個軟體。它的配置選項很少,只支持沒有 SSL/TLS 的基本 SMTP 身份驗證。我在 Debian 伺服器上執行 exim4,它將成為這個 Windows 程序的 SMTP 伺服器。它設置為預設配置,並允許 AUTH PLAIN 和 AUTH LOGIN 未加密連接。我已通過 telnet 成功發送了一封電子郵件:

telnet servername 25
ehlo test
250-AUTH PLAIN LOGIN
...
auth plain XXX
235 Authentication succeeded
mail from: ...
...

但是,我要連接到此伺服器的程序無法連接。為了了解原因,我在連接期間執行了一個數據包嗅探器,並查看了以下會話:

C: HELO hostname
S: 250 Hello hostname
C: AUTH LOGIN XXX | XXX
S: 503 AUTH command used when not advertised | 500 unrecognized command
C: QUIT
S: 221 closing connection

我對 SMTP 協議不夠熟悉,無法理解這裡發生了什麼。我需要在我的 exim4 SMTP 伺服器上進行哪些更改以允許建立此連接?

本質上503 AUTH command used when not advertised解釋了自己,它沒有為客戶提供使用該AUTH命令的選項。這很可能是因為客戶端使用了HELO而不是EHLO(我會注意到您在進行 telnet 測試時使用過)。

SMTP Authentication 是 Extended SMTP 的一部分,由EHLO命令發起;“plain old” SMTP 不支持身份驗證,因此從技術上講,它是一個非法命令,儘管某些 SMTP 伺服器可能仍然允許它。

最好的解決方案是告訴您的程序盡可能使用擴展 SMTP ( EHLO),否則可能會有一個 exim 命令強制它在HELO類型連接上允許 AUTH。

** 更新 **

根據這裡的這篇文章:http ://www.exim.org/lurker/message/20040901.063858.126f66ac.en.html

EHLO(不是 HELO)必須由客戶在 AUTH 之前給出。

也就是說,除非廣告(通過 EHLO,根據 auth_advertise 等),否則無法使用 AUTH 命令。這種行為在 Exim 4.20 中得到了強化,不是一種選擇。

如果你不能讓你的應用程序去做,看起來你需要一個不同的 MTA EHLO。或者,您是否需要身份驗證,您可以使用基於 IP 的 ACL 完成同樣的事情嗎?

最終解決方案

Exim 確實有一個解決方法,使用這裡allow_auth_unadvertised描述的,你可以做這樣的事情:

hosts   = *
control = allow_auth_unadvertised

引用自:https://serverfault.com/questions/313562