跳转到主要内容

于 2025年04月22日 摘录自  Rejecting Unknown Local Recipients with Postfix

简介

从 Postfix 2.0 版本开始,Postfix SMTP 服务器会拒绝发送到未知收件人的邮件。这些未知收件人属于 本地域(与 $mydestination 匹配或 $inet_interfaces 或 $proxy_interfaces)的本地域,并显示"本地收件人表中不存在用户"错误。此功能在较早版本的 Postfix 中是可选的。

好消息是,这会将无法投递的邮件从队列中移除,从而避免邮件队列被无法投递的 MAILER-DAEMON 消息堵塞。

坏消息是,当您从未配置为拒绝未知本地收件人邮件的 Postfix 系统升级时,可能会导致邮件被拒绝。

本文档描述了正确拒绝未知本地收件人所需的步骤。

在 main.cf 中配置 local_recipient_maps

local_recipient_maps 参数指定包含所有本地收件人名称或地址的查找表。当收件人的域名与 $mydestination、$inet_interfaces 或 $proxy_interfaces 中。如果本地用户名或地址未在 $local_recipient_maps 中列出,则 Postfix SMTP 服务器将拒绝该地址并返回错误信息 "用户在本地收件人表中不存在"。其他接口(如 Postfix 的 sendmail(1) 命令)仍可能接受"未知"收件人。

默认设置如下,假设您使用 Postfix 的默认本地交付代理 local(8) 进行本地交付,其中收件人要么是 UNIX 账户(通常位于 /etc/passwd),要么是本地别名(通常位于 /etc/aliases):

/etc/postfix/main.cf:
local_recipient_maps = proxy:unix:passwd.byname $alias_maps

要禁用 SMTP 服务器对未知本地收件人的拒绝,请指定:

/etc/postfix/main.cf:
local_recipient_maps =

即为空值。此设置后,Postfix SMTP 服务器将不会因"本地收件人表中不存在用户"而拒绝邮件。请勿在直接接收互联网邮件的系统上进行此操作。由于当前的蠕虫和病毒,Postfix 将成为反向散射源:它会接受发给不存在收件人的邮件,并尝试将这些邮件以"无法投递"的状态退回给通常被伪造的发件人地址

当需要修改 main.cf 文件中的 local_recipient_maps 设置时

本地收件人表查询格式

如果 local_recipient_maps 指定了本地文件,例如 postmap(1)postalias(1) 格式,则 Postfix SMTP 服务器将生成以下查询:

注意事项:

  • 查找表应在地址存在时返回非空结果,并在地址不存在时返回"未找到"。特别地,零长度(空)结果不计为"未找到"结果。
  • local_recipient_maps 指定基于 ldap:、memcache:、mongodb:, mysql:, pgsql:, sqlite:, 或其他外部数据库,则 Postfix SMTP 服务器将使用与本节开头描述相同的查询查询该查找表,并期望获得相同的结果。
  • 要抑制对 local-part@domain 通配符的查找,请在 Postfix 的 ldap: 中指定 domain 设置,或在 Postfix 的 memcache:、mongodb:、mysql:, pgsql:, sqlite:, 等, 数据库客户端配置文件。
  • local_recipient_maps 指定基于 pcre:、regexp: 或 socketmap: 或 tcp:,Postfix 仅使用完整的收件人地址查询该表,而不使用 local-part@domain 通配符。