我最近注意到我的服务器在 mail.log 上报告了许多已知用户的错误身份验证,这不是暴力攻击。我真的不知道这种身份验证的原因。我有用户使用 Gmail 应用程序、IOS 上的邮件、MacOSX 上的邮件应用程序、ThunderBird 和 Outlooks,以及网络邮件服务来访问此服务器。在此服务器中,我有一个自签名证书,并且还用作邮件智能主机。此系统是 MacOSX 10.9.5。
在所有平台中,只有 Outlook 在连接到此服务器时会出现奇怪的行为。它不断弹出一个烦人的登录窗口,其中包含用户的凭据,而且这种情况发生在我所有的 Outlook 用户身上。用户可以使用 Outlook 发送和接收信息,除了登录窗口外,一切似乎都正常。
从我的 mail.log 中我发现 SAL DIGEST-MD5、SASL PLAIN 和 SASL CRAM-MD5 存在此问题,例如一些随机样本:
Jan 19 11:43:43 remote.x.pt postfix/smtpd[53889]: error: validate response: authentication failed for user=lcg (method=DIGEST-MD5)
Jan 19 11:43:43 remote.x.pt postfix/smtpd[53889]: warning: unknown[192.168.1.72]: SASL DIGEST-MD5 authentication failed
Jan 18 17:10:46 remote.x.pt postfix/smtpd[5838]: error: verify password: authentication failed: [email protected]
Jan 18 17:10:46 remote.x.pt postfix/smtpd[5838]: warning: hq2.pacsis.pt[x]: SASL PLAIN authentication failed
Jan 16 15:13:06 remote.x.pt postfix/smtpd[17510]: error: validate response: authentication failed for user=teste3 (method=CRAM-MD5)
Jan 16 15:13:06 remote.x.pt postfix/smtpd[17510]: warning: remote.x.pt[192.168.1.1]: SASL CRAM-MD5 authentication failed
第一次尝试来自 Outlook,第二次尝试我认为来自邮件网络服务,第三次尝试来自邮件应用程序。
我无法弄清楚是什么原因造成的,但由于我从几个不同的软件客户端获得了错误的身份验证,所以我假设我的 postfix 或 dovecot 配置中存在问题。
您可以在这里检查两个配置:
后缀:http://pastebin.com/EU1iLjAP
鸽舍:http://pastebin.com/N9MfuvkD
正在使用的端口:
587 SMTP 启动
993 IMAP SSL
更新 1:
这是正在发生的事情,在这里您可以看到,在最初的身份验证失败之后,接下来身份验证成功:
Jan 19 14:33:05 remote.x.pt postfix/smtpd[62409]: error: validate response: authentication failed for user=lcg (method=DIGEST-MD5)
Jan 19 14:33:05 remote.x.pt postfix/smtpd[62409]: warning: unknown[192.168.1.72]: SASL DIGEST-MD5 authentication failed
Jan 19 14:33:05 remote.x.pt postfix/smtpd[62409]: verify password: AUTH PLAIN: authentication succeeded for user=lcg
更新2:
似乎我的服务器不允许 DIGEST-MD5 和 CRAM-MD5,然后它为某些用户切换到 PLAIN。在本地主机上,我至少可以使用 CRAM-MD5 而不会出现问题。
答案1
您遇到的问题是 Dovecot 问题,而不是 postfix。
因此,您可以理解 Dovecote 身份验证是如何进行的,请阅读以下内容:
您必须了解,如果您的客户端密码以纯文本形式保存在数据库中,则可以使用 cram-md5 和 digest-md5(auth_mechanisms = plain login cram-md5 digest-md5)。但如果数据库中的密码已加密;假设使用 Dovecote 文档中提到的加密方案之一:
http://wiki2.dovecot.org/Authentication/PasswordSchemes,那么您就不能使用 cram-md5,除非密码已经使用 cram-md5 哈希保存在数据库中。这很令人困惑,所以您最好理解,假设我有一个您的电子邮件帐户,所以我登录:
电子邮件客户端 ----->密码--->电子邮件服务器将检查数据库,我可以看到 3 种情况:
第一种情况是,数据库中的密码以纯文本形式保存:
电子邮件服务器--(auth_mechanisms = plain login cram-md5 digest-md5)-->您的密码方案(无)---->数据库 cram-md5(密码)/或/digest-md5(密码)/或/纯文本密码:因此,登录密码将与数据库纯文本保存的密码相匹配。第二种情况,数据库中的密码使用 SHA512-CRYPT 保存:
电子邮件服务器-- auth_mechanisms(普通登录)--→电子邮件服务器—检查密码--->default_pass_scheme = SHA512-CRYPT ----SHA512-CRYPT(密码)---→数据库(已准备好 SHA512-CRYPT 密码)– 登录匹配第三种情况,数据库密码使用 carm-md5 加密:
电子邮件服务器---->auth_mechanisms(普通登录 cram-md5)--→电子邮件服务器---检查密码---default_pass_scheme =cram-md5--> cram-md5(密码)---->数据库(密码已保存在 cram-md5 密码中)– 登录匹配
因此,您可以加密或不加密数据库密码,并使用 SSL/TLS 并使 auth_mechanisms="plain login" 或者:
如果您不想使用 SSL,则使 auth_mechanisms=cram-md5 并将密码作为 cram-md5 存储在数据库中,如果您想使用 DIGEST-MD5 和 CRAM-MD5,则您的密码必须存储在 PLAIN_TEXT 中。
因此,仅使用 CRAM-MD5,数据库中的密码可以是 CRAM-MD5 或纯文本,或者使用 DIGEST-MD5 和 CRAM-MD5:数据库中的密码必须仅以纯文本形式存储。
在下一个链接中,您将找到一些可帮助您加密数据库中密码的脚本: http://wiki2.dovecot.org/HowTo/ConvertPasswordSchemes
如果您想将密码以 DIGEST-MD5 格式保存在数据库中,您必须阅读此页面:http://wiki2.dovecot.org/Authentication/Mechanisms/DigestMD5
另外,正如您在聊天中提到的,Dovecote 中使用的 auth_mechanisms 值可以在 postfix 中用作 main.cf 中的 smtpd_pw_server_security_options=plain