为什么当向此用户的传送已被禁用时,postfix 会向本地假脱机文件传送退回通知?

为什么当向此用户的传送已被禁用时,postfix 会向本地假脱机文件传送退回通知?

我的 postfix 配置允许通过多个 local_recipient_maps 发送邮件。但是,向“proxy:unix:passwd.byname”发送邮件是已禁用. 这通常会阻止向本地 unix 用户传送:

$ getent passwd | grep www-data
www-data:x:33:33:www-data:/var/www:/bin/sh
$ nc localhost 25
220 my.mail.host ESMTP Postfix
helo localhost
250 my.mail.host
mail from:[email protected]
250 2.1.0 Ok
rcpt to:[email protected]
550 5.1.1 <[email protected]>: Recipient address rejected: User unknown in local recipient table
rcpt to:www-data
550 5.1.1 <www-data>: Recipient address rejected: User unknown in local recipient table

然而今天早上我注意到一封电子邮件被发送到本地 www-data 邮件假脱机文件。查看后,我发现:

  • 这是一条信息 [电子邮件保护],由我们网络内的其他主机发送,使用 my.mail.host 作为智能主机
  • 尝试重试时,该邮件在 my.mail.host 队列中停留了几天
  • 然后它反弹了
  • 退回的邮件被发送到 my.mail.host 上的“www-data”邮件假脱机文件

我的问题是:为什么会发生这种情况?我该如何防止它再次发生?

答案1

假设

你说

向“proxy:unix:passwd.byname”的传送被特别禁用。这通常会阻止向本地 unix 用户传送。

因此,我可能假设您从中删除了 proxy:unix:passwd.byname 部分local_recipient_maps。默认情况下,此参数的值为

# postconf -d local_recipient_maps
local_recipient_maps = proxy:unix:passwd.byname $alias_maps

然后你把它改成

# postconf local_recipient_maps
local_recipient_maps = $alias_maps

分析

那么为什么它会拒绝正常邮件但仍然退回邮件呢?

要回答这个问题,我们需要了解Postfix 架构概述,尤其是当 postfix 接收邮件时

                            trivial-
                           rewrite(8)
Network ->  smtpd(8)           |  ^    
                       \       v  |
Network ->  qmqpd(8)    ->  cleanup(8)  ->  incoming
                       /
            pickup(8)   <-  maildrop
                                ^
                                |
Local   ->  sendmail(1) ->  postdrop(1)

Postfix 仅local_recipient_maps在检查通过 收到的电子邮件时进行查询smtpd。为什么?因为检查是在参数smtpd_reject_unlisted_recipient值为“yes”或您reject_unlisted_recipient在 smtpd_*_restrictions 中设置时执行的(请注意两个参数名称中的 smtpd 一词)。请参阅人postconf有关参数的详细信息。此检查默认启用。这解释了为什么您的测试电子邮件被 postfix 拒绝。

弹跳是 Postfix 架构中的特殊电子邮件。它由 Postfix 内部生成,用于向发件人通知(未)送达状态报告。它流通过 postfix 直接进行清理,绕过smtpd。这就是为什么www-data仍然会收到退回的电子邮件。

解决方案

你可以将它发送到黑洞,而不是拒绝它邮箱传输图丢弃服务。

为此,请设置 mailbox_transport_maps

#main.cf
mailbox_transport_maps = hash:/etc/postfix/wwwdata-blackhole

#/etc/postfix/wwwdata-blackhole
www-data   discard:silently

现在,每当 www-data 收到一封电子邮件,它都会被悄悄丢弃。

相关内容