【问题标题】:How do I configure Postfix to only relay emails from a specific domain?如何将 Postfix 配置为仅中继来自特定域的电子邮件?
【发布时间】:2019-03-14 10:14:12
【问题描述】:

我已经回答了我自己的问题,以后可能会更新这个问题以反映我的起点/我为解决问题所采取的步骤,但我想我会问一个我开始的问题和结果我进行了不合理的数小时研究,反复试验,才能完成。请进行任何编辑,或提出您自己的 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 服务器为例)。

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

这些问题/操作方法通常省略了明确的答案,不是在问同样的事情,需要更好的提问标题,或者只是开始回答此设置的开头的操作方法:

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

【问题讨论】:

    标签: postfix-mta self-hosting


    【解决方案1】:

    为了将电子邮件中继到另一个 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 中的用户名:密码对应与您在 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
    

    【讨论】:

      猜你喜欢
      • 2013-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-23
      • 2019-06-16
      • 2015-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多