Postfix 接收标头中缺少客户端 IP

Postfix 接收标头中缺少客户端 IP

我刚刚注意到我的 postfix 设置现在已经出现问题了。

当从德国免费邮件提供商 web.de 接收(一些)邮件时,在邮件后缀传递给 MDA 时会发现以下标头:

Received: from mout.web.de (unknown)
        by mail.<mydomain>.de(Postfix 2.9.6/8.13.0) with SMTP id unknown
        Wed, 29 Jan 2014 09:00:14 +0100
        (envelope-from <[email protected]>
Received: from 3capp-webde-bs39.server.lan ([172.19.170.39]) by
 mriweb.server.lan (mriweb002) with ESMTP (Nemesis) id
 ***** for <[email protected]>; Wed, 29 Jan 2014 09:01:01
 +0100
Received: from [##.###.##.###] by 3capp-webde-bs39.server.lan with HTTP; Wed
 Jan 29 09:01:01 CET 2014

日志中的内容如下:

postfix/smtpd[16230]: connect from mout.web.de[212.227.17.11]
postfix/smtpd[16230]: 5C17E14C10A6: client=mout.web.de[212.227.17.11]
postfix/cleanup[16238]: 5C17E14C10A6: message-id=<trinity-b7f12c80-a158-43f9-8266-583a7b0533bd-############@3capp-webde-bs39>
postfix/qmgr[4490]: 5C17E14C10A6: from=<[email protected]>, size=6402, nrcpt=1 (queue active)
postfix/smtpd[16230]: disconnect from mout.web.de[212.227.17.11]
postfix/lmtp[16242]: 5C17E14C10A6: to=<[email protected]>, relay=mail.<mydomain>.de[private/dovecot-lmtp], delay=1, delays=0.81/0/0/0.22, dsn=2.0.0, status=sent (250 2.0.0 <[email protected]> qO51H+K06FKAPwAAsCbVSQ Saved)
postfix/qmgr[4490]: 5C17E14C10A6: removed

问题是 spamassassin 现在尝试对第一跳 IP 进行 RBL 检查,因为最后一跳的 IP 地址不可用,而第二跳是私有网络。第一跳当然是动态的,因此所有邮件都会被标记为垃圾邮件。

当我尝试从我自己的 web.de 帐户重现此问题时,这些行如下所示:

Received: from mout.web.de (mout.web.de [212.227.17.12])
        by mail.<mydomain>.de (Postfix) with ESMTP id ***
        for <[email protected]>; Sat,  8 Feb 2014 17:26:11 +0100 (CET)

这正是我所期望的结果。

有什么线索可以解释为什么 Postfix 没有将客户端 IP 放入 Received 标头中?

谢谢你的帮助!

答案1

问题出在 spamass-milter 的某个地方(在spamass-milter.cpp)。这在某种程度上是因为 milter 在传入 SMTP 连接关闭之前运行,并且 postfix 尚未写入其 Received-Headers,而 spamass-milter 需要执行一些魔法,而这在某些情况下似乎会出现问题。

不幸的是,我没有足够的时间或知识来进一步调试 spamass-milter 中的这个问题,所以我完全放弃了 milter,继续以“老式”的方式使用 SpamAssassin:

# master.cf
dovecot-spamass   unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail:vmail argv=/usr/bin/spamc -u ${recipient} -e /usr/lib/dovecot/dovecot-lda -f ${sender} -a ${original_recipient} -d ${user}@${nexthop}

# main.cf
virtual_transport=dovecot-spamass

与 milter/lmtp 设置相比,据记录,这种方法速度稍慢,并且无法拒绝 SMTP 会话中超过特定​​ SpamAssassin 分数的退回邮件(这对我来说没问题)。

感谢 Julian帮助调试

答案2

“看,我修好了它……” –https://bz.apache.org/SpamAssassin/show_bug.cgi?id=7909

相关内容