Zimbra 是開源界中最好用的郵件協作平台之一,在管理上也提供了許多實用指令方便管理者以 script 進行自動化操作,本文整理我較常使用的指令,提供分享。
前置作業
由於 Zimbra 所有的服務與程式都會以 zimbra 這個帳戶身份執行,因此在使用本文所有指令之前,請先切換帳戶身份後再開始執行
su zimbra 指令
或者,想要單次執行指令不想先做切換,又或是要放到 script 裡,可以使用另一種方式:
/bin/su - zimbra -c "指令"
指令列表
以下將分類整理不同對象的指令,其中的 user 請替換為您的帳戶,domain 請替換為您的網域名稱。
zmcontrol
# 查看所有服務狀態 zmcontrol status # 重啟所有服務 zmcontrol restart # 停止所有服務 zmcontrol stop # 啟動所有服務 zmcontrol start # 重啟 MTA 服務 zmmtactl restart # 重啟 LOG 服務 zmloggerctl restart # 重啟防毒與反垃圾郵件服務 zmamavisdctl restart # 重啟代理伺服器服務 zmproxyctl restart # 重啟統計資料服務 zmstatctl restart
zmlocalconfig
# 查看本機伺服器所有設定 zmlocalconfig # 查看本機伺服器單項設定 zmlocalconfig <設定> # 查看本機伺服器相關密碼 zmlocalconfig -s | grep ldap_amavis_password zmlocalconfig -s | grep ldap_nginx_password zmlocalconfig -s | grep ldap_postfix_password zmlocalconfig -s | grep ldap_replication_password zmlocalconfig -s | grep ldap_root_password zmlocalconfig -s | grep zimbra_ldap_password # 查看本機伺服器是否顯示來源 IP Header zmlocalconfig zimbra_http_originating_ip_header # 修改本機伺服器設定 zmlocalconfig -e <設定>=<數值> # 修改本機伺服器顯示來源 IP Header zmlocalconfig -e zimbra_http_originating_ip_header="X-Forwarded-For" # 查看 Zimbra-ldap 是否啟用 StartTLS zmlocalconfig | grep ldap | grep tls # 關閉 Zimbra-ldap 使用 StartTLS zmlocalconfig -e ldap_starttls_required=false zmlocalconfig -e ldap_starttls_supported=0 # 允許未信任的 SSL 憑證 zmlocalconfig -e ssl_allow_untrusted_certs=true # 設定高品質檔案預覽器 zmlocalconfig -e oo_linux_install_path=/usr/bin/soffice zmcontrol restart # 設定預設檔案預覽 zmlocalconfig -e oo_linux_install_path=/HIGHFIDELITYOFF zmcontrol restart
zmprov
# 查看信任 IP zmprov gcf zimbraMailTrustedIP # 修改信任 IP (若一次要設定多個,在後方串接) zmprov mcf +zimbraMailTrustedIP 127.0.0.1 +zimbraMailTrustedIP 192.168.1.200 # 查看中繼網域轉發設定 zmprov gd <域名> zimbraMailCatchAllAddress zmprov gd <域名> zimbraMailCatchAllForwardingAddress zmprov gd <域名> zimbraMailTransport # 修改中繼網域轉發設定 (可以使用 smtp 或 lmtp) zmprov md <域名> zimbraMailCatchAllAddress @<域名> zmprov md <域名> zimbraMailCatchAllForwardingAddress @<域名> zmprov md <域名> zimbraMailTransport lmtp:<目標LMTPServer:Port> # 檢視所有網域 zmprov gad # 修改網域名稱 zmprov -l rd <原有域名> <新的域名> # 停用舊版 SSL/TLS 與加密協定 zmprov mcf -zimbraReverseProxySSLProtocols TLSv1 zmprov mcf -zimbraReverseProxySSLProtocols TLSv1.1 zmprov mcf -zimbraReverseProxySSLProtocols TLSv1.2 zmprov modifyConfig zimbraReverseProxySSLCiphers '!AES128-SHA256:!AES128-SHA:!CAMELLIA256-SHA:!CAMELLIA128-SHA!AES256-SHA:!AES256-SHA256:!AES256-GCM-SHA384:!AES128-GCM-SHA256:!ADH:!eNULL:!aNULL:!DHE-RSA-AES256-SHA:!SSLv2:!MD5:!EXPORT:!DES:!PSK:!RC4:HIGH' # 外部驗證帳戶密碼失敗時嘗試本機驗證 zmprov md domain zimbraAuthFallbackToLocal TRUE # 取消外部 LDAP 繫結帳戶設定 zmprov md domain zimbraAuthLdapSearchBindDn "" zmprov md domain zimbraAuthLdapSearchBindPassword "" # 查看與修改 Webclient http 服務連接埠號 zmprov gs `zmhostname` | grep zimbraMailPort zmprov ms `zmhostname` zimbraMailPort '8081' # 查看與啟用 Web Admin Coneols https 服務連接埠 zmprov gs `zmhostname` | grep zimbraReverseProxyAdminEnabled zmprov ms `zmhostname` zimbraReverseProxyAdminEnabled TRUE # 查看與修改 Web Admin Coneols https 服務連接埠號 zmprov gs `zmhostname` | grep zimbraAdminProxy zmprov ms `zmhostname` zimbraAdminProxyPort '59091' # 變更對 LMTP 儲存時不經由 DNS 查詢而直接指向本機 zmprov ms mtaserver.com zimbraMtaLmtpHostLookup native zmprov mcf zimbraMtaLmtpHostLookup native # 清除 Zimlet 快取 zmprov flushCache zimlet # 清除佈景主題快取 zmprov flushCache skin # 清除語言檔快取 zmprov flushCache locale # 啟用 CBPolicyd 服務 zmprov ms `zmhostname` +zimbraServiceInstalled cbpolicyd zmprov ms `zmhostname` +zimbraServiceEnabled cbpolicyd # 查看 SMTP 寄信主機連接埠號 zmprov gs `zmhostname` | grep zimbraSmtpPort # 變更 SMTP 寄信主機連接埠號 zmprov ms `zmhostname` zimbraSmtpPort 26 # 查看外部轉信主機設定 zmprov gcf zimbraMTARelayHost zmprov gcf zimbraMTAFallbackRelayHost # 修改外部轉信主機設定 zmprov mcf zimbraMtaRelayHost <轉信主機位址>:<轉信主機連接埠> zmprov mcf zimbraMtaFallbackRelayHost <轉信主機位址>:<轉信主機連接埠> # 查看已啟用與已安裝服務 zmprov -l gs `zmhostname` | egrep -i 'serviceen|servicein' # 停用服務 (完成後記得重啟 Zimbra) zmprov -l ms `zmhostname` -zimbraServiceEnabled <服務名稱> # 查看 MTA 信任網路 zmprov gs `zmhostname` zimbraMtaMyNetworks # 設定 MTA 信任網路 (後面為範例,請不要照抄) zmprov ms `zmhostname` zimbraMtaMyNetworks '127.0.0.0/8 192.168.1.0/24 172.18.0.1 172.17.0.1 192.168.1.100' # 啟用 HTTP DoSFilter (單位 ms) zmprov mcf zimbraHttpDosFilterDelayMillis 20 # 設定 HTTP DoSFilter 每秒最大請求數 zmprov mcf zimbraHttpDosFilterMaxRequestsPerSec 30 # 設定 HTTP DoSFilter 信任清單 zmprov mcf zimbraHttpThrottleSafeIPs 10.1.2.3/32 zimbraHttpThrottleSafeIPs 192.168.4.0/24 # 新增 HTTP DoSFilter 信任清單上的主機 zmprov mcf +zimbraHttpThrottleSafeIPs 10.1.2.3/32 # 設定登錄失敗封鎖機制 (25 分鐘內 5 次登錄嘗試失敗後阻擋 IP,兩小時後解鎖 IP) zmprov mcf zimbraInvalidLoginFilterDelayInMinBetwnReqBeforeReinstating 25 zmprov mcf zimbraInvalidLoginFilterMaxFailedLogin 5 zmprov mcf zimbraInvalidLoginFilterReinstateIpTaskIntervalInMin 120 # 設定變更密碼連結頁面 zmprov mcf zimbraChangePasswordURL "https://mailserver.domain/h/changepass?skin=harmony" # 檢視公開服務通訊協定與連接埠 zmprov gcf zimbraPublicServiceHostname zmprov gcf zimbraPublicServicePort zmprov gcf zimbraPublicServiceProtocol # 設定公開服務通訊協定與連接埠 zmprov mcf zimbraPublicServiceHostname <zimbraserver.domain> zmprov mcf zimbraPublicServiceProtocol https zmprov mcf zimbraPublicServicePort 443 zmcontrol restart # 設定 Open Drive 介接 Nextcloud/ownCloud zmprov md <domain> zimbraDriveOwnCloudURL '<Nextcloud/ownCloud 首頁>' zmcontrol restart
zmprov dl
# 查看所有通訊群組清單 zmprov gadl # 建立動態通訊群組清單,同時設定 ldap 查詢字串 zmprov cddl <通訊群組清單名稱>@domain memberURL '<ldap>' zmprov cddl engineers@domain memberURL 'ldap:///??sub?(&(objectClass=zimbraAccount)(ZimbraAccountStatus=active))' # 建立動態通訊群組清單,同時設定 displayName 顯示名稱 zmprov cddl <通訊群組清單名稱>@domain displayName '<顯示名稱>' # 通訊群組清單更名 zmprov rdl <通訊群組清單名稱>@domain <新通訊群組清單名稱>@domain zmprov rdl engineers@domain engineers2@domain # 查看通訊群組清單屬性 zmprov gdl <通訊群組清單名稱>@domain zmprov gdl engineers@domain # 設定通訊群組清單在全域通訊錄 (GAL) 隱藏 zmprov mdl <通訊群組清單名稱>@domain zimbraHideInGal TRUE # 查看通訊群組清單成員 zmprov gdlm <通訊群組清單名稱>@domain zmprov gdlm engineers@domain # 查看通訊群組清單 zmprov gdl <通訊群組清單名稱>@domain zmprov gdl engineers@domain # 刪除通訊群組清單 zmprov ddl <通訊群組清單名稱>@domain zmprov ddl engineers@domain # 增加通訊群組清單成員 zmprov adlm <通訊群組清單名稱>@domain <加入的成員>@domain zmprov adlm engineers@domain user1@domain # 移除通訊群組清單成員 zmprov rdlm <通訊群組清單名稱>@domain <移除的成員>@domain zmprov rdlm engineers@domain user1@domain # 匯出通訊群組清單 zmprov gdlm <通訊群組清單名稱>@domain > dirstlist.txt zmprov gdlm edmlist1@domain > dirstlist.txt # 匯入通訊群組清單 for i in `cat dirstlist.txt | egrep -v '#|members'`;do zmprov adlm <通訊群組清單名稱>@domain.com $i;done for i in `cat dirstlist.txt | egrep -v '#|members'`;do zmprov adlm edmlist1@domain.com $i;done
zmprov account
# 查看帳戶屬性 zmprov ga user@domain zmprov ga user@domain <屬性名稱> zmprov ga user@domain description zmprov ga user@domain title zmprov ga user@domain zimbraMailTransport # 修改帳戶屬性 zmprov ma user@domain <屬性名稱> '<修改數值>' zmprov ma user@domain description '帳戶描述' zmprov ma user@domain title '資深工程師' # 指定外部 LDAP 驗證目標帳戶 zmprov ma user@domain zimbraAuthLdapExternalDn "uid=ldapuser,dc=domain,dc=com" # 移除外部 LDAP 驗證目標帳戶 zmprov ma user@domain zimbraAuthLdapExternalDn "" # 查看帳戶狀態 zmprov ga user@domain zimbraAccountStatus # 解除帳戶鎖定 (啟用) zmprov ma user@domain zimbraAccountStatus active # 帳戶鎖定 zmprov ma user@domain zimbraAccountStatus lock # 帳戶停用 (關閉) zmprov ma user@domain zimbraAccountStatus closed # 帳戶更名 zmprov ra user@domain user2@domain # 增加帳戶別名 zmprov aaa user@domain useralias@domain # 建立帳戶 zmprov ca user@domain password # 變更帳戶密碼 zmprov sp user@domain newpassword # 刪除帳戶 zmprov da user@domain # 列出指定網域的帳戶 zmprov -l gaa domain # 列出啟用中的帳戶 (sa 功能非常耗用記憶體,請審慎使用) zmprov -l sa '(zimbraAccountStatus=active)' # 列出啟用中的帳戶並排除系統帳戶 (sa 功能非常耗用記憶體,請審慎使用) zmprov -l sa '(&(objectClass=zimbraAccount)(ZimbraAccountStatus=active)(!(Name=*galsync*))(!(Name=*ham.*))(!(Name=*spam.*))(!(Name=*virus-quarantine.*))(!(Name=admin)))' # 列出所有系統管理員帳戶 zmprov gaaa # 建立額外的系統管理員帳戶 zmprov ca admin2@domain password zimbraIsAdminAccount TRUE # 設定偏好寄件使用位址 (例如別名) zmprov ma user@domain zimbraPrefFromAddress <郵件位址> # 列出帳戶別名 zmprov ga user@domain | grep zimbraMailAlias # 列出所有別名 (不包含系統帳戶) (sa 功能非常耗用記憶體,請審慎使用) zmprov sa -v '(objectClass=zimbraAccount)' | grep zimbraMailAlias | grep -v -E "galsync|quarantine|spam|root|postmaster" # 匯出帳戶篩選條件設定 (三個步驟) zmprov ga user@domain zimbraMailSieveScript > /tmp/user@domain.rules.txt sed -i -e "1d" user@domain.rules.txt sed -i -e 's/zimbraMailSieveScript: //g' user@domain.rules.txt # 匯入帳戶篩選條件設定 zmprov ma user@domain zimbraMailSieveScript "`cat user@domain.rules.txt`" # 匯出帳戶 HTML 簽名 (三個步驟) zmprov ga user@domain zimbraPrefMailSignatureHTML > /tmp/user@domain.signaturehtml.txt sed -i -e "1d" /tmp/user@domain.signaturehtml.txt sed 's/zimbraPrefMailSignatureHTML: //g' /tmp/sig/$NAME > /tmp/user@domain.signaturehtml.txt # 匯入帳戶 HTML 簽名 zmprov ma user@domain zimbraPrefMailSignatureHTML "`cat user@domain.signaturehtml.txt`" # 重建帳戶郵件索引,開始與狀態查閱 zmprov rim user@domain start zmprov rim user@domain status
zmprov cos
# 查看服務類別 (COS) 設定 zmprov gc <cos名稱> zmprov gc highleveluser # 擷取服務類別 (COS) ID 欄位 zmprov gc <cos名稱> | grep zimbraId: zmprov gc highleveluser | grep zimbraId: # 擷取服務類別 (COS) ID 欄位內容 zmprov gc <cos名稱> | grep zimbraId: | cut -d ' ' -f 2 zmprov gc highleveluser | grep zimbraId: | cut -d ' ' -f 2 # 檢視是否允許以高品質及原始格式預覽附件檔 zmprov gc <cos名稱> | grep zimbraFeatureViewInHtmlEnabled # 檢視附件檔索引設定 zmprov gc <cos名稱> | grep zimbraAttachmentsIndexingEnabled # 檢視外部資料來源設定 (type 欄位 cal/pop3/imap) zmprov gds user@domain # 建立外部資料來源,以 Gmail IMAP 為例 (建議密碼讓使用者至 WebUI 自行輸入,不要在 CLI 填入) zmprov cds user@domain imap "User - Gmail" zimbraDataSourceEmailAddress user@domain zimbraDataSourceEnabled TRUE zimbraDataSourceHost imap.gmail.com zimbraDataSourceUsername user zimbraDataSourcePassword password zimbraPrefFromAddress user@gmail zimbraPrefFromDisplay 'User Name' zimbraDataSourceConnectionType ssl zimbraDataSourcePort 993
zmmailbox
# 搜尋郵件 zmmailbox -z -m <帳戶> search -t message -l 100 "<搜尋字串>" zmmailbox -z -m user@domain search -t message -l 100 "in:inbox subject: 要搜尋的主旨" # 顯示郵箱已使用容量 zmmailbox -z -m user@domain gms # 匯出連絡人至 CSV (可用格式有 zimbra-csv / yahoo-csv / thunderbird-csv / outlook-2000-csv / outlook-2003-csv) zmmailbox -z -m user@domain -t 0 getRestURL "//contacts?fmt=outlook-2003-csv" zmmailbox -z -m user@domain -t 0 getRestURL "//其它通訊錄名稱?fmt=outlook-2003-csv" # 讀取篩選器設定 zmmailbox -z -m user@domain getFilterRules # 新增篩選器設定 zmmailbox -z -m user@domain addFilterRule '規則名稱:主旨郵件轉發' active any header 'subject' matches '符合的主旨' redirect 'manager@domain' # 修改篩選器設定 zmmailbox -z -m user@domain modifyFilterRule '規則名稱:主旨郵件轉發' active any header 'subject' matches '符合的主旨' redirect 'manager@domain' # 刪除篩選器設定 zmmailbox -z -m user@domain deleteFilterRule '規則名稱:主旨郵件轉發' # 將郵件檔案 (.eml / .msg) 匯入指定帳戶收件夾 zmmailbox -t 0 -z -m user@domain addMessage /inbox 1.eml zmmailbox -t 0 -z -m user@domain addMessage /測試信件夾 /tmp/user/*.eml # 將郵箱匯出為 tgz 壓縮檔 zmmailbox -z -m "user@domain" getRestURL "//?fmt=tgz" > /backup/user@domain.tar.gz # 從 tgz 壓縮檔匯入至郵箱 zmmailbox -z -t 0 -m "user@domain" postRestURL "//?fmt=tgz&resolve=reset" /backup/user@domain.tar.gz # 從 tgz 壓縮檔匯入至郵箱,使用 curl 避免 client.IO_ERROR (Read timed out) curl -k -H "Transfer-Encoding: chunked" -u admin:password -T "user@domain.tar.gz" -X POST "https://127.0.0.1:7071/service/home/user@domain/?fmt=tgz&resolve=skip" # 顯示指定帳戶資料夾狀況,如資料夾名稱、資料夾類型、數量、未讀、路徑...等等 zmmailbox -z -m "user@domain" gaf # 顯示指定帳戶資料夾名稱,只列出郵件功能的資料夾 zmmailbox -z -m "user@domain" gaf | awk '$2 ~/mess/ {print $5}' # 顯示指定帳戶資料夾 ID,只列出郵件功能的資料夾且指定名稱者,本例為收件、寄件、草稿匣 zmmailbox -z -m "user@domain" gaf | awk '$2 ~/mess/ {print $1, $5} ' | awk '/Sent|Inbox|Drafts/ {print $1} ' # 顯示指定帳戶資料夾 ID,排除垃圾郵件、聊天等功能的資料夾 zmmailbox -z -m "user@domain" gaf | awk '$2 ~/mess/ {print $1, $5} ' | awk '!/Chats|Junk/ {print $1} ' # 於指定帳戶下建立資料夾,本例為建立名為「測試」之郵件資料夾 # 選項 -V 可用參數 conversation / message / contact / appointment zmmailbox -z -m "user@domain" cf -V message "/測試"
zmzimletctl
# 部署 Zimlet zmzimletctl deploy <zimlet檔名> zmzimletctl deploy <zimlet_uc.zip>
others
# 查看郵件佇列 postqueue -p mailq # 查看郵件佇列 (依網域) qshape hold # 重送佇列中的郵件 postqueue -f # 刪除佇列中的郵件 postsuper -d ALL # 立即同步 GAL 全域通訊錄 zmgsautil forceSync -a galsync@domain -n InternalGAL # 郵件狀況查詢 zmmsgtrace -s '<寄件者郵箱>' zmmsgtrace -s 'user@domain' zmmsgtrace -r '<收件者郵箱>' zmmsgtrace -r 'user@gmail.com' # 列出所有帳戶狀況總覽 zmaccts # 匯出 LDAP 伺服器所有資料 ldapsearch -h <Server IP> -x -D "uid=zimbra,cn=admins,cn=zimbra" -w <ldap_root_password> > /tmp/ldap_export.ldif ldapsearch -h 192.168.20.100 -x -D "uid=zimbra,cn=admins,cn=zimbra" -w hjf3jgc > /tmp/ldap_export.ldif # 匯入 LDAP 伺服器所有資料 ldapadd -h <Server IP> -x -c -D "uid=zimbra,cn=admins,cn=zimbra" -w <ldap_root_password> < /tmp/ldap_expore.ldif ldapadd -h 192.168.20.100 -x -c -D "uid=zimbra,cn=admins,cn=zimbra" -w hjf3jgc < /tmp/ldap_export.ldif # 列出所有 Postfix 設定內容 postconf # 設定所有郵件備份 postconf -e always_bcc=archivebox@domain # 查看所有郵件備份設定 postconf always_bcc # 修正權限問題 zmcontrol stop sudo /opt/zimbra/libexec/zmfixperms zmcontrol start # 伺服器更名 (在要變更名稱的伺服器上執行) /opt/zimbra/libexec/zmsetservername -n '<新伺服器名稱>' /opt/zimbra/libexec/zmsetservername -n 'mailserver.domain' # 檢視所有憑證資訊 zmcertmgr viewdeployedcrt all
參考資料
- Zimbra :: Tech Center
https://wiki.zimbra.com/wiki/Main_Page
- Zimbra Collaboration Administrator Guide
https://zimbra.github.io/adminguide/latest/