Postfix 报 Relay Access Denied(中继访问被拒)怎么解决?

Relay Access Denied 是 Postfix 的反开放中继保护:外来邮件要转发到非本地域被拒。解法:把合法网段加进 mynetworks、配置 SMTP 认证(SASL)、或把目标域加入 relay_domains。本文给出配置与安全提醒。

最佳实践
Postfix 报 Relay Access Denied(中继访问被拒)怎么解决?封面

错误含义:你的 Postfix 收到一封"从外部来、到外部去"的邮件,按反垃圾原则拒绝中转——这是安全特性不是故障**。处理方向:让合法的发信方被识别为"自己人"——内网网段加进 mynetworks、外部用户配 SMTP 认证(SASL)、或为特定域配 relay_domains。切忌图省事把服务器变成开放中继。**

三种正当解法

1. 内网网段放行(最常见)

sudo postconf -e "mynetworks = 127.0.0.0/8, 192.168.1.0/24"
sudo systemctl reload postfix

mynetworks 里的网段被默认可信中继,适合内网应用服务器经它发信。

2. SMTP 认证(外部用户)

sudo postconf -e "smtpd_sasl_auth_enable = yes"
sudo postconf -e "smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination"

permit_sasl_authenticated 让登录成功的用户可中继—— Outlook/手机端在外网发信就是这个机制。SASL 后端常用 Dovecot 或 saslauthd。

3. 指定可中继的域

sudo postconf -e "relay_domains = partner.example.com"

仅当你确实要为某些域做中转(如备用 MX)时用。

排查当前限制配置

postconf -n | grep -E "smtpd_relay_restrictions|smtpd_recipient_restrictions|mynetworks|relay_domains"

默认值 smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, defer_unauth_destination——最后一项就是拒绝的出处。

千万别做:开放中继

# ❌ 这样你的服务器几小时内就会被 spammer 收录利用
smtpd_relay_restrictions = permit
mynetworks = 0.0.0.0/0

开放中继会导致 IP 进黑名单(整域发信被拒),事后洗名单非常痛苦。

观测云对照

被拒的中继尝试值得盯。 mail.log 里的 Relay access denied 记录经采集后统计来源 IP——持续出现的陌生 IP 是有人在探测你的服务器,配合 fail2ban 类工具封禁。

常见问题(FAQ)

Q:本地应用(127.0.0.1)发信也被拒?
A:确认 mynetworks 含 127.0.0.0/8;或检查应用是否连到了 25 以外的端口(submission 587 有独立规则)。

Q:配了 SASL 认证还是 454 认证失败?
A:SASL 后端没配好(Dovecot 的 auth 服务、或 saslauthd 未运行);testsaslauthd 单独验证。

Q:收件域明明是我的域为什么还报这个错?
A:该域没列进 mydestination/virtual_alias_domains——Postfix 不知道"这是本地邮件",当成中继处理被拒。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台