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

介紹

Postfix是一個流行的開源郵件傳輸代理(MTA),可用於在Linux系統上路由和傳遞電子郵件。估計全球大約有25%的公共郵件服務器運行Postfix。

在本指南中,您將學習如何在Ubuntu 22.04服務器上安裝和配置Postfix。然後,您將通過安裝s-nail,一個郵件用戶代理(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可禁用任何大小限制。
  • 本地地址擴展字符: 這是用於將地址的常規部分與擴展(用於創建動態別名)分開的字符。默認情況下,+將適用於本教程。
  • 要使用的Internet協議: 選擇是否限制Postfix支持的IP版本。為本教程選擇all

為明確起見,這是本指南中使用的設置:

  • 郵件配置的一般類型?: Internet Site
  • 系統郵件名稱: 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
  • 本地地址擴展字符: +
  • 要使用的Internet協議: 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 + X,然後按Y,最後按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 將查找此變量以確定在哪裡為您的用戶查找郵件。

確保無論如何訪問您的帳戶 — 例如通過 sshsusu -sudo — 都設置了 MAIL 變量,您需要在 /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:在設置為 folder 變量的任何目錄中創建一個 sent mbox 文件,用於存儲已發送的郵件,在本例中為 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客户端:

步骤 4 — 测试客户端

要打开客户端,请运行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

按下ENTER以显示消息:

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,然后ENTER返回消息列表:

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

请注意,消息现在的状态为R,表示已读取。

由于此消息不是很有用,您可以通过按下d,然后ENTER来删除它:

  1. d

要返回到终端,请键入q然后ENTER

  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:將電子郵件的“From:”字段可選更改。默認情況下,將使用您登錄的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