我已经设置了 Postfix 邮件服务器,外发邮件通过需要身份验证的智能主机/中继主机发送。效果很好,内部客户端可以通过此中继主机向外部收件人发送邮件。
但是,当发往本地不存在用户的外部邮件到达服务器时,postfix 会尝试向发件人发送未送达通知。这封邮件显然也是通过中继主机发送的,但它会失败并出现错误554 5.7.1:中继访问被拒绝
这将记录到 mail.log 中:
Nov 9 10:26:42 mail postfix/local[5051]: 6568CC1383: to=<[email protected]>, relay=local, delay=0.13, delays=0.02/0.02/0/0.09, dsn=5.1.1, status=bounced (unknown user: "test")
Nov 9 10:26:42 mail postfix/cleanup[5045]: 85DF9BFECD: message-id=<[email protected]>
Nov 9 10:26:42 mail postfix/qmgr[4912]: 85DF9BFECD: from=<>, size=3066, nrcpt=1 (queue active)
Nov 9 10:26:42 mail postfix/bounce[5052]: 6568CC1383: sender non-delivery notification: 85DF9BFECD
Nov 9 10:26:42 mail postfix/qmgr[4912]: 6568CC1383: removed
Nov 9 10:26:43 mail postfix/smtp[5053]: 85DF9BFECD: to=<[email protected]>, relay=mail.provider.com[168.84.25.111]:587, delay=0.48, delays=0.02/0.01/0.26/0.18, dsn=5.7.1, status=bounced (host mail.provider.com[168.84.25.111] said: 554 5.7.1 <[email protected]>: Relay access denied (in reply to RCPT TO command))
Nov 9 10:26:43 mail postfix/qmgr[4912]: 85DF9BFECD: removed
根据这个错误,我猜想 postfix 在发送这些退回邮件时没有登录中继主机。为什么?正常的外发邮件工作正常。
我的 main.cf 如下所示:http://pastebin.com/Uu1Dryxy 当然,/etc/postfix/sasl_password 包含中继主机的正确凭据。
提前致谢!
答案1
退回邮件故意不包含发件人地址。这是为了防止电子邮件循环。发送没有地址的电子邮件已被用于发送垃圾邮件,无论是有意还是无意。如果您的中继要求您在发送之前提供凭据以验证发件人,它将无法验证退回邮件的发件人。
您可以通过在接受邮件之前将其退回来避免在接受邮件后无法发送退回邮件的问题。在收到邮件后将其退回是反向散射垃圾邮件的来源。垃圾邮件通常具有伪造的源地址。通过接受邮件之前将其退回,您将向伪造的地址发送垃圾邮件,而不是拒绝传入的邮件。
避免反向散射垃圾邮件的一种方法是使用 BATV(退回地址标签验证)。这会向返回路径添加一个有符号的值。只有合法的退回邮件才应具有此签名,因此可以忽略来自互联网的其他退回邮件。
编辑:悄悄地将电子邮件发送到无效地址已不再罕见。这可以防止接收系统在发送反向散射垃圾邮件时被归类为垃圾邮件来源。Postfix 默认接受所有收件人,因此容易产生反向散射垃圾邮件。如果可能,我建议启用收件人验证。我更喜欢 Exim,它默认拒绝未知收件人的邮件。