SASL LOGIN 认证失败:UGFzc3dvcmQ6 - 查找用户名

Rya*_*ner 27 postfix dovecot sasl

首先让我声明邮件服务器工作正常,用户可以连接和发送电子邮件。

基本上有一个本地 web 脚本连接到邮件服务器,尝试每隔几分钟发送一次邮件。它有错误的密码。问题是我们不知道连接的是什么脚本,所以我们正在寻找一种方法来获取正在尝试的用户名。

UGFzc3dvcmQ6 - 解码为密码:所以没有太大帮助。下面是完整的日志行。

Dec 11 20:15:37 HOST postfix/smtpd[642]: warning: HOST[x.x.x.x]: SASL LOGIN authentication failed: UGFzc3dvcmQ6
Run Code Online (Sandbox Code Playgroud)

服务器正在运行 Debian/Postfix/Dovecot。

Rya*_*ner 19

我们能够通过使用 Dovecot 本身来追踪用户名。

/etc/dovecot/conf.d/10-logging.conf配置中,我们启用了详细身份验证日志记录

auth_verbose = yes
Run Code Online (Sandbox Code Playgroud)

这将信息放入

/etc/dovecot/info.log
Run Code Online (Sandbox Code Playgroud)

  • 我的在系统日志中 (2认同)

Chl*_*loe 10

我能够通过设置 SSL 并要求仅通过 SSL 进行身份验证尝试来防止这种情况发生

smtpd_tls_auth_only = yes
Run Code Online (Sandbox Code Playgroud)

这之后不会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]
Run Code Online (Sandbox Code Playgroud)


Jay*_*y M 8

如果您安装了fail2ban,您可以在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
Run Code Online (Sandbox Code Playgroud)


小智 6

至少有两种方法可以找到正在尝试的用户名。

使用 Postfix 记录 SMTP 事务

如果您知道奇怪的连接来自哪个主机,您可以通过在以下位置指定debug_peer_list来为它们启用详细调试/etc/postfix/main.cf

debug_peer_list = 192.0.2.1
Run Code Online (Sandbox Code Playgroud)

除其他外,这将在 syslog 中产生如下消息:

postfix/smtpd[123]: xsasl_dovecot_handle_reply: auth reply: FAIL?5?user=info
Run Code Online (Sandbox Code Playgroud)

您只希望将此设置用于非常具体的调试,因为记录完整的 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
Run Code Online (Sandbox Code Playgroud)

在此示例中,在提供密码“foobar”后,用户“info”的登录尝试失败。与挑战一样,您可以将回复解码为 base64:

$ echo aW5mbw== | echo $(base64 -d)
info
$ echo Zm9vYmFy | echo $(base64 -d)
foobar
Run Code Online (Sandbox Code Playgroud)

使用 Dovecot 进行日志验证

Postfix 本身不包含 SASL 实现。传统上,它连接到 Cyrus SASL,但如果您使用 Dovecot POP/IMAP 服务器,Postfix 可以重用其 SASL 模块。

正如您所发现的,Dovecot 有自己的调试工具,启用

auth_verbose = yes
Run Code Online (Sandbox Code Playgroud)

在其配置文件中,通常是/etc/dovecot/conf.d/10-logging.conf. 输出/var/log/dovecot-info.log将如下所示:

Jun 10 13:16:40 auth-worker(14936): Info: pam(info@example.com,192.0.2.1): pam_authenticate() failed: Authentication failure (password mismatch?)
Run Code Online (Sandbox Code Playgroud)

虽然这里没有基于主机的控制,但有许多相关选项可以控制记录的内容,特别是是否包含尝试的密码。从示例配置:

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

有关详细信息,另请参阅Dovecot 文档

关于 SMTP 认证

正如您所注意到的,UGFzc3dvcmQ6日志消息中的字符串是“密码:”的 base64 编码。Postfix 在这里记录的是它已经发送和收到错误回复的特定身份验证“挑战”。“用户名:”(VXNlcm5hbWU6)还有一个前面的挑战。但是,即使对于不存在的用户,也只有在输入密码后才会报告失败。

挑战字符串的值实际上并不重要,应该被忽略。第一个挑战总是针对用户名,第二个挑战针对密码。有关这方面的详细信息可以在 LOGIN 方法规范中找到。

注意:由于这对于传输和检查用户名密码对来说有点麻烦,因此 LOGIN 早已过时了。该平原方法的工作原理基本相同,但是这两种信息包到相同的base64字符串。

最后,这个对话的部分内容是 base64 编码的,这实际上是SMTP 身份验证的一个特性。这个想法是很容易允许任意(可能是二进制)数据在客户端和服务器的 SASL 模块之间交换,而这些 SASL 模块不需要知道或关心 SMTP 本身。您可以从Cyrus SASL 文档中了解 SASL 的运作方式。