2024年2月12日 星期一

[技術文章] 將 Zimbra OSE 8.8.15 執行系統由 Ubuntu Server 18.04 原地升級至 20.04

   




對於仍然在使用 Ubuntu Server 18.04 運作 Zimbra OSE 8.8.15 版本的朋友,應儘早將作業系統發行版本升級至 20.04 以上,以免因 18.04 進入 EOL (End of Life) 後可能有無法修補的漏洞帶來資安風險。

升級 Ubuntu Server 18.04 至 20.04 本身不是難事,而是難在安裝於其上的 Zimbra 伺服器。本文整理 Zimbra OSE 8.8.15 版本由 Ubuntu Server 18.04 升級至 20.04 的完整過程,提供參考。







步驟一:備份重要設定

以將目前系統的相關密碼顯示出來,包括 Ldap、Nginx、等等系統重要密碼,請於執行後將結果複製存好。
# 切換至 Zimbra 帳戶
su - zimbra
zmlocalconfig -s | grep -i password


接著將系統組態檔備份出來至獨立路徑,以備後面使用。
# 以 root 帳戶執行
mkdir -p /opt/{zimbra_backup/.saveconfig,ldap_backup} 
chown zimbra:zimbra /opt/{zimbra_backup,ldap_backup} -R
cp -pvr /opt/zimbra/.install_history /opt/zimbra_backup/.saveconfig/.install_history
cp -pvr /opt/zimbra/conf/localconfig.xml /opt/zimbra_backup/.saveconfig/localconfig.xml
apt list --installed | grep -i 'zimbra-' | cut -d'/' -f1 > /opt/zimbra_backup/.saveconfig/.installedPackages

# 切換至 Zimbra 帳戶
su - zimbra

# -c 是匯出組態資料庫, -a 是存取記錄資料庫, 沒加是主資料庫
/opt/zimbra/libexec/zmslapcat -c /opt/ldap_backup/
/opt/zimbra/libexec/zmslapcat -a /opt/ldap_backup/
/opt/zimbra/libexec/zmslapcat /opt/ldap_backup/










步驟二:升級作業系統發行版本

將 Ubuntu Server 18.04 升級至 20.04
# 以 root 帳戶執行
apt update
apt upgrade
apt dist-upgrade
reboot

# 重開機完成後,切換至 Zimbra 帳戶以停止相關服務
su - zimbra
zmcontrol stop
exit

# 建議進 screen 再做,以免斷線程序中止,並用 root 帳戶執行
screen
do-release-upgrade
reboot









步驟三:修復 Zimbra 系統

由於系統套件大量更新,因此需要執行 Zimbra OSE 8.8.15 for Ubuntu Server 20.04 的安裝程序,以進行系統的升級與修復。

請先下載好安裝檔並且以 sftp 上載至 /root 資料夾,下載連結為

# 解開安裝檔壓縮包
cd /root
tar -xvzf zcs-8.8.15_GA_4179.UBUNTU20_64.20211118033954.tgz
cd zcs-8.8.15_GA_4179.UBUNTU20_64.20211118033954

# 進行相關檢查、安裝與跳過產品安裝設定過程
./install.sh -s --skip-activation-check

# 注意!在這個階段請輸入 N 以免刪除先前既有郵件伺服器資料
Would you like to delete /opt/zimbra before installing? [N] N

# 程序完成後,將先前備份設定檔案放回來
cp -pvr /opt/zimbra_backup/.saveconfig/.install_history /opt/zimbra/.install_history  
cp -pvr /opt/zimbra_backup/.saveconfig/localconfig.xml /opt/zimbra/conf/localconfig.xml

# 重跑一次安裝設定程序
/opt/zimbra/libexec/zmsetup.pl

# 在安裝的設定選單,將以下填入前面步驟一匯出的對應密碼,再以 r 回到主選單即可,其它未列在下面的不需要填
******* +Ldap Admin password:                  Not Verified
******* +Ldap postfix password:                Not Verified
******* +Ldap amavis password:                 Not Verified
******* +Ldap nginx password:                  Not Verified
******* +Ldap Bes Searcher password:           Not Verified
******* +Bind password for postfix ldap user:  Not Verified
******* +Bind password for amavis ldap user:   Not Verified
******* +Admin Password                        UNSET


回到安裝主選單後,按下 a (apply) 當它跑完所有安裝程序後,Zimbra 的修復作業即已完成。






問題處理

多個服務無法啟動


升級完成後若有如下服務無法啟動的訊息,表示為憑證問題,請依下方程序進行處理。
# 以 Zimbra 帳戶檢視服務狀況
su - zimbra
zmcontrol status

Host mail.yourserver.com.tw
    amavis                  Running
    antispam                Running
    antivirus               Running
    dnscache                Running
    ldap                    Running
    logger                  Stopped
        zmlogswatchctl is not running
    mailbox                 Stopped
        zmmailboxdctl is not running.
    memcached               Running
    mta                     Running
    opendkim                Running
    proxy                   Running
    service webapp          Stopped
        zmmailboxdctl is not running.
    snmp                    Running
    spell                   Running
    stats                   Running
    zimbra webapp           Stopped
        zmmailboxdctl is not running.
    zimbraAdmin webapp      Stopped
        zmmailboxdctl is not running.
    zimlet webapp           Stopped
        zmmailboxdctl is not running.
    zmconfigd               Running

# 上述狀況為憑證問題,可先讓 Zimbra 重新產生自簽憑證以讓服務正常啟動
# 以 root 帳戶執行
cp -r /opt/zimbra/ssl/zimbra/commercial ~/ssl-backup
mv /opt/zimbra/mailboxd/etc/keystore /root/keystore.old
mv /opt/zimbra/conf/imapd.keystore /root/imapd.keystore 
su - zimbra
/opt/zimbra/bin/zmcertmgr createca -new
/opt/zimbra/bin/zmcertmgr createcrt -new -days 3650
/opt/zimbra/bin/zmcertmgr deployca
/opt/zimbra/bin/zmcertmgr deploycrt self
exit

# 上面程序如果執行到最後一行 deploycrt self 發生錯誤,請接著做
# 用 root 帳戶執行
mv /opt/zimbra/mailboxd/etc/keystore /root/keystore.old2 
rm /opt/zimbra/ssl/zimbra/jetty.pkcs12
su - zimbra
/opt/zimbra/bin/zmcertmgr createca -new
/opt/zimbra/bin/zmcertmgr createcrt -new -days 3650
/opt/zimbra/bin/zmcertmgr deployca
/opt/zimbra/bin/zmcertmgr deploycrt self
exit
reboot

# 重開機完成後,再次升級相關套件
apt update
apt upgrade
reboot



第三方套件 PostSRSd 服務無法啟動


嚴格來說它與 Zimbra 本身套件沒有直接關係,如果您的 Zimbra 沒有搭配 PostSRSd 使用,無需處理本段。

PostSRSd 是一個 Sender Rewriting Scheme (SRS,寄件人重寫機制),用來解決轉寄郵件時 SPF 驗證相關問題,最常出現在 Gmail 被退信機制上。
# 編輯 PostSRSd 服務定義檔
nano /lib/systemd/system/postsrsd.service

# 找到這行
ExecStartPre=/bin/sh -c '{ echo -n SRS_DOMAIN= ; postconf -h mydomain ; } >/run/postsrsd/default'
# 將它改為
ExecStartPre=/bin/sh -c '{ echo -n SRS_DOMAIN= ; /opt/zimbra/bin/postconf -h mydomain ; } >/run/postsrsd/default'

# 存檔離開後,重啟服務即可
systemctl daemon-reload 
systemctl restart postsrsd
systemctl status postsrsd









結論

如果可以,建議在由正式機另外複製出來的實驗環境先模擬過,沒有問題再到正式環境實作。

升級完成後應做好全面的檢視,至少包括以下項目:
  • 服務執行狀況 (zmcontrol status)
  • 相關設定是否均可開啟 (Admin Console)
  • 網頁郵件是否可以正常操作 (Web Client)
  • 測試 Web Client 收信與寄信
  • 測試 SMTP 協定寄信
  • 測試 POP3/IMAP 協定收信
  • 檢查郵件佇列狀況 (Admin Console - 監視)
  • 檢查 Zimbra 記錄 (zimbra.log)
  • 檢查作業系統記錄 (syslog / message / dmesg)



最後,即便升級到 Ubuntu Server 20.04,但 Zimbra OSE 8.8.15 已經在 2023/12/31 宣告終止支援,為了解決這個問題有兩條路可以選擇:
  1. 升級至 Zimbra NE (商用版) 9 或 10 版本
  2. 升級至 Zimbra OSE (開源版) 9 或 10 版本

商用版需要付費購買授權方可升級,而開源版自 9 起原廠不再提供二進位安裝檔,如有需要可自行編譯打包出來進行安裝;有關自行打包 9 或 10 開源版的作法,我會另外再寫一篇技術文章。







參考資料