如何在 Ubuntu 20.04 上安裝和配置 Postfix


標籤: ,

介紹

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

在本指南中,您將學習如何在 Ubuntu 20.04.3 服務器上安裝和配置 Postfix。然後,您將測試後綴能夠正確地路由郵件通過安裝s-nail,一個郵件用戶代理(MUA),也被稱為電子郵件客戶端

請注意,本教程的目標是幫助您僅使用一些基本的電子郵件功能來快速啟動和運行 Postfix。到本指南結束時,您將不會擁有功能齊全的電子郵件服務器,但您將擁有此類設置的一些基本組件來幫助您入門。

安裝 Postfix 前置作業

如果您確定要按照本指南安裝和配置 Postfix,那麼您必須首先具備以下條件:一台運行 Ubuntu 20.04 的服務器作為您的 Postfix 郵件服務器。此服務器應具有具有sudo特權的非 root 用戶和配置有 UFW 的防火牆。您可以按照我們的Ubuntu 20.04.3 安裝教程進行設置

請注意,本教程假設您正在配置 FQDN 為mail.gundam.com.tw,如有必要,請務必更改example.commail.example.com反映您自己的 FQDN。

為 Ubuntu 服務器設置正確的主機名

默認情況下,Postfix在與其他 MTA 通信時使用您服務器的主機名來標識自己。主機名可以有兩種形式:單個單詞和 FQDN。

單字形式主要用於個人計算機。您的Linux家裡的電腦可能被命名為linuxdebianubuntu等FQDN(完全限定域名)是常用在面向Internet的服務器,我們應該我們的郵件服務器上使用FQDN。它由兩部分組成:節點名和域名。例如:

mail.gundam.com.tw

是 FQDN。mail是節點名,linuxbabe.com是域名。FQDN 將出現在 smtpd 橫幅中。如果您的 Postfix 沒有在 smtpd 橫幅中提供 FQDN,一些 MTA 會拒絕郵件。一些 MTA 甚至查詢 DNS 以查看 smtpd 橫幅中的 FQDN 是否解析為您的郵件服務器的 IP

輸入以下命令以查看主機名的 FQDN 形式。

hostname -f

假如你要修改它:

sudo hostnamectl set-hostname your-fqdn

為您的郵件服務器設置 DNS 記錄

您需要前往您的 DNS 託管服務(通常是您的域名註冊商如 Hinet)來設置 DNS 記錄

MX 主機的通用名稱是mail.yourdomain.com. 您可以指定多個 MX 記錄並為您的郵件服務器設置優先級。較低的數字意味著較高的優先級。這裡我們只使用一個MX記錄並設置0為優先級值。(0 – 65535)

請注意,當您創建 MX 記錄時,您應該@在名稱字段中輸入或 您的頂級域名,如下所示。頂級域名是沒有任何子域的域名。

新增類型:MX 內容:mail.gundam.com.tw

新增一個A記錄

A 記錄將 FQDN 映射到 IP 地址。

新增類型:A 內容:你的Server Public IP

PTR記錄

指針記錄或 PTR 記錄將 IP 地址映射到 FQDN。它是 A 記錄的對應物,用於反向 DNS (rDNS) 查找。

使用 PTR 記錄反向解析 IP 地址有助於阻止垃圾郵件發送者。許多 MTA 僅在服務器真正負責某個域時才接受電子郵件。您絕對應該為您的電子郵件服務器設置 PTR 記錄,以便您的電子郵件更有可能進入收件人的收件箱而不是垃圾郵件文件夾。

要檢查 IP 地址的 PTR 記錄,您可以使用以下命令。

dig -x <IP> +short

host <IP>

中華民國大部分企業用的ISP廠商皆為Hinet,請準備HN號碼與密碼

登入網址:IP 反解申請

步驟1 – 安裝 Postfix

Postfix 包含在 Ubuntu 的默認存儲庫中,因此您可以使用 APT 安裝它。

首先,更新您的本地apt包緩存:

sudo apt update

然後postfix使用以下命令安裝軟件包。注意這裡我們將DEBIAN_PRIORITY=low環境變量傳入這個安裝命令。這將導致安裝過程提示您配置一些附加選項:

sudo DEBIAN_PRIORITY=low apt install postfix

請按Y繼續

這個安裝過程會打開一系列交互提示。出於本教程的目的,請使用以下信息填寫您的提示:

  • 郵件配置的一般類型?:為此,請選擇Internet 站點,因為這符合我們的基礎架構需求。
  • 系統郵件名稱:簡單來說就是@後面那串,以筆者的網域為例如下圖。
  • Root 和 postmaster 郵件收件人:這是將轉發郵件至root@和的 Linux 帳戶postmaster@。為此,請管理員使用自己欲建置的帳戶,以筆者amuro.rei為例如下圖。
  • 郵件用戶等同Linux帳戶,Postfix只是讓Linux帳戶有郵件功能而已
  • 接受郵件的其他目的地:這定義了此 Postfix 實例將接受的郵件目的地。如果您需要添加此服務器將負責接收的任何其他域,請在此處添加。否則,默認值就足夠了。
  • 強制同步更新郵件隊列?:由於您可能使用的是日誌文件系統,請在此處接受“否”
  • 本地網絡:這是您的郵件服務器配置為中繼消息的網絡列表。默認值適用於大多數情況。但是,如果您選擇修改它,請確保對網絡範圍進行非常嚴格的限制。
  • 郵箱大小限制:這可用於限制郵件的大小。將其設置為0禁用任何大小限制。
  • 本地地址擴展字符:此字符可用於將地址的常規部分與擴展名(用於創建動態別名)分開。默認值+適用於本教程。
  • 要使用的 Internet 協議:選擇是否限制 Postfix 支持的 IP 版本。出於本教程的目的,選擇所有.

注意:如果您需要返回更改這些設置,您可以鍵入:

提示將預先填充您之前的選擇。

sudo dpkg-reconfigure postfix

安裝後,Postfix 將自動啟動並/etc/postfix/main.cf生成一個文件。現在我們可以使用以下命令檢查 Postfix 版本

postconf mail_version

在 Ubuntu 18.04 上,Postfix 版本是 3.3.0,Ubuntu 20.04 附帶版本 3.4.13。

mail_version = 3.4.13

ss(插座統計)實用程序告訴我們,Postfix的主進程是TCP端口25上偵聽。

sudo ss -lnpt | grep master

Postfix 在/usr/sbin/目錄下附帶了許多二進製文件,可以使用以下命令看到。

dpkg -L postfix | grep /usr/sbin/

在防火牆中打開 TCP 端口 25

sudo ufw allow 25/tcp

然後我們可以使用在線端口掃描器掃描郵件服務器上的開放端口。輸入您的郵件服務器的公共 IP 地址並選擇掃描所有公共端口。

建立你自己的電子郵件服務器 redhat

檢查 TCP 端口 25(出站)是否被阻止

出站TCP端口25需要是開放的,所以後綴可以發送電子郵件到其他SMTP服務器。出站 TCP 端口 25 由您的託管服務提供商控制,我們可以安裝該telnet實用程序來檢查它是打開還是被阻止。

sudo apt install telnet

在您的郵件服務器上運行以下命令。

telnet gmail-smtp-in.l.google.com 25

如果它沒有被阻止,您將看到如下消息,這表明連接已成功建立。(提示:quit輸入並按回車鍵關閉連接。)

如果端口 25(出站)被阻止,您會看到如下內容:

Trying 2607:f8b0:400e:c06::1a...
Trying 74.125.195.27...
telnet: Unable to connect to remote host: Connection timed out

在這種情況下,您的 Postfix 無法向其他 SMTP 服務器發送電子郵件。請您的 ISP/託管服務提供商為您打開出站端口 25。如果他們拒絕您的請求,您需要設置 SMTP 中繼以繞過端口 25 阻塞或使用像ScalaHosting這樣不阻塞端口 25的 VPS 。

有些人可能會問,“我可以將端口 25 更改為另一個端口以繞過阻塞嗎”?答案是否定的。僅當您同時控制服務器端和客戶端時,更改端口才有效。當 Postfix 發送電子郵件時,它充當 SMTP 客戶端。收件人的郵件服務器充當 SMTP 服務器。您無法控制接收 SMTP 服務器。SMTP 服務器正在偵聽端口 25 以接收電子郵件。他們希望 SMTP 客戶端訪問端口 25。沒有其他端口用於接收電子郵件。如果您的 Postfix 沒有連接到接收 SMTP 服務器的端口 25,您將無法發送電子郵件。

發送測試郵件

事實上,我們現在可以從命令行發送和接收電子郵件。如果您的 Ubuntu 服務器有一個名為 的用戶帳戶user1,則該用戶的電子郵件地址是user1@yourdomain.com. 您可以向 root 用戶發送電子郵件root@yourdomain.com。您還可以向 Gmail、雅虎郵箱或任何其他電子郵件服務發送電子郵件。

安裝 Postfix 時,會在 中放置一個 sendmail 二進製文件/usr/sbin/sendmail,它與傳統的 Sendmail SMTP 服務器兼容。您可以使用 Postfix 的 sendmail 二進製文件向您的 Gmail 帳戶發送測試電子郵件,如下所示:

echo "test email" | sendmail your-account@gmail.com

在這個簡單的命令中,sendmail 從標準輸入中讀取一封郵件,並將“測試電子郵件”作為郵件正文,然後將此郵件發送到您的 Gmail 帳戶。您應該能夠在 Gmail 收件箱(或垃圾郵件文件夾)中收到此測試電子郵件。可以看到,雖然我們沒有指定發件人地址,但Postfix會自動為發件人地址附加一個域名。那是因為我們在安裝Postfix的時候在系統郵件名中添加了我們的域名。

注意:From:域名是由myoriginPostfix中的參數決定的,而不是由myhostname參數決定的。

您可以嘗試回复此測試電子郵件,看看 Postfix 是否可以接收電子郵件。從您的域發送的電子郵件很可能被標記為垃圾郵件。現在不用擔心。我們將在本系列教程的後面部分解決這個問題。

每個用戶的收件箱位於/var/spool/mail/<username>/var/mail/<username>文件。如果您不確定在哪裡查找收件箱,請使用此命令。

postconf mail_spool_directory

Postfix 郵件日誌存儲在/var/log/mail.log.

步驟2 – 更改 Postfix 配置

現在您可以調整軟件包安裝過程中沒有提示您進行的一些設置。Postfix 的許多配置設置都在/etc/postfix/main.cf文件中定義。您可以使用 Postfix 的postconf命令來查詢或設置配置設置,而不是直接編輯此文件。

首先,設置非 root Ubuntu 用戶郵箱的位置。在本指南中,我們將使用Maildir格式,它將消息分成單獨的文件,然後根據用戶操作在目錄之間移動。本指南中未涵蓋的替代選項是mbox格式,它將所有消息存儲在一個文件中。

home_mailbox變量設置為Maildir/. 稍後,您將在用戶的主目錄中以該名稱創建一個目錄結構。home_mailbox鍵入以下內容進行配置:

sudo postconf -e 'home_mailbox= Maildir/'

如何修改附件大小限制,默認情況下,附件不能大於10MB,由message_size_limit參數指示。

若 message_size_limit = 0 ,則沒有限制

查詢附件容量限制

postconf | grep message_size_limit

要允許大小為 50MB 的附件,請運行以下命令。

postconf -e message_size_limit=52428800

當使用(edit) 選項調用postconf命令時-e,它會嘗試message_size_limit在 Postfix 主配置文件 ( /etc/postfix/main.cf) 中查找參數( ) 並更改其值。如果找不到該參數,則會在文件末尾添加該參數。

請注意,message_size_limit不應大於mailbox_size_limit,否則 Postfix 可能無法接收電子郵件。mailbox_size_limit上游 Postfix 包中的默認值為51200000 字節(約 48MB)。在 Ubuntu 上,默認值設置為 0,可以看到

postconf | grep mailbox_size_limit

設置 Postfix 主機名

默認情況下,Postfix SMTP 服務器使用操作系統的主機名。但是,操作系統主機名可能會更改,因此最好直接在 Postfix 配置文件中設置主機名。使用命令行文本編輯器(例如 Nano)打開 Postfix 主配置文件。

sudo nano /etc/postfix/main.cf

找到myhostname參數並設置mail.yourdomain.com為值。不建議將頂級域yourdomain.com用作myhostname. 從技術上講,您可以使用頂點域,但它會在本系列教程的後續部分中產生問題。

myhostname = mail.yourdomain.com

保存並關閉文件。(要在 Nano 文本編輯器中保存文件,請按Ctrl+O,然後按Enter確認。要退出,請按Ctrl+X。)重新啟動 Postfix 以使更改生效。

創建電子郵件別名

在生產環境中操作郵件服務器時,您應該配置某些必需的別名。您可以在/etc/aliases文件中添加電子郵件別名,該文件是使用 Sendmail 兼容格式的特殊 Postfix 查找表文件。

sudo nano /etc/aliases

默認情況下,此文件中只有幾行。


# See man 5 aliases for format
postmaster:    root
clamav: root

更新別名單

sudo newaliases

僅使用 IPv4

默認情況下(安裝過程會詢問),Postfix 同時使用 IPv4 和 IPv6 協議,如下所示:

postconf inet_protocols

如果您的郵件服務器沒有公共 IPv6 地址,最好在 Postfix 中禁用 IPv6 以防止不必要的 IPv6 連接。只需運行以下命令即可在 Postfix 中禁用 IPv6。

sudo postconf -e "inet_protocols = ipv4"

接下來,設置virtual_alias_maps表的位置,將任意電子郵件帳戶映射到 Linux 系統帳戶。運行以下命令,將表位置映射到名為 的哈希數據庫文件/etc/postfix/virtual

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

現在您已經在文件中定義了虛擬地圖文件的位置main.cf,您可以創建文件本身並開始將電子郵件帳戶映射到 Linux 系統上的用戶帳戶。使用您喜歡的文本編輯器創建文件;在這個例子中,我們將使用nano

sudo nano /etc/postfix/virtual

列出您希望接收電子郵件的所有地址,然後是一個空格和您希望將郵件發送到的 Linux 用戶。

例如,如果您希望在將這些電子郵件發送給rei Linux 用戶,您可以像這樣設置您的文件:

contact@example.com admin@example.com

contact@gundam.com.tw rei@gundam.com.tw
admin@gundam.com.tw rei@gundam.com.tw

將所有地址映射到適當的服務器帳戶後,保存並關閉文件。如果您使用過nano,請按CTRL + XY、 來執行此操作ENTER

通過鍵入以下內容應用映射:

sudo postmap /etc/postfix/virtual

重新啟動 Postfix 進程以確保您的所有更改都已應用:

sudo systemctl restart postfix

使用 UFW 配置防火牆。默認情況下,除非明確允許這些連接,否則此防火牆將阻止與服務器上服務的外部連接,因此您必須添加防火牆規則以允許 Postfix 例外。

您可以通過鍵入以下內容來允許連接到服務:

sudo ufw allow Postfix

這樣,Postfix 已配置好並準備好接受外部連接。但是,您還沒有準備好使用郵件客戶端對其進行測試。在安裝客戶端並使用它與發送到服務器的郵件進行交互之前,您需要對 Ubuntu 服務器的設置進行一些更改。

日後升級 Postfix

如果您運行sudo apt update,然後sudo apt upgrade,並且系統將升級 Postfix,則可能會提示您再次為 Postfix 選擇配置類型。這次您應該選擇No configuration保持當前的配置文件不變。

下一步

恭喜!現在您已經啟動並運行了一個基本的 Postfix 電子郵件服務器。您可以使用命令行發送純文本電子郵件和閱讀收到的電子郵件。在本教程系列的下一部分中,我們將學習如何安裝 Dovecot IMAP 服務器並啟用 TLS 加密,這將允許我們使用像 Mozilla Thunderbird 這樣的桌面郵件客戶端來發送和接收電子郵件。

接下來:如何在Ubuntu 20.04上安裝Dovecot

Leave a Reply

發佈留言必須填寫的電子郵件地址不會公開。