如何在Ubuntu18.04上安装和配置Postfix
介绍
Postfix 是一种流行的开源邮件传输代理 (MTA),可用于在 Linux 系统上路由和传递电子邮件。 据估计,互联网上大约有 25% of 个公共邮件服务器运行 Postfix。
在本指南中,我们将教您如何在 Ubuntu 18.04 服务器上使用 Postfix 快速启动和运行。
先决条件
为了遵循本指南,您应该有权访问具有 sudo
权限的非 root 用户。 您可以按照我们的 Ubuntu 18.04 初始服务器设置指南 创建必要的用户。
为了正确配置 Postfix,您需要一个指向 Ubuntu 18.04 服务器的完全限定域名。 您可以按照 本指南 找到有关使用 DigitalOcean 设置域名的帮助。 如果您打算接受邮件,则需要确保您也有一条 MX 记录指向您的邮件服务器。
出于本教程的目的,我们将假设您正在配置 FQDN 为 mail.example.com
的主机。
第 1 步 — 安装 Postfix
Postfix 包含在 Ubuntu 的默认存储库中,因此安装很简单。
首先,更新您的本地 apt
包缓存,然后安装软件。 我们将 DEBIAN_PRIORITY=low
环境变量传递到我们的安装命令中,以回答一些额外的提示:
sudo apt update sudo DEBIAN_PRIORITY=low apt install postfix
使用以下信息为您的环境正确填写提示:
- 邮件配置的一般类型?:为此,我们将选择Internet站点,因为这符合我们的基础设施需求。
- 系统邮件名称:当只给出地址的帐户部分时,这是用于构造有效电子邮件地址的基本域。 例如,我们服务器的主机名是
mail.example.com
,但我们可能希望将系统邮件名称设置为example.com
以便给定用户名user1
,Postfix 将使用该地址user1@example.com
。 - Root 和 postmaster 邮件收件人:这是 Linux 帐户,它将被转发到
root@
和postmaster@
的邮件。 为此使用您的主要帐户。 在我们的例子中,sammy。 - 为 接受邮件的其他目的地:这定义了此 Postfix 实例将接受的邮件目的地。 如果您需要添加此服务器将负责接收的任何其他域,请在此处添加它们,否则,默认值应该可以正常工作。
- 在邮件队列上强制同步更新?:由于您可能使用日志文件系统,因此在此处接受 No。
- 本地网络:这是您的邮件服务器配置为中继消息的网络列表。 默认值应该适用于大多数情况。 如果您选择修改它,请确保对网络范围非常严格。
- 邮箱大小限制:可用于限制邮件大小。 将其设置为“0”会禁用任何大小限制。
- 本地地址扩展字符:这是可用于将地址的常规部分与扩展分开的字符(用于创建动态别名)。
- 要使用的互联网协议:选择是否限制Postfix支持的IP版本。 为了我们的目的,我们将选择“全部”。
明确地说,这些是我们将用于本指南的设置:
- 邮件配置的一般类型?:互联网站点
- 系统邮件名称:example.com(不是mail.example.com)
- Root 和 postmaster 邮件收件人: sammy
- 接受邮件的其他目的地:$myhostname, example.com, mail.example.com, localhost.example.com,本地主机
- 强制同步更新邮件队列?:否
- 本地网络: 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
- 邮箱大小限制: 0
- 本地地址扩展字符:+
- 要使用的互联网协议:全部
如果您需要返回重新调整这些设置,您可以通过键入:
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.com
和 admin@example.com
上接收电子邮件,并希望将这些电子邮件发送给 sammy
Linux 用户,您可以将文件设置为这:
/etc/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
环境变量设置正确。 客户端将检查此变量以确定在哪里查找用户的邮件。
为了设置变量,无论您如何访问您的帐户(通过 ssh
、su
、su -
、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 格式,并且大部分是向后兼容的。 mail
的 GNU 版本有一些限制,例如无论源格式如何,总是将已读邮件保存为 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
命令来做到这一点。 因为 sent
文件只有在创建 Maildir 后才可用,我们应该为我们的初始电子邮件禁用写入该文件。 我们可以通过传递 -Snorecord
选项来做到这一点。
通过将字符串传送到 s-nail
命令来发送电子邮件。 调整命令以将您的 Linux 用户标记为收件人:
echo 'init' | s-nail -s 'init' -Snorecord sammy
您 可能 得到以下响应:
OutputCan't canonicalize "/home/sammy/Maildir"
这是正常现象,可能仅在发送第一条消息时出现。 我们可以通过查找我们的 ~/Maildir
目录来检查以确保该目录已创建:
ls -R ~/Maildir
您应该会看到目录结构已创建,并且新的消息文件位于 ~/Maildir/new
目录中:
Output/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
您应该看到您的新消息正在等待:
Outputs-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
即可显示您的消息:
Output[-- 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
Outputs-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 电子邮件功能来帮助您入门。