我刚刚注意到我的 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帮助调试。