如何在 Ubuntu 16.04 上使用 Postfix 和 Mailgun 设置邮件中继站

介绍

设置SMTP服务器不是一个弱心的人的任务,不仅是安全问题,但邮件交付能力是一个更大的问题,确保从家庭发送的SMTP服务器的电子邮件的高交付性而不被标记为垃圾邮件是不可能的,因为今天大多数电子邮件提供商提供的高度垃圾邮件保护。

邮件转发解决了这两个问题,它比完整的SMTP服务器更容易配置,因为您只会将服务器生成的任何电子邮件路由到专业管理的SMTP服务器。

有两种类型的邮件传递: openclosed. 一个开放的邮件传递路由来自外部来源的邮件以及内部服务器邮件. 这种类型的传递是成熟的滥用从垃圾邮件发送者。

虽然您可以使用任何外部 SMTP 服务器来路由电子邮件,但 Mailgun 比其他 SMTP 服务器提供了许多优点. 它每月可以免费发送多达 10,000 封电子邮件,它是非常可靠的,它允许您从单独的域发送邮件。

本教程将指导您创建和设置免费的 Mailgun 帐户和子域,设置所需的 DigitalOcean DNS 记录,并使用 Postfix 设置封闭的邮件转发器的过程。

前提条件

在您开始本指南之前,您将需要以下内容:

  • 一个 Ubuntu 16.04 服务器设置为遵循 Ubuntu 16.04 初始服务器安装指南,包括一个 sudo 非根用户和防火墙。
  • 一个注册的域名,如 example.com,指向 DigitalOcean 的名称服务器。

步骤 1 – 创建 Mailgun 帐户

请在 https://mailgun.com/signup创建新帐户。注册完成后,请登录并前往您的 Dashboard并点击页面顶部菜单中的 Domains链接。

您将看到一个沙盒域,Mailgun为您创建。

Initial Sandbox Domain

不要使用沙盒,请通过点击添加新域按钮创建 Mailgun 子域,您可以将此子域命名为任何您喜欢的域名,如mailgun.example.combulkemail.example.com

创建子域后,您的 Domains页面应该看起来像以下图像:

After Adding SubDomain

接下来,点击其名称的链接进入子域的页面,您将看到三组DNS记录,如下图像所示:

SubDomain's DNS records

您需要在您的 DigitalOcean 仪表板中为您的域添加这些 DNS 记录。 发送跟踪的 DNS 记录是必需的,但您可以忽略用于 接收的 DNS 记录。

步骤 2 — 在 DigitalOcean 上设置 DNS 记录

登录您的 DigitalOcean帐户,然后点击您的仪表板上的 网络菜单,然后在 Domain字段中输入您在 Mailgun 中创建的子域,然后选择您想要配置邮件传输的滴滴。

Adding SubDomain to DigitalOcean

新域将出现在您的域名列表中. 点击它以显示其编辑页面. 除了已经创建的记录,您还需要添加两个 TXT记录和 Mailgun 指定的 CNAME记录。

DNS Records that need to be added

添加以下记录,使用您在步骤 1 中获得的 Mailgun 提供的信息:

  • 创建一个新的 CNAME记录:
  • 输入 name电子邮件hostnamemailgun.org.。 需要在 hostname的最后期限。
  • 创建一个 TXT记录:
  • 输入 name@ -
  • 对于 Text,输入来自 Mailgun 的第一个 TXT记录的文本,以双引用。 在这个例子中,它是v=spf1包括:mailgun.org ~all但你应该通过查看由 Mailgun 提供的值来验证。
  • 创建另一个 **TXT记录:
  • 输入来自 Mail

您可以等待 DNS 记录更新,或者在 Mailgun 中返回您的域页面,找到 ** 域验证和 DNS** 部分,然后点击按钮 ** 检查 DNS 记录现在** 当您的 DNS 记录检查时,您将看到已验证的记录的绿色检查框。

DNS 记录可能需要一段时间才能更新,更新时间可能从几分钟到数小时。

<$>[注] 注: 如果您的 DNS 记录在 Mailgun 中没有验证,请双重检查所输入的值,以确保它们匹配您的 Mailgun 域页面的值。

在等待 DNS 更新时,请从您的 MailGun 域页面查看并复制 SMTP 凭证. 您将很快需要这些值。 在 ** 域信息** 部分中,您的用户名列在 ** 默认 SMTP 登录** 旁边,密码位于 ** 默认密码** 旁边。

接下来就来设置postfix吧。

步骤 3 – 安装和配置 Postfix

我们将使用内置的 pacakge 管理器来安装 Postfix。

连接到您的服务器作为您的非根用户:

1[environment local]
2ssh sammy@your_server_ip

通常情况下,Postfix安装过程会使用一些交互式屏幕来提示您获取信息. 为了防止此设置过程中可能出现任何错误,我们在启动安装过程之前先配置此信息。

首先,配置 Postfix 作为邮件传递器:

1sudo debconf-set-selections <<< "postfix postfix/main_mailer_type select Satellite system"

然后告诉 Postfix 使用您的服务器的主机名为邮件服务器的主机名:

1sudo debconf-set-selections <<< "postfix postfix/mailname string $HOSTNAME"

然后配置 Postfix 以使用 Mailgun 的 SMTP 服务器来传送邮件:

1sudo debconf-set-selections <<< "postfix postfix/relayhost string smtp.mailgun.org"

有了这些配置,安装Postfix:

1sudo apt -y install postfix

为了让 Postfix 连接到 Mailgun,您必须创建一个凭证文件,其中包含您在步骤 2 中获得的 Mailgun 子域的用户名和密码。

<$>[注] 注:每个 Mailgun 子域都有自己的身份证件. 有关更多信息,请参阅 Mailgun 文档中的 Where Can I Find My API Key and SMTP Credentials

创建和编辑新的凭证文件:

1sudo nano /etc/postfix/sasl_passwd

向新文件添加下列行:

1[label /etc/postfix/sasl_password]
2smtp.mailgun.org your_mailgun_smtp_user@your_subdomain_for_mailgun:your_mailgun_smtp_password

接下来,通过限制阅读和写入权限到 root来保护文件,并使用postmap命令来更新Postfix的搜索表以使用这个新文件:

1sudo chmod 600 /etc/postfix/sasl_passwd
2sudo postmap /etc/postfix/sasl_passwd

接下来,通过防止匿名登录并指定身份验证文件来增强邮件转发器的安全性,以便为 Mailgun 提供安全登录。

1sudo nano /etc/postfix/main.cf

并将这些行添加到文件的末尾:

1[label /etc/postfix/main.cf]
2smtp_sasl_auth_enable = yes
3smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
4smtp_sasl_security_options = noanonymous
5smtp_sasl_tls_security_options = noanonymous
6smtp_sasl_mechanism_filter = AUTH LOGIN

<$>[注] 注: Postfix 已经采取了各种安全措施,以防止垃圾邮件机器人使用您的邮件传递器(更多信息,请参阅 [http://www.postfix.org/SMTPD_ACCESS_README.html])。

1[label /etc/postfix/main.cf]
2smtpd_relay_restrictions = permit_mynetworks
3permit_sasl_authenticated defer_unauth_destination

美元

现在重新启动 Postfix 来加载新配置:

1sudo systemctl restart postfix

您还应该通过运行此命令来检查防火墙的状态,以确保没有打开的 SMTP 端口:

1sudo ufw status

结果应该是这样的:

1[secondary_label Output]
2To Action From
3--                         ------      ----
422 ALLOW IN Anywhere                  
522 (v6)                    ALLOW IN Anywhere (v6)

输出应该包含这些端口中的任何一个 To列: 25, 465587. 这些端口用于SMTP访问,您不希望允许输入的流量使用您的邮件传输器。

通常情况下,要使用 Postfix 设置 SMTP 服务器,您的服务器的主机名必须与您的网站的 完全合格域名 相同(FQDN

步骤4:设置域地图

由于我们正在使用 Mailgun 用于我们的 SMTP 服务器而不是 Postfix,所以您的服务器的主机名称不需要与您使用的 FQDN 匹配. 这是非常常见的。 例如,如果您的服务器是数据库服务器或监控服务器,它可能根本没有 FQDN。

在这种情况下,我们将将您的 Linux 用户电子邮件帐户与您希望的任何 MailGun 域的用户名进行映射。

创建和编辑一个新的地图表,创建文件 /etc/postfix/generic:

1sudo nano /etc/postfix/generic

将此行添加到将您的机器上的 sammy用户绘制到 Mailgun 的文件中。

1[label  /etc/postfix/generic]
2sammy@your_hostname sender@your_subdomain_for_mailgun

您可以用任何您想要的名称代替发件人,例如WordPress不回复。唯一真正重要的部分是your_subdomain_for_mailgun,这应该是您在步骤 1 中定义的Mailgun子域。

您可以通过创建此类的更多行来指定多个用户。

现在,使用postmap命令将此映射添加到Postfix搜索表中:

1sudo postmap /etc/postfix/generic

然后编辑您的 Postfix 配置文件以添加地图文件:

1sudo nano /etc/postfix/main.cf

将此行添加到文件的末尾:

1[label /etc/postfix/main.cf]
2smtp_generic_maps = hash:/etc/postfix/generic

最后,重新启动 Postfix 以集成这些更改:

1sudo systemctl restart postfix

让我们测试邮件传递器,以确保一切都正确配置。

步骤5 - 测试您的邮件传递

要测试你的新邮件转发器,你会从你的服务器发送一个消息到你的个人电子邮件地址. 安装mailutils,这样你就可以快速发送一个测试电子邮件。

1sudo apt -y install mailutils

然后使用mailutils来编写并向您当前服务器上的用户的个人电子邮件帐户发送消息。

1mail -s "Test mail" your_email_address <<< "A test message using Mailgun"

您可以将消息更改为您喜欢的任何东西。

检查您的电子邮件客户端,看看您是否收到测试消息. 如果您做到了,那么祝贺您成功设置邮件转发器。

步骤 6 – 解决您的邮件传递问题

虽然有很多事情可能会出错,例如在之前的任何步骤中犯错误,但这里有一些常见的问题你可能会遇到。

首先,請確定 Mailgun 已驗證您的 DNS 記錄. 在此步驟成功之前,無法發生任何事情. 雙重檢查 Mailgun 的使用者界面並確保域名已驗證。

接下来,双重检查您的身份验证文件(/etc/postfix/sasl_passwd)。 确保您的用户名和密码与 Mailgun 中的相应子域相匹配。 不要使用您的 Mailgun 身份验证,因为这些不会起作用。 使用 Mailgun 为您的子域提供的特定身份验证。

检查您的电子邮件日志以获取任何有用的错误消息. 您将需要检查的两个地方. 首先,检查您的服务器上的日志,您可以在文件 /var/log/mail.log 中找到。

1tail -f /var/log/mail.log

这会显示您的日志文件的最后几行,还会跟踪输出,这意味着任何新的日志条目将显示,因为它们被写入日志中。

1[secondary_label Output]
2> Nov 1 16:07:45 cart-1268 postfix/smtp[30082]: 0E8062038A: to=<[email protected]>, relay=smtp.mailgun.org[173.203.37.114]:25, delay=2.3, delays=0.02/0/2.3/0, dsn=4.7.0, status=deferred (SASL authentication failed; server smtp.mailgun.org[173.203.37.114] said: 535 5.7.0 Mailgun is not loving your login or password)

除了您的服务器外,Mailgun 还会记录交易。访问您的Mailgun 仪表板并选择 Logs菜单以查看可能发生的任何错误消息,从而阻止了消息的发送。

最后,如果您的服务器的主机名称不是FQDN,请确保您完成了步骤4,为用户创建地图,以便他们可以发送消息。

结论

恭喜您使用 Mailgun 设置您的第一个电子邮件转发器,现在您有安全的方式从您的服务器发送所有类型的电子邮件,从内部通信和cron任务结果,到客户新闻稿或来自您的Web应用程序的消息。

如果你有其他伺服器,你想用來發送郵件,你只需要在每個伺服器上再次執行步驟3和4。你可以重複使用相同的 MailGun 網域為你想要的許多伺服器。

一个常见的场景是使用两个域名;一个用于内部服务器邮件,另一个用于批发邮件。内部服务器邮件是任何可能从您的服务器程序中发送的任何东西,如cron任务或Wordpress。批发邮件是当您将消息爆炸到整个邮件列表时。这种类型的电子邮件特别容易因垃圾邮件而被黑名单,所以您可能想要使用一个域名,如果被阻止,但仍然保留您的其他域名。

若要添加额外的电子邮件域,请为每个新域执行步骤 1 和 2,然后根据需要编辑 /etc/postfix/sasl_passwd/etc/postfix/generic

快乐电子邮件!

Published At
Categories with 技术
comments powered by Disqus