如何在Ubuntu 22.04上安装和配置Postfix

介绍

Postfix是一款流行的开源邮件传输代理(MTA),可用于在Linux系统上路由和传递电子邮件。据估计,大约有25%的互联网上的公共邮件服务器在运行Postfix。

在本指南中,您将学习如何在Ubuntu 22.04服务器上安装和配置Postfix。然后,您将通过安装s-nail来测试Postfix是否能够正确路由邮件,邮件用户代理(MUA),也称为电子邮件客户端

请注意,本教程的目标是帮助您快速启动并运行Postfix,仅具有一些基本的电子邮件功能。在本指南结束时,您将没有完整功能的电子邮件服务器,但您将具有此类设置的一些基础组件,以帮助您入门。

先决条件

设置和维护自己的邮件服务器是复杂且耗时的。对于大多数用户来说,更实际的做法是依赖于付费的邮件服务。如果您正在考虑运行自己的邮件服务器,我们建议您查阅关于为何可能不想这样做的文章

如果您确定要按照此指南安装和配置 Postfix,则首先必须具备以下条件:

  • A server running Ubuntu 22.04 to function as your Postfix mail server. This server should have a non-root user with sudo privileges and a firewall configured with UFW. You can follow our Ubuntu 22.04 initial server setup guide to set this up.
  • A Fully Qualified Domain Name pointed at your Ubuntu 22.04 server. You can find help on setting up your domain name with DigitalOcean by following our Domains and DNS Networking documentation. Be aware that if you plan on accessing mail from an external location, you will need to make sure you have an MX record pointing to your mail server as well.

请注意,本教程假定您正在配置具有 FQDN 为mail.example.com的主机。在必要的地方,请确保更改example.commail.example.com以反映您自己的 FQDN。

步骤1 — 安装 Postfix

Postfix 已包含在 Ubuntu 的默认仓库中,因此您可以使用 APT 安装它。

首先,更新您本地的apt软件包缓存:

  1. sudo apt update

然后使用以下命令安装postfix软件包。请注意,在此我们将DEBIAN_PRIORITY=low环境变量传递到此安装命令中。这将导致安装过程提示您配置一些附加选项:

  1. sudo DEBIAN_PRIORITY=low apt install postfix

此安装过程将打开一系列交互式提示。对于本教程,使用以下信息填写您的提示:

  • 邮件配置的一般类型?:对于这个,选择Internet Site,因为这符合我们的基础设施需求。
  • 系统邮件名称:这是用于构建有效电子邮件地址的基础域,当只给出地址的帐户部分时。例如,假设您的服务器主机名是mail.example.com。您可能希望将系统邮件名称设置为example.com,这样,给定用户名user1,Postfix 将使用地址user1@example.com
  • Root 和 postmaster 邮件接收者:这是将转发邮件给root@postmaster@的 Linux 帐户。将您的主帐户用于此操作。在此示例中,sammy
  • 接受邮件的其他目的地:这定义了此 Postfix 实例将接受的邮件目的地。如果您需要添加此服务器负责接收的其他域,请在此处添加。否则,默认设置就足够了。
  • 强制邮件队列上的同步更新?:由于您可能在使用日志文件系统,此处接受No
  • 本地网络:这是您的邮件服务器配置为中继消息的网络列表。对于大多数情况, 默认设置都可以使用。但如果选择修改,请确保在网络范围方面非常严格。
  • 邮箱大小限制:这可以用来限制消息的大小。将其设置为0将禁用任何大小限制。
  • 本地地址扩展字符:这是用于将地址的常规部分与扩展部分(用于创建动态别名)分隔开的字符。默认情况下,+将适用于本教程。
  • 要使用的互联网协议:选择是否限制Postfix支持的IP版本。对于本教程的目的,请选择all

具体而言,这些是本指南中使用的设置:

  • 邮件配置的一般类型?互联网网站
  • 系统邮件名称example.com(不是mail.example.com
  • Root和postmaster邮件接收者:您主要的Linux帐户的用户名(在我们的示例中为sammy
  • 接受邮件的其他目的地$myhostname, example.com, mail.example.com, localhost.example.com, localhost
  • 在邮件队列上强制同步更新?
  • 本地网络127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
  • 邮箱大小限制0
  • 本地地址扩展字符+
  • 要使用的互联网协议all

注意:如果您需要返回更改这些设置,可以通过键入:

  1. sudo dpkg-reconfigure postfix

来执行此操作。提示将预填充为您之前的响应。

当提示您重新启动服务时,请接受默认设置并选择确定

安装过程完成后,您可以开始对您的Postfix配置进行一些更新。

第2步 — 更改Postfix配置

现在,您可以调整一些安装过程中未提示您的设置。许多Postfix的配置设置在/etc/postfix/main.cf文件中定义。您可以使用Postfix的postconf命令查询或设置配置设置,而不是直接编辑此文件。

首先,设置非root Ubuntu用户的邮箱位置。在本指南中,我们将使用Maildir格式,该格式将消息分隔为单独的文件,然后根据用户操作移动到不同的目录中。本指南未涵盖的另一选项是mbox格式,它将所有消息存储在单个文件中。

home_mailbox变量设置为Maildir/。稍后,您将在用户的主目录下创建以该名称为名的目录结构。通过键入以下命令来配置home_mailbox:

  1. sudo postconf -e 'home_mailbox= Maildir/'

接下来,设置virtual_alias_maps表的位置,该表将任意电子邮件帐户映射到Linux系统帐户。运行以下命令,将表位置映射到名为/etc/postfix/virtual的哈希数据库文件:

  1. sudo postconf -e 'virtual_alias_maps= hash:/etc/postfix/virtual'

现在,您已经在您的main.cf文件中定义了虚拟映射文件的位置,您可以创建文件本身并开始将电子邮件帐户映射到Linux系统上的用户帐户。使用您喜欢的文本编辑器创建文件; 在这个例子中,我们将使用nano:

  1. sudo nano /etc/postfix/virtual

列出您希望接收邮件的任何地址,然后是一个空格和您希望该邮件传递给的Linux用户。

例如,如果您想在contact@example.comadmin@example.com接收邮件,并希望将这些邮件传递给sammy Linux用户,您可以设置您的文件如下:

/etc/postfix/virtual
contact@example.com sammy
admin@example.com sammy

在映射所有地址到相应服务器帐户后,保存并关闭文件。如果您使用nano,请按CTRL + XY,然后ENTER来完成此操作。

通过键入以下命令应用映射:

  1. sudo postmap /etc/postfix/virtual

重新启动Postfix进程,以确保所有更改都已应用:

  1. sudo systemctl restart postfix

假设您已经按照先决条件初始服务器设置指南,您将已经配置了一个带有UFW的防火墙。此防火墙默认情况下会阻止对服务器上服务的外部连接,除非明确允许这些连接,因此您需要添加防火墙规则以允许对Postfix的异常情况。

您可以通过输入以下内容来允许对该服务的连接:

  1. sudo ufw allow Postfix

有了这个设置,Postfix已经配置好并准备好接受外部连接。但是,在您准备好使用邮件客户端测试它之前,您需要对Ubuntu服务器的设置进行一些更改。

步骤3 — 安装邮件客户端并初始化Maildir结构

为了与正在传递的邮件进行交互,此步骤将指导您安装s-nail软件包的过程。这是一个功能丰富的BSD xmail客户端的变体,可以正确处理Maildir格式。

但在安装客户端之前,最好确保您的MAIL环境变量已正确设置。s-nail将查找此变量以确定您的用户的邮件存放位置。

确保 MAIL 变量被设置,无论您如何访问您的帐户 —— 无论是通过 sshsusu - 还是 sudo,例如 —— 您都需要在 /etc/bash.bashrc 文件中设置该变量,并将其添加到 /etc/profile.d 中的一个文件中,以确保默认情况下为所有用户设置该变量。

要将变量添加到这些文件中,请输入:

  1. echo 'export MAIL=~/Maildir' | sudo tee -a /etc/bash.bashrc | sudo tee -a /etc/profile.d/mail.sh

要将变量读取到当前会话中,请将 /etc/profile.d/mail.sh 文件源化:

  1. source /etc/profile.d/mail.sh

完成后,请使用 APT 安装 s-nail 邮件客户端:

  1. sudo apt install s-nail

在运行客户端之前,您需要调整一些设置。在编辑器中打开 /etc/s-nail.rc 文件:

  1. sudo nano /etc/s-nail.rc

在文件底部添加以下选项:

/etc/s-nail.rc
. . .
set emptystart
set folder=Maildir
set record=+sent

这些行的作用如下:

  • set emptystart:允许客户端即使在收件箱为空时也能打开
  • set folder=Maildir:将 Maildir 目录设置为内部的 folder 变量
  • set record=+sent:创建一个 sent mbox 文件,用于在设置为 folder 变量的任何目录中存储已发送的邮件,本例中为 Maildir

完成后保存并关闭文件。现在,您已准备好初始化系统的 Maildir 结构了。

A quick way to create the Maildir structure within your home directory is to send yourself an email with the s-nail command. Because the sent file will only be available once the Maildir is created, you should disable writing to it for this initial email. Do this by passing the -Snorecord option.

通过将字符串传递给 s-nail 命令来发送邮件。调整命令以将您的 Linux 用户标记为收件人:

  1. echo 'init' | s-nail -s 'init' -Snorecord sammy

注意: 你可能会收到以下响应:

Output
Can't canonicalize "/home/sammy/Maildir"

这是正常的,可能只会在发送第一条消息时出现。

你可以检查确保目录已创建,方法是查找你的~/Maildir目录:

  1. ls -R ~/Maildir

你会看到目录结构已经创建,并且一个新的消息文件在~/Maildir/new目录中:

Output
/home/sammy/Maildir/: cur new tmp /home/sammy/Maildir/cur: /home/sammy/Maildir/new: 1650294586.Vfc01I7e11dM993645.mail.example.com /home/sammy/Maildir/tmp:

现在目录结构已经创建好了,你可以通过查看你发送的init消息以及向外部电子邮件地址发送消息来测试s-nail客户端:

第四步 — 测试客户端

打开客户端,运行s-nail命令:

  1. s-nail

在你的控制台中,你会看到一个基本的收件箱,里面有init消息等待:

Output
s-nail version v14.9.15. Type `?' for help "/home/sammy/Maildir": 1 message 1 new >N 1 [email protected] 2022-04-18 15:09 14/452 init

按下回车键以显示消息:

Output
[-- Message 1 -- 14 lines, 452 bytes --]: Date: Mon, 18 Apr 2022 15:09:46 +0000 To: [email protected] Subject: init Message-Id: <20220418150946.EE6897E11A@@mail.example.com> From: [email protected] init

你可以通过输入h,然后回车来返回消息列表:

  1. h
Output
>R 1 [email protected] 2022-04-18 15:09 14/452 init

注意,消息现在的状态是R,表示已读取:

由于这条消息并不是很有用,你可以通过按下d,然后回车来删除它:

  1. d

要返回终端,请输入q,然后回车

  1. q

作为最后的测试,请检查 s-nail 是否能够正确发送电子邮件。为此,您可以将文本文件的内容导入 s-nail 进程,就像您在上一步中发送 init 消息时所做的那样。

首先,在文本编辑器中编写一个测试消息:

  1. nano ~/test_message

在其中输入您想要发送的一些文本:

~/test_message
Hello,

This is a test.  Please confirm receipt!

在撰写完您的消息后保存并关闭文件。

然后,使用 cat 命令将消息导入 s-nail 进程。您可以使用以下示例执行此操作,该示例使用以下选项:

  • -s: 定义电子邮件消息的主题行
  • -r: 对电子邮件的“发件人:”字段进行可选更改。 默认情况下,将使用您登录的 Linux 用户来填充此字段。 -r 选项允许您使用有效地址覆盖此字段,例如您在 /etc/postfix/virtual 文件中定义的地址之一。 为了举例说明,以下命令使用 [email protected]

另外,请确保将 user@email.com 更改为您可以访问的有效电子邮件地址:

  1. cat ~/test_message | s-nail -s 'Test email subject line' -r [email protected] user@email.com

然后,转到您发送消息的电子邮件地址的收件箱。 您几乎立即就会看到您的消息在那里等待。

注意: 如果消息不在收件箱中,则可能已被发送到您的垃圾邮件文件夹中。

您可以在您的 s-nail 客户端中查看已发送的消息。 再次启动交互式客户端:

  1. s-nail

从电子邮件客户端查看您发送的消息,只需键入:

  1. file +sent

您将看到如下输出:

Output
+[/home/sammy/Maildir/]sent: 1 message 1 new ▸N 1 To [email protected] 2022-04-18 15:12 10/211 Test email subject line

您可以使用与接收邮件相同的命令来管理已发送的邮件。

结论

您现在已经在您的Ubuntu 22.04服务器上配置了Postfix。对于新的系统管理员来说,管理电子邮件服务器可能是一项艰巨的任务,但通过这种配置,您应该有足够的MTA电子邮件功能来开始使用。

Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-postfix-on-ubuntu-22-04