我的postfixconfiguration允许邮件通过几个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-数据邮件假脱机文件。 看在内,我看到:
所以我的问题是: 为什么会发生这种情况,以后如何防止这种情况发生呢?
你说
传送到“proxy:unix:passwd.byname”被禁止。 这通常阻止交付给本地Unix用户。
所以,我可能会认为你从local_recipient_maps删除了proxy:unix:passwd.byname部分。 默认情况下,这个参数的值是
# 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检查通过smtpd收到的电子邮件时,它只会查询local_recipient_maps 。 为什么? 由于检查是在参数smtpd_reject_unlisted_recipient值为“yes”时执行的,或者您在smtpd _ * _ restrictions中设置了reject_unlisted_recipient (请注意两个参数名称中的单词smtpd)。 有关参数的详细信息,请参阅man postconf 。 此检查默认启用。 这就解释了为什么你的testing邮件被postfix拒绝了。
反弹是后缀架构中的特殊电子邮件。 它由postfix内部生成,通知发送者(非)传送状态报告。 它直接通过postfix进行清理 ,绕过smtpd 。 所以这就是为什么www-data仍然反弹的电子邮件。
您可以使用mailbox_transport_maps将其发送到黑洞并放弃服务,而不是拒绝它。
要做到这一点设置mailbox_transport_maps
#main.cf mailbox_transport_maps = hash:/etc/postfix/wwwdata-blackhole #/etc/postfix/wwwdata-blackhole www-data discard:silently
现在,每当www数据收到一封电子邮件时,它都会默默丢弃。