如何确定哪个用户使用 postfix 发送了特定电子邮件?

Nic*_*ick 10 security email postfix

我们有一个 postfix 服务器,需要通过它对 SMTP 中继进行身份验证。我们在 MySQL 数据库中使用虚拟邮箱。

一条消息通过我们的系统中继,我们需要确定使用哪个用户帐户发送它。

消息头包含:

Received: from User (c-76-109-241-139.hsd1.fl.comcast.net [xx.109.xxx.139]) 
    by ourserver.com (Postfix) with ESMTPA id 7BA184B4AD4; 
    Tue,  3 Jul 2012 05:42:59 -0400 (EDT)
Run Code Online (Sandbox Code Playgroud)

我们没有名为“User”的用户,而且 IP 地址不是我们发送邮件的地址。我想知道发件人在发送消息时对哪些用户帐户进行了身份验证。

有没有办法跟踪这个?

mgo*_*ven 17

如果您搜索消息 ID(在您的情况下为 7BA184B4AD4),/var/log/mail.log您应该找到一个日志行,指示sasl_username. 例如:

% zgrep 07A1753F /var/log/mail.log*
Jul  4 19:47:58 mammon postfix/smtpd[4936]: 07A1753F: client=c-69-181-123-456.hsd1.ca.comcast.net[69.181.123.456], sasl_method=PLAIN, sasl_username=mgorven
Run Code Online (Sandbox Code Playgroud)

编辑:如果您smtpd_sasl_authenticated_header/etc/postfix/main.cfPostfix 中设置该选项,则会将 SASL 用户名添加到Received邮件的标题中。请注意,此标头可以被篡改,因此以上是确定哪个用户提交了消息的唯一可靠方法。

smtpd_sasl_authenticated_header = yes
Run Code Online (Sandbox Code Playgroud)

  • 我在日志中没有看到这一点,所有这些条目都是 client=xxx 并且没有 sasl 信息,无论是否使用 sasl。我想这是因为我使用 Dovecot 进行 sasl 身份验证,而不是 Cyrus SASL。我可以让 Dovecot 记录它自己的身份验证记录,但这些记录很难与 postfix 的日志消息可靠地匹配。 (2认同)