如何将 Postfix 配置为仅中继来自特定域的电子邮件?

How do I configure Postfix to only relay emails from a specific domain?

我已经回答了我自己的问题,稍后可能会更新这个问题以反映我为获得解决方案而采取的 point/the 开始步骤,但我想我会问一个我开始的问题并且我花费了不合理的许多小时的研究和反复试验才能得到这个结果。请进行任何编辑,或提出您自己的 postfix/main.cf 解决方案,因为我还有很多东西要学。

问题介绍

所以我 self-host 在我的 "example.com" 服务器上做了一些事情,并将 Postfix 设置为我的邮件传输代理 (MTA)。在我的邮件服务器上,我有一个 virtual_alias 设置来接收特定 "email_users@example.com" 的电子邮件到我在服务器上的用户名。我的母校启用了电子邮件转发功能,因此发送至 "student@college.edu" 或 "alum@alum.college.edu" 的电子邮件将转发至 "email_users@example.com" 并在我的用户收件箱中收到。基本上所有电子邮件(发送到我的 .edu 或我的 .com)都转到 /home/user/Maildir/new.

当使用 MUTT(我的首选 MUA)写电子邮件时,我偶尔会将我的电子邮件 "FROM" 字段更改为 "student@college.edu"、"alumnus@alum.college.edu",或者默认回复 reply-to 字段已启用。我的邮件服务器出站到其他服务器的期望行为如下:

  1. 对于 "FROM: *@example.com" 的电子邮件 - 通过 SMTP 通过本地 Postfix MTA 将电子邮件直接路由到互联网。 (* 代表通配符)
  2. 对于 "FROM: student@college.edu" 的电子邮件,通过本地 Postfix MTA 通过 SMTP 路由电子邮件,并将其转发到另一台经过身份验证的 SMTP 服务器,以便另一台服务器在没有任何 soft-fail 或退回的情况下传送(在此例如大学 SMTP 服务器)。

需要明确的是,当用户希望从以下位置发送邮件时,这是 Postfix 配置的问题:本地 Postfix MTA -> 外部 SMTP 服务器 -> 通过 Internet 收件人。

这些 questions/how-tos 通常省略了明确的答案,不是在问同样的事情,需要更好的标题,或者 how-tos 只开始回答这个设置的开头:

当然 full documentation is helpful, but quite verbose and hard to figure out in a timely manner if you are new to Postfix. For instance, you may expect to find this under SMTP Relay/Access Control, but the main aspect I was missing was under general configuration in SASL Auth.

为了将电子邮件中继到另一个 SMTP 服务器 而不是 默认情况下总是中继使用配置文件 (/etc/postfix/main.cf) 中的 sender_dependent_relayhost_maps .如果您使用的是中继主机,请不要使用。

注意:smtp 用于发送邮件,而 smtpd 是接收邮件的守护进程

/etc/postfix/main.cf

 smtp_use_tls = yes
 smtp_sender_dependent_authentication = yes
 sender_dependent_relayhost_maps = hash:/etc/postfix/sender_relay
 smtp_sasl_auth_enable = yes
 smtp_sasl_security_options = noanonymous
 smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
 smtp_always_send_ehlo = yes
 smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

现在在 /etc/postfix/sender_relay 中,您必须指定要发送到感兴趣的外部 SMTP 服务器的电子邮件地址:

注意:括号'[ ]'告诉Postfix不要使用MX记录。通常端口号是587

/etc/postfix/sender_relay

student@college.edu         [smtp.server.edu]:port
alumnus@alum.college.edu    [alum.smtpserver.edu]:port

现在,当使用这些地址中的任何一个发送电子邮件时,它会中继到这些 SMTP 服务器以代表您发送。最后要做的是使用 SASL 对其进行授权。

注意:sender_relay中指定的SMTP服务器必须与sasl_passwd中的匹配,sasl_passwd中的username:password对应与用户匹配您从 sender_relay 及其相应的密码对发送。如果不这样做,可能会导致 /var/log/mail.log

中的 pam_authenticate() 错误

/etc/postfix/sasl_passwd

[smtp.server.edu]:port      student:password
[alum.smtpserver.edu]:port  alumnus:password

由于您在此处输入明文敏感信息,如果您之前没有更新所有权权限,请确保更新:

sudo chmod 600 /etc/postfix/sasl_passwd

最后要做的是使用 postmap 更新这些文件并使用新配置重新加载 postfix:

sudo postmap sasl_passwd
sudo postmap sender_relay
sudo postfix reload