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

时间:2019-03-14 10:14:13

标签: postfix-mta self-hosting

我已经回答了自己的问题,以后可能会更新此问题,以反映我的起点/为解决问题而采取的步骤,但是我想问一问我开始的问题以及得出的结果我花了很多时间去研究和尝试错误。请进行任何修改,或提出您自己的postfix / main.cf解决方案,因为我还有很多东西要学习。

问题简介

因此,我在“ 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”,或者默认情况下回复任何内容回复字段已启用。我的邮件服务器出站到其他服务器的期望的行为如下:

  1. 在带有“ FROM:* @ example.com”的电子邮件中-通过SMTP将电子邮件通过本地Postfix MTA直接路由到Internet。 (*表示通配符)
  2. 在带有“ FROM:student@college.edu”的电子邮件中,通过本地Postfix MTA通过SMTP路由电子邮件,并将其中继到具有身份验证的另一台SMTP服务器,以便另一台服务器进行传递而不会出现任何软失败或退回(在此情况下)案例学院的SMTP服务器)。

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

这些问题/操作方法通常省略了明确的答案,不是在问相同的问题,而是要求更好地询问标题,或者操作方法只是开始回答此设置的开始:

当然,full documentation是有帮助的,但是如果您不熟悉Postfix,则非常冗长且难以及时找出。例如,您可能希望在SMTP中继/访问控制下找到它,但是我缺少的主要方面是在SASL Auth中的常规配置下。

1 个答案:

答案 0 :(得分:0)

为了将电子邮件中继到另一个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中的SMTP服务器匹配,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