Postfix 是一款流行的免费开源软件,用作邮件传输代理(MTA)。Postfix 的工作是路由和投递电子邮件。除了经典用途外,Postfix 还可以配置为仅由本地应用程序发送电子邮件。
Postfix 的这种应用是在各种情况下部署的有用技巧。例如,它可用于定期发送电子邮件通知、与出站流量有限的第三方电子邮件服务提供商合作等。与任何功能完备的 SMTP 服务器相比,Postfix 是一个更轻量级的替代方案,同时保留了必要的功能。
在本教程中,了解如何在 Ubuntu 上安装和配置 Postfix 作为只发(send-only)SMTP 服务器。
前提条件
为了遵循本指南,您需要满足以下前提条件:
-
您需要拥有一个配置妥当的 Ubuntu 服务器,并具有非 root 用户的 sudo 访问权限.
-
您还需要一个完全注册的域名。从我们的 从商业证书颁发机构安装 SSL 证书 文章中了解更多关于域名的信息。
-
最后,您需要一个域名指向服务器公网 IP 地址的 DNS 记录。
安装 Postfix
满足前提条件后,服务器就可以部署 Postfix 了。安装 Postfix 最简单的方法是安装 mailutils 软件包。它直接在 Ubuntu 官方仓库中提供。
首先,打开终端,并更新 APT 软件包数据库:
|
1 |
sudo apt update |

然后,您可以安装 Postfix:
|
1 |
sudo apt install mailutils |

在安装过程中,将弹出以下配置窗口。默认选项是 Internet Site。要确认选择,请按 TAB 键将光标移动到下一部分。然后,按 Enter:

下一步将询问系统邮件名称(System mail name)。它将是创建时分配给服务器的名称。如脚本中所述,如果本地主机的邮件地址是“foo@example.org”,那么系统邮件名称将是 example.org:

请注意,以后也可以随时使用以下命令触发配置脚本:
|
1 |
sudo dpkg-reconfigure postfix |
配置 Postfix
在此步骤中,Postfix 将配置为仅发送和接收来自 localhost 的电子邮件。这需要 Postfix 监听 loopback 接口。这是服务器用于内部通信的虚拟网络接口。接下来,使用您选择的文本编辑器打开 Postfix 配置文件:
|
1 |
sudo nano /etc/postfix/main.cf |
将 inet_interface 的值更改为 loopback-only:

您必须更改的另一个指令是 mydestination。它定义了通过 local_transport 邮件投递传输进行投递的域名列表。默认值类似于:

将其值更改为以下内容:
|
1 |
mydestination = localhost.$mydomain, localhost, $myhostname |

如果您的域名实际上是一个子域名,并且您希望电子邮件看起来像是从主域名发送的,请在 Postfix 配置的末尾添加以下指令。它将从电子邮件地址中删除子域名:
|
1 |
masquerade_domains = <main_domain> |

要使更改生效,请重启 Postfix:
|
1 |
sudo systemctl restart postfix |
测试 SMTP 服务器
假设配置过程顺利,现在是测试它的时候了。为此,请检查 Postfix 是否可以使用 mail 命令向外部电子邮件帐户发送电子邮件。它是 mailutils 软件包的一部分:
|
1 |
echo "Test email body" | mail -s "Subject line" <email_address> |
邮件应该会送达指定的电子邮件地址。此时,所有发送的电子邮件都是未加密的。服务商通常会将此类邮件标记为垃圾邮件,因此请务必检查垃圾邮件箱以确认邮件是否送达。
如果 mail 命令报错,或者邮件在很长一段时间后仍未送达,请重新检查 Postfix 配置,并确保服务器名称和主机名设置正确。通过此配置,发送的电子邮件将显示为来自以下地址:
|
1 |
<username>@<domain> |
在这里,用户名将是运行 mail 命令的服务器用户的用户名。
转发系统邮件
我们已成功验证邮件服务器配置正确且运行正常。现在需要将其配置为转发 root 的邮件。所有发送到服务器的系统生成邮件都将被转发到外部电子邮件地址。对于邮件收件人, /etc/aliases 文件包含别名列表。使用您选择的文本编辑器打开它:
|
1 |
sudo nano /etc/aliases |
默认情况下,它看起来像这样:

在文件末尾添加以下行:
|
1 |
root: <email_address> |

它表示发送到 root 的邮件将被转发到一个电子邮件地址。要使更改生效,请运行以下命令。它将重建 mail 命令使用的别名数据库:
|
1 |
sudo newaliases |
![]()
接下来,您需要测试更改是否成功。发送一封测试邮件到 root:
|
1 |
echo "Test root email body" | mail -s "Subject line" root |
邮件应该会送达指定的电子邮件地址。不要忘记检查垃圾邮件文件夹,因为目前尚未配置加密。
启用 SMTP 加密
以未加密格式发送电子邮件是一项冒险的举动。为了确保安全,需要启用 SMTP 加密。为此,我们将为您的域名向 Let’s Encrypt 申请一个免费的 TLS 证书。
对于 Ubuntu,执行此任务的工具是 Certbot。值得庆幸的是,它直接包含在 Ubuntu 官方软件源中。使用以下命令安装 Certbot:
|
1 |
sudo apt install certbot |

假设 服务器已配置 UFW,则需要打开端口 80 以便进行域名验证。运行以下命令来启用它:
|
1 |
sudo ufw allow 80 |

现在,运行 Certbot 来生成证书。它会指示 Certbot 签发带有 4096 位 RSA 密钥的证书。验证将通过端口 80 (HTTP) 进行:
|
1 |
sudo certbot certonly --standalone --rsa-key-size 4096 --agree-tos --preferred-challenges http -d <domain> |
输出将类似于以下内容:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
正在保存 调试 日志 到 /var/log/letsencrypt/letsencrypt.log 插件 已选择: 验证器 standalone, 安装器 无 正在获取 一个 新 证书 正在执行 以下 的 挑战: http-01 挑战 针对 '<domain>' 等待 进行 验证... 清理 up 挑战 重要 注意事项: - 恭喜! 您的 证书 和 链 已 被 保存 在: /etc/letsencrypt/live/<domain>/fullchain.pem 您的 密钥 文件 已 被 保存 在: /etc/letsencrypt/live/<domain>/privkey.pem 您的 证书 将 过期 于 2020-07-11. 要 获取 一个 新的 或 调整后的 版本 的 此 证书 在 the 未来, 只需 运行 certbot 再次. 要 非-交互式地 更新 *所有* 的 您的 证书, 运行 "certbot renew" - 如果 您 喜欢 Certbot, 请 考虑 支持 我们的 工作 通过: 捐赠 给 ISRG / Let's Encrypt: https://letsencrypt.org/donate 捐赠 给 EFF: https://eff.org/donate-le |
密钥将存储在以下目录中:
|
1 |
/etc/letsencrypt/live/<domain> |
现在您的证书已生成,请在文本编辑器中打开 Postfix 配置文件:
|
1 |
sudo nano /etc/postfix/main.cf |
找到以下部分 TLS 参数:

之后,更改以下指令的值 smtpd_tls_cert_file 和 smtpd_tls_key_file:

接下来,保存并关闭文件。要使更改生效,请重启 Postfix:
|
1 |
sudo systemctl restart postfix |
最后,再次向目标电子邮件地址发送一封测试邮件:
|
1 |
echo "This is email body" | mail -s "Email subject line" <email> |
该电子邮件现在应该像其他电子邮件一样正常显示。如果您检查电子邮件的技术信息,它将显示为已加密。
结语
恭喜!您已成功配置了由 Postfix 支持的只发电子邮件服务器。使用适当的加密密钥,电子邮件传输也是安全的。
有关优化电子邮件传输的更多方法,请查看此教程 使用 Google SMTP 服务器的最佳方法.
祝您使用愉快!
评论
暂无评论。发表第一条评论吧。