exim 配置:503 AUTH 命令在未通告时使用

jrd*_*oko 2 smtp configuration authentication exim

我在 Windows 服务器上运行一个软件,通过远程 SMTP 服务器发送电子邮件通知。它有很少的配置选项,并且只支持没有 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: ...
...
Run Code Online (Sandbox Code Playgroud)

但是,我要连接到此服务器的程序无法连接。为了了解原因,我在连接期间运行了数据包嗅探器,并查看以下会话:

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
Run Code Online (Sandbox Code Playgroud)

我对 SMTP 协议不够熟悉,无法理解这里发生了什么。我需要在我的 exim4 SMTP 服务器上更改什么才能建立此连接?

Cod*_*lla 11

503 AUTH command used when not advertised本质上解释本身而言,它并没有提供给客户使用的选项AUTH命令。这很可能是因为客户端使用了HELO而不是EHLO(我会注意到您在进行 telnet 测试时使用了它)。

SMTP Authentication 是 Extended SMTP 的一部分,由EHLO命令启动;“普通” 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
Run Code Online (Sandbox Code Playgroud)

  • 好的,很高兴知道!我喜欢该链接中的这条评论,它似乎总结了您的情况:“此外,因为显然有一些真正损坏的客户端会这样做,当设置此控件时,Exim 将在 HELO(而不是 EHLO)之后接受 AUTH。” =) (2认同)