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

Postfix是一种流行的开源邮件传输代理(MTA),可用于在Linux系统上路由和传递电子邮件。据估计,互联网上约有25%的公共邮件服务器运行Postfix。在本指南中,我们将教您如何使用Postfix邮件服务器快速启动和运行。

本教程的先前版本由Justin Ellingwood编写。

介绍

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

在本指南中,我们将教您如何在Ubuntu 18.04服务器上使用Postfix快速启动和运行。

先决条件

要遵循本指南,您应该有权访问具有sudo权限的非root用户。 您可以按照我们的Ubuntu 18.04初始服务器设置指南来创建必要的用户。

为了正确配置Postfix,您需要一个指向Ubuntu 18.04服务器的完全限定域名。 您可以按照本指南找到有关使用DigitalOcean设置域名的帮助。 如果您打算接受邮件,则需要确保您的MX记录也指向您的邮件服务器。

出于本教程的目的,我们假设您正在配置具有mail.example.com的FQDN的mail.example.com

第1步 - 安装Postfix

Postfix包含在Ubuntu的默认存储库中,因此安装很简单。

首先,更新本地apt包缓存,然后安装该软件。 我们将把DEBIAN_PRIORITY=low环境变量传递给我们的安装命令,以便回答一些额外的提示:

sudo apt update
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实例将接受的邮件目的地。 如果您需要添加此服务器负责接收的任何其他域,请在此处添加,否则,默认应该可以正常工作。
  • 强制对邮件队列进行同步更新? :由于您可能正在使用日志文件系统,因此请在此处接受
  • 本地网络 :这是您的邮件服务器配置为中继邮件的网络列表。 默认应适用于大多数方案。 如果您选择修改它,请确保在网络范围方面具有非常严格的限制。
  • 邮箱大小限制 :这可用于限制邮件的大小。 将其设置为“0”将禁用任何大小限制。
  • 本地地址扩展字符 :这是可用于将地址的常规部分与扩展名(用于创建动态别名)分开的字符。
  • 要使用的Internet协议 :选择是否限制Postfix支持的IP版本。 我们会为我们的目的选择“全部”。

为了明确起见,这些是我们将用于本指南的设置:

  • 一般邮件配置类型? : 互联网网站
  • 系统邮件名称 :example.com(不是mail.example.com)
  • root和postmaster邮件收件人 :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
  • 本地地址扩展字符 :+
  • 要使用的Internet协议 :全部

如果您需要返回以重新调整这些设置,可以通过键入以下内容来执行此操作:

sudo dpkg-reconfigure postfix

提示将预先填充您之前的回复。

完成后,我们现在可以进行更多配置,以便为我们的系统设置我们喜欢它的方式。

第2步 - 调整Postfix配置

接下来,我们可以调整包没有提示我们的一些设置。

首先,我们可以设置邮箱。 我们将使用Maildir格式,它将消息分成单个文件,然后根据用户操作在目录之间移动。 另一个选项是mbox格式(我们在此不会介绍),它将所有消息存储在单个文件中。

我们将home_mailbox变量设置为Maildir/ ,它将在用户主目录下的该名称下创建一个目录结构。 postconf命令可用于查询或设置配置设置。 键入以下命令配置home_mailbox

sudo postconf -e 'home_mailbox= Maildir/'

接下来,我们可以设置virtual_alias_maps表的位置。 此表将任意电子邮件帐户映射到Linux系统帐户。 我们将在/etc/postfix/virtual创建此表。 同样,我们可以使用postconf命令:

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

第3步 - 将邮件地址映射到Linux帐户

接下来,我们可以设置虚拟地图文件。 在文本编辑器中打开文件:

sudo nano /etc/postfix/virtual

虚拟别名映射表使用非常简单的格式。 在左侧,您可以列出您希望接收电子邮件的任何地址。 然后,用空格分隔,输入您希望邮件传递到的Linux用户。

例如,如果您希望通过contact@example.comadmin@example.com接受电子邮件,并希望将这些电子邮件发送给sammy Linux用户,则可以像下面这样设置文件:

/等/Postfix/虚拟
contact@example.com sammy
admin@example.com sammy

将所有地址映射到相应的服务器帐户后,保存并关闭该文件。

我们可以通过键入来应用映射:

sudo postmap /etc/postfix/virtual

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

sudo systemctl restart postfix

第4步 - 调整防火墙

如果您正在运行UFW防火墙,如初始服务器设置指南中所配置,我们将不得不允许Postfix的例外。

您可以通过键入以下内容来允许连接到服务:

sudo ufw allow Postfix

Postfix服务器组件已安装并准备就绪。 接下来,我们将设置一个客户端,可以处理Postfix将处理的邮件。

第5步 - 设置环境以匹配邮件位置

在我们安装客户端之前,我们应该确保正确设置了MAIL环境变量。 客户端将检查此变量以确定在何处查找用户的邮件。

无论您如何访问帐户(通过sshsusu -sudo等),都要设置变量,我们需要在几个不同的位置设置变量。 我们将它添加到/etc/bash.bashrc/etc/profile.d ,以确保每个用户都配置了这个。

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

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

要将变量读入当前会话,可以获取/etc/profile.d/mail.sh文件:

source /etc/profile.d/mail.sh

第6步 - 安装和配置邮件客户端

为了与正在传递的邮件进行交互,我们将安装s-nail软件包。 这是BSD xmail客户端的一种变体,它功能丰富,可以正确处理Maildir格式,并且大部分是向后兼容的。 GNU版本的mail有一些令人沮丧的限制,例如始终将读取邮件保存为mbox格式,而不管源格式如何。

要安装s-nail包,请键入:

sudo apt install s-nail

我们应该调整一些设置。 在编辑器中打开/etc/s-nail.rc文件:

sudo nano /etc/s-nail.rc

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

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

这将允许客户端即使使用空的收件箱也可以打开。 它还会将Maildir目录设置为内部folder变量,然后使用此目录在其中创建一个已sent mbox文件,用于存储已发送的邮件。

完成后保存并关闭文件。

第7步 - 初始化Maildir并测试客户端

现在,我们可以测试客户端了。

初始化目录结构

在我们的主目录中创建Maildir结构的最简单方法是给自己发送一封电子邮件。 我们可以用s-nail命令做到这一点。 因为只有在创建Maildir后才能使用sent文件,我们应该禁止写入我们的初始电子邮件。 我们可以通过传递-Snorecord选项来完成此-Snorecord

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

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

可能会得到以下回复:

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

这是正常的,可能仅在发送第一条消息时出现。 我们可以检查以确保通过查找~/Maildir目录来创建目录:

ls -R ~/Maildir

您应该看到已创建目录结构,并且新消息文件位于~/Maildir/new目录中:

/home/sammy/Maildir/:
cur  new  tmp

/home/sammy/Maildir/cur:

/home/sammy/Maildir/new:
1463177269.Vfd01I40e4dM691221.mail.example.com

/home/sammy/Maildir/tmp:

看起来我们的邮件已经发送。

使用客户端管理邮件

使用客户端检查您的邮件:

s-nail

你应该看到你的新消息在等待:

s-nail version v14.8.6.  Type ? for help.
"/home/sammy/Maildir": 1 message 1 new
>N  1 sammy@example.com     Wed Dec 31 19:00   14/369   init

只需点击ENTER显示您的消息:

[-- Message  1 -- 14 lines, 369 bytes --]:
From sammy@example.com Wed Dec 31 19:00:00 1969
Date: Fri, 13 May 2016 18:07:49 -0400
To: sammy@example.com
Subject: init
Message-Id: <20160513220749.A278F228D9@mail.example.com>
From: sammy@example.com

init

您可以通过键入h ,然后按ENTER返回到您的消息列表:

h
s-nail version v14.8.6.  Type ? for help.
"/home/sammy/Maildir": 1 message 1 new
>R  1 sammy@example.com     Wed Dec 31 19:00   14/369   init

由于此消息不是很有用,我们可以用d删除它,然后按ENTER

d

退出键入q然后按ENTER返回终端:

q

与客户端发送邮件

您可以通过在文本编辑器中键入消息来测试发送邮件:

nano ~/test_message

在里面,输入一些你想要发送电子邮件的文字:

〜/ test_message
Hello,

This is a test.  Please confirm receipt!

使用cat命令,我们可以将消息传递给s-nail进程。 默认情况下,这将以Linux用户身份发送消息。 如果要将该值修改为其他值,可以使用-r标志调整“From”字段:

cat ~/test_message | s-nail -s 'Test email subject line' -r from_field_account user@email.com

以上选项是:

  • -s :电子邮件的主题行
  • -r :对电子邮件的“发件人:”字段的可选更改。 默认情况下,您登录的Linux用户将用于填充此字段。 -r选项允许您覆盖它。
  • user@email.com :发送电子邮件的帐户。 将此更改为您有权访问的有效帐户。

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

s-nail

然后,键入以下内容查看已发送的邮件:

file +sent

您可以使用用于传入邮件的相同命令来管理已发送邮件。

结论

您现在应该在Ubuntu 18.04服务器上配置Postfix。 管理电子邮件服务器对于初级管理员来说可能是一项艰巨的任务,但是使用此配置,您应该拥有基本的MTA电子邮件功能来帮助您入门。