Postfix发送邮件报错:搭建Postfix+Dovecot+Roundcube邮件服务器遇中继拒绝问题
解决Postfix发送邮件时454 Relay access denied错误
这个问题我之前帮不少人排查过,454 Relay access denied本质是Postfix在阻止你的邮件中继到外部域名——毕竟默认情况下Postfix为了防止被当成开放中继滥用,只会允许本地可信来源或者授权用户发送外部邮件。结合你用Postfix+Dovecot+Roundcube的架构,咱们一步步来解决:
关键配置修改(编辑/etc/postfix/main.cf)
1. 配置核心中继控制规则
找到smtpd_relay_restrictions参数(如果没有就新增),设置为:
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
permit_mynetworks:允许你定义的本地可信网络内的客户端中继邮件permit_sasl_authenticated:允许通过SASL认证的用户(也就是Roundcube里登录的合法邮箱用户)中继邮件defer_unauth_destination:拒绝所有未授权的中继请求,这是防止开放中继的关键
2. 确保mynetworks配置精准
这个参数定义本地可信网络,只添加你绝对信任的地址段,比如:
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
如果你的服务器在局域网内(比如192.168.1.0/24),可以把内网网段加上,但绝对不要设置成0.0.0.0/0,否则会变成开放中继被垃圾邮件发送者盯上。
3. 对接Dovecot SASL认证
因为你搭配了Dovecot,Postfix可以直接用Dovecot的认证服务验证用户身份,添加或修改以下参数:
smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous smtpd_sasl_local_domain = $myhostname
这些配置让Postfix和Dovecot的认证套接字对接,当用户在Roundcube输入账号密码登录后,Postfix会识别为授权用户,允许其发送外部邮件。
应用配置并验证
修改完配置后,重启Postfix服务生效:
sudo systemctl restart postfix
接下来可以用Roundcube登录你的邮箱,尝试发送一封邮件到外部地址(比如gmail、QQ邮箱)。如果还是有问题,可以用telnet手动测试认证流程:
telnet your-mail-server-domain 587 EHLO localhost AUTH PLAIN [这里输入base64编码的"用户名\0密码",可以用`echo -ne "user@domain.com\0yourpassword" | base64`生成] MAIL FROM:<your-email@domain.com> RCPT TO:<external-email@example.com>
如果RCPT TO命令没有返回错误,说明中继配置已经正常工作了。
内容的提问来源于stack exchange,提问作者Vince
相关产品推荐
相关产品推荐

