![SASL LOGIN 身份验证失败:UGFzc3dvcmQ6 - 查找用户名](https://linux22.com/image/532914/SASL%20LOGIN%20%E8%BA%AB%E4%BB%BD%E9%AA%8C%E8%AF%81%E5%A4%B1%E8%B4%A5%EF%BC%9AUGFzc3dvcmQ6%20-%20%E6%9F%A5%E6%89%BE%E7%94%A8%E6%88%B7%E5%90%8D.png)
首先我要声明的是,邮件服务器运行正常,用户可以连接并发送电子邮件。
基本上,每隔几分钟就会有一个本地 Web 脚本连接到邮件服务器,尝试发送邮件。它输入了错误的密码。问题是我们不知道连接的是什么脚本,所以我们正在寻找一种方法来获取正在尝试的用户名。
UGFzc3dvcmQ6 - 解码为密码:所以没什么帮助。完整的日志行如下。
Dec 11 20:15:37 HOST postfix/smtpd[642]: warning: HOST[x.x.x.x]: SASL LOGIN authentication failed: UGFzc3dvcmQ6
服务器正在运行 Debian/Postfix/Dovecot。
答案1
我们能够使用 Dovecot 本身来追踪用户名。
在/etc/dovecot/conf.d/10-logging.conf
配置中,我们使用以下方式启用详细的身份验证日志记录
auth_verbose = yes
这将信息放入
/etc/dovecot/info.log
答案2
我可以通过设置 SSL 并仅要求通过 SSL 进行身份验证尝试来防止这种情况
smtpd_tls_auth_only = yes
这不会AUTH
向远程客户端提供选项EHLO
,因此垃圾邮件发送者/黑客会放弃,因为建立 SSL 连接需要花费太多时间。他们玩的是数字游戏。现在,当他们尝试时,它会挂断,AUTH
我的日志中出现了以下内容:
Jan 7 22:14:27 ip-99-99-99-99 postfix/smtpd[22274]: warning: 91.200.12.140: hostname vps863.hidehost.net verification failed: No address associated with hostname
Jan 7 22:14:27 ip-99-99-99-99 postfix/smtpd[22274]: connect from unknown[91.200.12.140]
Jan 7 22:14:27 ip-99-99-99-99 postfix/smtpd[22274]: lost connection after AUTH from unknown[91.200.12.140]
Jan 7 22:14:27 ip-99-99-99-99 postfix/smtpd[22274]: disconnect from unknown[91.200.12.140]
答案3
如果你有失败2ban安装后,您可以在 jail.local (或 jail.d) 中启用 sasl (有时称为 postfix-sasl),这应该可以消除烦恼。
## for me this is in /etc/fail2ban/jail.d/defaults-debian.conf
[postfix]
enabled = true
[postfix-sasl]
enabled = true
答案4
至少有两种方法可以查找正在尝试的用户名。
使用 Postfix 记录 SMTP 事务
如果你知道你的奇怪连接来自哪个主机,你可以通过指定调试对等列表在/etc/postfix/main.cf
:
debug_peer_list = 192.0.2.1
除其他内容外,这将在系统日志中产生如下消息:
postfix/smtpd[123]: xsasl_dovecot_handle_reply: auth reply: FAIL?5?user=info
您将需要使用此设置仅限特定调试,因为完整的 SMTP 会话已记录,包括密码。
postfix/smtpd[123]: < unknown[192.0.2.1]: AUTH LOGIN
postfix/smtpd[123]: xsasl_dovecot_server_first: sasl_method LOGIN
postfix/smtpd[123]: xsasl_dovecot_handle_reply: auth reply: CONT?5?VXNlcm5hbWU6
postfix/smtpd[123]: > unknown[192.0.2.1]: 334 VXNlcm5hbWU6
postfix/smtpd[123]: < unknown[192.0.2.1]: aW5mbw==
postfix/smtpd[123]: xsasl_dovecot_handle_reply: auth reply: CONT?5?UGFzc3dvcmQ6
postfix/smtpd[123]: > unknown[192.0.2.1: 334 UGFzc3dvcmQ6
postfix/smtpd[123]: < unknown[192.0.2.1]: Zm9vYmFy
postfix/smtpd[123]: xsasl_dovecot_handle_reply: auth reply: FAIL?5?user=info
postfix/smtpd[123]: warning: unknown[192.0.2.1]: SASL LOGIN authentication failed: UGFzc3dvcmQ6
postfix/smtpd[123]: > unknown[192.0.2.1]: 535 5.7.8 Error: authentication failed: UGFzc3dvcmQ6
在此示例中,输入密码“foobar”后,用户“info”的登录尝试失败。与质询一样,您可以将回复解码为 base64:
$ echo aW5mbw== | echo $(base64 -d)
info
$ echo Zm9vYmFy | echo $(base64 -d)
foobar
使用 Dovecot 记录身份验证
Postfix 本身不包含 SASL 实现。传统上,它与 Cyrus SASL 挂钩,但如果您使用 Dovecot POP/IMAP 服务器,Postfix 可以重用其 SASL 模块。
正如您所发现的,Dovecot 有自己的调试工具,启用后
auth_verbose = yes
在其配置文件中,通常是/etc/dovecot/conf.d/10-logging.conf
。中的输出/var/log/dovecot-info.log
将如下所示:
Jun 10 13:16:40 auth-worker(14936): Info: pam([email protected],192.0.2.1): pam_authenticate() failed: Authentication failure (password mismatch?)
虽然这里没有基于主机的控制,但有许多相关选项可以控制记录的内容,特别是是否包含尝试的密码。从示例配置来看:
# Log unsuccessful authentication attempts and the reasons why they failed.
auth_verbose = no
# In case of password mismatches, log the attempted password. Valid values are
# no, plain and sha1. sha1 can be useful for detecting brute force password
# attempts vs. user simply trying the same password over and over again.
auth_verbose_passwords = no
# Even more verbose logging for debugging purposes. Shows for example SQL
# queries.
auth_debug = no
# In case of password mismatches, log the passwords and used scheme so the
# problem can be debugged. Enabling this also enables auth_debug.
auth_debug_passwords = no
另请参阅Dovecot 文档了解详情。
关于 SMTP 身份验证
正如您所注意到的,日志消息中的字符串UGFzc3dvcmQ6
是“密码:”的 base64 编码。Postfix 在此处记录的是它已发送并收到错误答复的特定身份验证“质询”。还有一个针对“用户名:”的前置质询 ( VXNlcm5hbWU6
)。但是,即使对于不存在的用户,也只会在输入密码后报告失败。
质询字符串的值实际上并不重要,应该忽略。第一个质询始终针对用户名,第二个质询针对密码。有关此内容的详细信息,请参阅LOGIN 方法的规范。
注意:由于传输和检查用户名密码对的过程有点繁琐,LOGIN 早已过时。PLAIN 方法工作原理基本相同,但将两条信息打包到同一个 base64 字符串中。
最后,这次对话的部分内容采用 base64 编码,这实际上是SMTP 身份验证一般来说。其理念是轻松允许客户端和服务器的 SASL 模块之间交换任意(可能是二进制)数据,而这些 SASL 模块无需知道或关心 SMTP 本身。您可以从以下网址了解 SASL 的运作方式Cyrus SASL 文档。