如何使用 iRedMail 在 Ubuntu 20.04.3配置郵件主機


標籤: ,

使用過舊或太新的Ubuntu會在一開始就被逼退,建議用Ubuntu 20.04.3版

什麼是 iRedMail?

iRedMail 是一個 shell 腳本,它會在您的 Linux/BSD 服務器上自動安裝和配置所有必要的郵件服務器組件,從而消除手動安裝和配置。使用 iRedMail,您可以在基於 Web 的管理面板中輕鬆創建無限的郵箱和無限的郵件域。郵箱可以存儲在 MariaDB/MySQL、PostgreSQL 數據庫或 OpenLDAP 中。以下是 iRedMail 會自動安裝和配置的開源軟件列表。

  • Postfix SMTP 服務器
  • Dovecot IMAP 服務器
  • Nginx web 服務器為管理面板和 webmail 提供服務
  • OpenLDAP、MySQL/MariaDB 或 PostgreSQL 用於存儲用戶信息
  • 用於 DKIM 簽名和驗證的 Amvised-new
  • SpamAssassin 用於反垃圾郵件
  • ClamAV 用於反病毒
  • Roundcube 網絡郵件
  • SOGo群件,提供網絡郵件、日曆(CalDAV)、通訊錄(CardDAV)、任務和ActiveSync服務。
  • 用於保護 SSH 的 Fail2ban
  • mlmmj 郵件列表管理器
  • Netdata服務器監控
  • 用於灰名單的 iRedAPD Postfix 策略服務器

前置作業:選擇合適的託管服務提供商併購買域名

筆者運用ESXi虛擬主機建置,域名則是到PCHOME註冊並dns託管

強烈建議建置前請先訪問:如何提高電子郵件的可送達性

步驟1:配置主機名

通過SSH登錄您的服務器,然後運行以下命令來更新現有軟件包。

sudo apt update
sudo apt upgrade -y

使用以下命令為您的服務器設置完全限定域名 (FQDN)。

sudo hostnamectl set-hostname mail.your-domain.com

我們還需要/etc/hosts使用像 Nano 這樣的命令行文本編輯器來更新文件。

sudo nano /etc/hosts

例:127.0.0.1 mail.gundam.com.tw

保存並關閉文件。(要在 Nano 文本編輯器中保存文件,請按Ctrl+O,然後按Enter確認。要關閉文件,請按Ctrl+X=>Y=>Enter。)

要查看更改,請重新登錄,然後運行以下命令以查看您的主機名。

hostname -f

步驟2:在 Ubuntu 20.04 上使用 iRedMail 設置郵件服務器

運行以下命令從其 Github 存儲庫下載最新版本的 iRedMail 腳本安裝程序。

sudo wget https://github.com/iredmail/iRedMail/archive/1.4.2.tar.gz

解壓縮文件

sudo tar xvf 1.4.2.tar.gz

進入目錄

cd iRedMail-1.4.2

iRedMail.sh腳本添加可執行權限。

sudo chmod +x iRedMail.sh

接下來,使用 sudo 權限運行 Bash 腳本。

sudo bash iRedMail.sh
將出現郵件服務器設置嚮導。使用 Tab 鍵選擇Yes,然後按 Enter。

下一個屏幕將要求您選擇郵件存儲路徑。您可以使用默認路徑:/var/vmail,因此只需按Enter

然後選擇是否要運行 Web 服務器。強烈建議您選擇運行 Web 服務器,因為您需要基於 Web 的管理面板來添加電子郵件帳戶。此外,它還允許您訪問 Roundcube 網絡郵件。默認情況下,Nginx Web 服務器處於選中狀態,因此您只需按Enter。(星號表示該項目已被選中。)

然後選擇電子郵件帳戶的存儲後端。選擇一個你熟悉的。本教程選擇了 MariaDB。按上下箭頭鍵並按空格鍵進行選擇。

如果您選擇了 MariaDB 或 MySQL,那麼您將需要設置 MySQL 根密碼。

接下來,輸入您的第一個郵件域。您可以稍後在基於 Web 的管理面板中添加其他郵件域。本教程假設您需要一個電子郵件帳戶,如john.doe@your-domain.com。在這種情況下,您需要在此處輸入your-domain.com,不帶子域。不要在您的域名後按空格鍵。我認為 iRedMail 會將空格字符與您的域名一起復制,這可能會導致安裝失敗。

接下來,為郵件域管理員設置密碼。

選擇可選組件。默認情況下,選擇 4 個項目。如果您喜歡使用 SOGo 群件(網絡郵件、日曆、地址簿、ActiveSync),則按向下箭頭鍵和空格鍵進行選擇。按Enter到下一個屏幕。

現在您可以查看您的配置。鍵入Y以開始安裝所有郵件服務器組件。

在安裝結束時,選擇y使用 iRedMail 提供的防火牆規則並重新啟動防火牆。

現在 iRedMail 安裝完成。您將收到網絡郵件 URL、網絡管理面板和登錄憑據的通知。該iRedMail.tips文件包含有關 iRedMail 服務器的重要信息。

********************************************************************
* URLs of installed web applications:
*
* - Roundcube webmail: https://mail.gundam.com.tw/mail/
* - SOGo groupware: https://mail.gundam.com.tw/SOGo/
* - netdata (monitor): https://mail.gundam.com.tw/netdata/
*
* - Web admin panel (iRedAdmin): https://mail.gundam.com.tw/iredadmin/
*
* You can login to above links with below credential:
*
* - Username: postmaster@gundam.com.tw
* - Password: **********
*
*
********************************************************************
* Congratulations, mail server setup completed successfully. Please
* read below file for more information:
*
*   - /home/rei/iRedMail-1.4.2/iRedMail.tips
*
* And it's sent to your mail account postmaster@gundam.com.tw.
*
********************* WARNING **************************************
*
* Please reboot your system to enable all mail services.
*
********************************************************************

重啟你的 Ubuntu 20.04 服務器。

sudo shutdown -r now

一旦您的服務器重新上線,您就可以訪問 Web 管理面板。

https://mail.your-domain.com/iredadmin/

請注意,在上述 URL 中,訪問管理面板的子目錄是/iredadmin/,而不是/iredmail/。並且因為它使用自簽名 TLS 證書,所以您需要在 Web 瀏覽器中添加安全例外。

第 5 步:安裝 Let’s Encrypt TLS 證書

步驟3:取得網站安全性證書

首先,通過 SSH 再次登錄您的服務器並運行以下命令在 Ubuntu 20.04 上安裝 Let’s Encrypt (certbot) 客戶端。

sudo apt install certbot

iRedMail 已經在默認的 Nginx 虛擬主機中配置了 TLS 設置,所以這裡我推薦使用 webroot 插件而不是 nginx 插件來獲取證書。運行以下命令。用您的實際數據替換紅色文本。

sudo certbot certonly --webroot --agree-tos --email you@example.com -d mail.your-domain.com -w /var/www/html/

當它詢問您是否要接收來自 EFF 的通訊時,您可以選擇“否”。

如果一切順利,您將看到以下文本,表明您已成功獲取 TLS 證書。您的證書和鏈已保存在/etc/letsencrypt/live/mail.your-domain.com/目錄中。

如何續訂 TLS 證書

9Let’s Encrypt 頒發的 TLS 證書的有效期僅為 90 天,設置 Cron 作業以自動更新證書很重要。您可以運行以下命令來更新證書。

sudo certbot renew -w /var/www/html/

您可以使用該--dry-run選項來測試續訂過程,而不是進行真正的續訂。

sudo certbot renew -w /var/www/html/ --dry-run

如果您在更新 TLS 證書時看到以下錯誤。

The client lacks sufficient authorization :: Invalid response

然後你需要創建隱藏目錄。

sudo mkdir -p /var/www/html/.well-known/acme-challenge

並設置www-data為 webroot 的所有者。

sudo chown www-data:www-data /var/www/html/ -R

此外,編輯 SSL 虛擬主機,添加以下幾行。

sudo nano /etc/nginx/sites-enabled/00-default-ssl.conf
    location ~ /.well-known/acme-challenge {
      root /var/www/html/;
      allow all;
    }
iredmail letsencrypt renew

保存並關閉文件。測試 Nginx 配置並重新加載。

sudo nginx -t
sudo systemctl reload nginx

創建 Cron 作業

如果現在試運行成功,您可以創建 Cron 作業來自動更新證書。只需打開 root 用戶的 crontab 文件。

sudo crontab -e

然後在文件底部添加以下行。

@daily certbot renew -w /var/www/html/ --quiet && systemctl reload postfix dovecot nginx

TLS證書獲取失敗

如果 certbot 無法獲取 TLS 證書,可能是因為您的 DNS 記錄沒有傳播到 Internet。根據您使用的域註冊商,您的 DNS 記錄可能會立即傳播,也可能需要長達 24 小時才能傳播。您可以訪問https://dnsmap.io,輸入您的郵件服務器的主機名 ( mail.your-domain.com) 以檢查 DNS 傳播。

如果 certbot 無法獲取證書並且您看到以下消息,

IMPORTANT NOTES:
 - The following errors were reported by the server:

   Domain: mail.gundam.com.tw
   Type:   connection
   Detail: Fetching
   http://mail.gundam.com.tw/.well-known/acme-challenge/YhkWPumFFj-v8v3OAqY9Se5mChhO92X1TbFXNHdmqYY:
   Timeout during connect (likely firewall problem)

   To fix these errors, please make sure that your domain name was
   entered correctly and the DNS A/AAAA record(s) for that domain
   contain(s) the right IP address. Additionally, please check that
   your computer has a publicly routable IP address and that no
   firewalls are preventing the server from communicating with the
   client. If you're using the webroot plugin, you should also verify
   that you are serving files from the webroot path you provided.
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.

測試Nginx配置

sudo nginx -t

如果測試成功,請重新加載 Nginx 以使更改生效。

sudo systemctl reload nginx

再次運行以下命令獲取TLS證書。用您的實際數據替換紅色文本。

sudo certbot certonly --webroot --agree-tos --email you@example.com -d mail.your-domain.com -w /var/www/html/

步驟4:

在 Nginx 中安裝證書

獲得TLS證書後,讓我們配置Nginx Web服務器以使用它。編輯 SSL 模板文件。

sudo nano /etc/nginx/templates/ssl.tmpl

找到以下兩在行頭加井字號

# ssl_certificate /etc/ssl/certs/iRedMail.crt; 
# ssl_certificate_key /etc/ssl/private/iRedMail.key;

添加這兩行:

ssl_certificate /etc/letsencrypt/live/mail.your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mail.your-domain.com/privkey.pem;

保存並關閉文件。然後測試nginx配置並重新加載。

sudo nginx -t
sudo systemctl reload nginx

再次訪問 iRedMail 管理面板,您的 Web 瀏覽器將不會再警告您,因為 Nginx 現在正在使用有效的 TLS 證書。

https://mail.your-domain.com/iredadmin/

管理介面簡單易懂,請先建立一個新的電子郵件帳戶

帳號預設為:postmaster@domain_name

步驟5:

在 Postfix 和 Dovecot 中安裝 TLS 證書

我們還需要配置 Postfix SMTP 服務器和 Dovecot IMAP 服務器以使用 Let’s Encrypt 頒發的證書,以便桌面郵件客戶端不會顯示安全警告。編輯 Postfix 的主要配置文件

sudo nano /etc/postfix/main.cf

找到以下 3 行。(第 95、96、97 行)。

smtpd_tls_key_file = /etc/ssl/private/iRedMail.key 
smtpd_tls_cert_file = /etc/ssl/certs/iRedMail.crt 
smtpd_tls_CAfile = /etc/ssl/certs/iRedMail.crt

將它們替換為:

smtpd_tls_key_file = /etc/letsencrypt/live/mail.your-domain.com/privkey.pem
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.your-domain.com/cert.pem
smtpd_tls_CAfile = /etc/letsencrypt/live/mail.your-domain.com/chain.pem

保存並關閉文件。然後重新加載Postfix。

sudo systemctl reload postfix

接下來,編輯 Dovecot 的主要配置文件。

sudo nano /etc/dovecot/dovecot.conf

找到以下 2 行,在行頭添加井字號。(第 47、48 行)

# ssl_cert = </etc/ssl/certs/iRedMail.crt 
# ssl_key = </etc/ssl/private/iRedMail.key

在下方添加這兩行:

ssl_cert = </etc/letsencrypt/live/mail.your-domain.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.your-domain.com/privkey.pem

保存並關閉文件。然後重新加載 dovecot。

sudo systemctl reload dovecot

從現在開始,桌面郵件用戶將看不到安全警告。

步驟 6:檢查端口 25(出站)是否被阻止

您的 ISP 或託管服務提供商不會阻止到您服務器的端口 25 的傳入連接,這意味著您可以接收來自其他郵件服務器的電子郵件。但是,許多 ISP/託管服務提供商會阻止與其他郵件服務器的端口 25 的傳出連接,這意味著您無法發送電子郵件。

如果您的電子郵件沒有到達您的其他電子郵件地址(例如 Gmail),請在您的郵件服務器上運行以下命令以檢查端口 25(出站)是否被阻止。

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/託管服務提供商為您打開它。

步驟7:發送測試電子郵件

使用新增的郵件帳戶 ( username@your-domain.com )登錄到 mail 面板。

撰寫測試郵件並發送看看

https://your-Servername/mail

預設是沒有共用通訊錄、行事曆的,筆者追加了Sogo套件

sudo apt-get install sogo

安裝完可直接開啟瀏覽器訪問,但使用Outlook的環境下仍然找不到共用通訊錄、行事曆

https://your-Servername/sogo

Fail2ban 阻止您自己的 IP 地址

如果您多次登錄郵件服務器出錯,則郵件服務器上的Fail2ban服務可能會屏蔽您的IP地址。您可以通過編輯jail.local文件將您的 IP 地址添加到白名單。

sudo nano /etc/fail2ban/jail.local

將您自己的 IP 地址添加到如下所示的忽略列表中。將 12.34.56.78 替換為您的真實 IP 地址。

ignoreip = Your IP 127.0.0.1 127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16

保存並關閉檔案

sudo systemctl restart fail2ban

啟用 SMTPS 端口 465

如果您打算使用 Microsoft Outlook 客戶端,那麼您需要在 Postfix SMTP 服務器中啟用 SMTPS 端口 465 以進行電子郵件提交

檢查各種服務是否正在運行。

systemctl status postfix 

systemctl status dovecot 

systemctl status nginx 

systemctl status mariadb 

systemctl status clamav-daemon 

systemctl status amavis

如果啟用了防火牆,則應在防火牆中打開以下端口。

請注意不要忽略硬體防火牆也要設定

HTTP 端口:80 
HTTPS 端口:443 
SMTP 端口:25
提交端口:587(如果您要使用 Microsoft Outlook 郵件客戶端,則為 465)
IMAP 端口:143 和 993

結語

郵件主機建立的過程牽一髮動全身,看到這裡又得研讀防火牆設定。

Leave a Reply

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *