介绍
设置SMTP服务器不是一个弱心的人的任务,不仅是安全问题,但邮件交付能力是一个更大的问题,确保从家庭发送的SMTP服务器的电子邮件的高交付性而不被标记为垃圾邮件是不可能的,因为今天大多数电子邮件提供商提供的高度垃圾邮件保护。
邮件转发解决了这两个问题,它比完整的SMTP服务器更容易配置,因为您只会将服务器生成的任何电子邮件路由到专业管理的SMTP服务器。
有两种类型的邮件传递: open 和 closed. 一个开放的邮件传递路由来自外部来源的邮件以及内部服务器邮件. 这种类型的传递是成熟的滥用从垃圾邮件发送者。
虽然您可以使用任何外部 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为您创建。
不要使用沙盒,请通过点击添加新域
按钮创建 Mailgun 子域,您可以将此子域命名为任何您喜欢的域名,如mailgun.example.com
或bulkemail.example.com
。
创建子域后,您的 Domains页面应该看起来像以下图像:
接下来,点击其名称的链接进入子域的页面,您将看到三组DNS记录,如下图像所示:
您需要在您的 DigitalOcean 仪表板中为您的域添加这些 DNS 记录。 发送和 跟踪的 DNS 记录是必需的,但您可以忽略用于 接收的 DNS 记录。
步骤 2 — 在 DigitalOcean 上设置 DNS 记录
登录您的 DigitalOcean帐户,然后点击您的仪表板上的 网络菜单,然后在 Domain字段中输入您在 Mailgun 中创建的子域,然后选择您想要配置邮件传输的滴滴。
新域将出现在您的域名列表中. 点击它以显示其编辑页面. 除了已经创建的记录,您还需要添加两个 TXT记录和 Mailgun 指定的 CNAME记录。
添加以下记录,使用您在步骤 1 中获得的 Mailgun 提供的信息:
- 创建一个新的 CNAME记录:
- 输入 name的
电子邮件
和 hostname的mailgun.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
, 465
或 587
. 这些端口用于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
。
快乐电子邮件!