實(shí)踐說明:基于AlmaLinux9,但適用場(chǎng)景不限于此。
文檔形成時(shí)期:2023年
因系統(tǒng)或軟件版本不同,構(gòu)建部署可能略有差異,但本文未做細(xì)分,對(duì)稍有經(jīng)驗(yàn)者應(yīng)不存在明顯障礙。
因軟件世界之復(fù)雜和個(gè)人能力之限,難免疏漏和錯(cuò)誤,歡迎指正。
選擇Mailu做為郵件服務(wù)器的幾個(gè)考慮
- 占用資源少而使用成本低;
- 基本功能相對(duì)較全而滿足使用;
- 部署和維護(hù)相對(duì)簡(jiǎn)易;
- 開發(fā)者有在積極維護(hù);
- Maiu2.0可以完全自動(dòng)化配置新域或添加新用戶。有同行提到不支持多域,其實(shí)是支持的,之前的一些版本中,應(yīng)該也是支持多域的,至少部署Mailu2.0后發(fā)現(xiàn)確實(shí)支持多域。
- 自主建設(shè)擁有更多的可操控性,部署完成后一般維護(hù)量比較少。
其實(shí)還有一些類似的優(yōu)秀的郵件服務(wù)套件,比如
Axigen Modoboa hMailServer Mail-in-a-Box Zimbra
Apache James
mailcow iRedMail Citadel
尤其推薦考慮下面這幾款:
Citadel Modoboa Zimbra mailcow Mailu
Citadel和Modoboa足夠全面,可以滿足大多數(shù)需求。
做為輕量級(jí)考慮,本次選擇了Mailu。
Mailu的介紹
Mailu 是一個(gè)簡(jiǎn)單但功能齊全的郵件服務(wù)器,由一組 Docker 鏡像組成。它是免費(fèi)軟件(就像免費(fèi)啤酒和自由言論一樣),歡迎建議和外部貢獻(xiàn)。該項(xiàng)目旨在為人們提供一個(gè)易于設(shè)置、易于維護(hù)且功能齊全的郵件服務(wù)器,同時(shí)不提供專有軟件或流行組件中常見的不相關(guān)功能。
主要特點(diǎn)包括:
標(biāo)準(zhǔn)電子郵件服務(wù)器、IMAP 和 IMAP+、SMTP 和帶有客戶端自動(dòng)配置配置文件的提交
高級(jí)電子郵件功能、別名、域別名、自定義路由
Web訪問、多個(gè)Webmail和管理界面
用戶特征、別名、自動(dòng)回復(fù)、自動(dòng)轉(zhuǎn)發(fā)、獲取帳戶
管理功能、全局管理員、公告、每個(gè)域委派、配額
安全性、強(qiáng)制 TLS、DANE、MTA-STS、Letsencrypt!、傳出 DKIM、防病毒掃描程序、Snuffleupagus、阻止惡意附件
反垃圾郵件、自動(dòng)學(xué)習(xí)、灰名單、DMARC 和 SPF、反欺騙
Freedom,所有 FOSS 組件,不包括跟蹤器。
硬件環(huán)境
參考:https://mailu.io/2.0/compose/requirements.html
Mailu 提供了多架構(gòu)映像,旨在在 linux/amd64、linux/arm64v8 或 linux/armv7 硬件上運(yùn)行,因此只要提供足夠的電源,它就可以在幾乎任何云服務(wù)器上運(yùn)行。
硬件注意事項(xiàng)
應(yīng)該確保您的硬件(虛擬或物理)與最新的 Linux 內(nèi)核兼容。所需的最小內(nèi)存和交換空間為:
使用防病毒軟件 (clamav) 時(shí):
3GB內(nèi)存
1GB 交換空間
實(shí)踐償試了1核1G,確實(shí)卡住了,不行,真的需要至少3GB內(nèi)存+1GB交換。
不使用防病毒軟件 (clamav) 時(shí):
1GB內(nèi)存
1GB 交換空間
采用1核2G,能勉強(qiáng)支撐,建議2核2G。
雖然不采用clamav,但是可以啟用Oletools,
Oletools scans documents in email attachements for malicious macros. It has a much lower memory footprint than a full-fledged anti-virus.
Oletools 掃描電子郵件附件中的文檔是否存在惡意宏。 與成熟的防病毒軟件相比,它的內(nèi)存占用要低得多。
系統(tǒng)環(huán)境
由于大多數(shù)測(cè)試都在 Debian 穩(wěn)定版上運(yùn)行,因此建議將其中之一用于基本系統(tǒng)。然而,Mailu 應(yīng)該能夠在任何docker官方支持的發(fā)行版上運(yùn)行。
實(shí)踐中采用了AlmaLinux9。
存儲(chǔ)環(huán)境
如果您選擇創(chuàng)建專用分區(qū),只需將其安裝到 /var/lib/docker. 您還可以創(chuàng)建一個(gè)單獨(dú)的分區(qū)(ext4是一個(gè)合理的默認(rèn)分區(qū))并將其掛載以/mailu存儲(chǔ)電子郵件數(shù)據(jù)。
Docker 支持AUFS over ext4和btrfs作為穩(wěn)定的存儲(chǔ)驅(qū)動(dòng)程序。
官方?jīng)]有提到容量大小,10個(gè)賬戶輕度使用條件下,至少應(yīng)規(guī)劃50GB,考慮到其它因素,推薦100GB。
網(wǎng)絡(luò)環(huán)境
Maiu將偵聽25、80、110、143、 443、465、587、993和995
如果主機(jī)有偵聽這些端口,應(yīng)該禁用,例如,在默認(rèn)的 Debian 安裝上:
apt-get autoremove --purge exim4 exim4-base
Docker 嚴(yán)重依賴iptables端口轉(zhuǎn)發(fā)。您應(yīng)該使用iptables-persistent(或其他系統(tǒng)上的任何等效工具)來管理持久性規(guī)則。如果你有足夠的勇氣切換到 nftables,你將不得不回滾,直到 Docker 發(fā)布官方支持或設(shè)置你自己的規(guī)則集。
實(shí)踐中采用AlmaLinux9和Firewalld防火墻。
向運(yùn)營(yíng)商申請(qǐng)取消電子郵件發(fā)送限制
電子郵件服務(wù)已經(jīng)發(fā)展很多年了,MTA之間仍然有采用25端口中繼,不幸地是,近些年運(yùn)營(yíng)商通常默認(rèn)是禁止25端口通信的,這需要申請(qǐng),并證明你有足夠的能力和措施管控好安全。
據(jù)我所知,在某些運(yùn)營(yíng)商申請(qǐng)是比較困難的,如果合作比較深,比如消費(fèi)較高,或另選擇非頭部運(yùn)營(yíng)商,是可能可行的。
域名和解析
設(shè)置DNS參考:https://mailu.io/2.0/dns.html#dns-setup
在開始使用 Mailu 之前,您必須至少設(shè)置一個(gè)域才能接收電子郵件。
A記錄:
mail.mydomain.com. IN A a.b.c.d
MX條目:
mydomain.com. IN MX 10 mail.mydomain.com.
PTR記錄:
For a mail system, it’s highly recommended to set up reverse DNS as well. That means, if your hostname mail.mydomain.com resolves to a.b.c.d, the IP a.b.c.d should also resolve back to the same hostname.
先設(shè)置正向解析,nslookup可查
nslookup mail.mydomain.com
a.b.c.d
然后配置反向 DNS
反向 DNS 必須由 IP 地址的“所有者”(通常是您的托管提供商)設(shè)置。大多數(shù)情況下你都可以用whois來查找。whois a.b.c.d
或
host -t PTR a.b.c.d
dig -t PTR a.b.c.d
nslookup -ty=PTR a.b.c.d
nslookup -q=PTR a.b.c.d
如果反向 DNS 設(shè)置不正確,大多數(shù)郵件系統(tǒng)都會(huì)將您的電子郵件視為垃圾郵件而拒絕。
DKIM/SPF 和 DMARC 條目
最后,您需要訪問管理儀表板(或使用 cli)來重新生成 DMARC、SPF 和 DKIM 記錄。
一旦 DNS 更改傳播到您的主機(jī)(并且 SSL/域規(guī)則設(shè)置正確),請(qǐng)?jiān)L問您的管理儀表板https://example.com/admin/domain/details/example.com。單擊重新生成密鑰并將所需的記錄添加到您的 DNS 提供商。如果您已啟用 DKIM/SPF/DMARC 但未添加這些條目,您的郵件可能無法送達(dá)。
安裝 Docker
Mailu 依賴于一些最新的 Docker 功能。因此,您應(yīng)該從官方存儲(chǔ)庫而不是發(fā)行版安裝 Docker。
Docker 網(wǎng)站有很多關(guān)于安裝的詳細(xì)說明。默認(rèn)配置應(yīng)該適合Mailu。
此外,如果您計(jì)劃使用 Compose 風(fēng)格,則必須按照Docker 網(wǎng)站上的說明安裝Compose v2。Compose 是 Docker 的管理工具,特別適合 Mailu 等多容器系統(tǒng)。
#添加倉庫
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
#安裝,To install the latest version, run:
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
#Start Docker.
sudo systemctl enable docker
sudo systemctl start docker
#Verify that the Docker Engine installation is successful by running the hello-world image.
sudo docker run hello-world
Docker Compose 設(shè)置
Mailu 會(huì)將其所有持久數(shù)據(jù)存儲(chǔ)在您選擇的路徑中(默認(rèn)情況下是/mailu),只需創(chuàng)建目錄并移動(dòng)到那里:
mkdir /mailu
cd /mailu
創(chuàng)建配置文件
Docker Compose 配置存儲(chǔ)在名為docker-compose.yml. 此外,Mailu 依賴于一個(gè)mailu.env文件來進(jìn)行各種設(shè)置。這兩個(gè)文件都可以由mailu 設(shè)置實(shí)用程序(https://setup.mailu.io/2.0/)生成。
信息填寫必要說明:
為信息安全,web客戶端地址目錄(默認(rèn)是/webmail)、web管理地址(默認(rèn)是/admin)和API地址(默認(rèn)是/api)都建議使用隨機(jī)字符串;
管理員賬號(hào)可不必變更;
客戶端路徑/webmail有roundcube和snappymail兩個(gè)選擇,大都推薦前者。
按提示填寫相關(guān)信息,生成docker-compose.yml和mailu.env后,有提供下載鏈接,
在大多數(shù)情況下,mailu.env的設(shè)置可以保持原樣。不過,可以通過修改此文件來完成一些高級(jí)設(shè)置或修改。
編排docker(安裝mailu)
docker compose -p mailu up -d
Before you can use Mailu, you must create the primary administrator user account. This should be mgbgld@pumdl.com. Use the following command, changing PASSWORD to your liking:
docker compose -p mailu exec admin flask mailu admin mgbgld pumdl.com PASSWORD
清理(卸載)
如果您發(fā)現(xiàn)配置不如意,當(dāng)前也不存在需要保留的數(shù)據(jù),可以清理掉,重頭再來
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
docker rmi $(docker images -q)
創(chuàng)建管理賬戶
最后,您需要一個(gè)管理員用戶帳戶。
您可以讓系統(tǒng)自動(dòng)創(chuàng)建它:使用環(huán)境變量,如管理員帳戶 - 自動(dòng)創(chuàng)建INITIAL_ADMIN_*中所述
否則,如果您不采用自動(dòng)方式,則需要立即手動(dòng)創(chuàng)建管理員帳戶:
docker compose exec admin flask mailu admin me example.net ‘password’
這將創(chuàng)建一個(gè)me@example.net以密碼password和管理權(quán)限命名的用戶。連接到 Web 管理界面并將密碼更改為強(qiáng)密碼。
至關(guān)重要的是,要么存在與POSTMASTER您的mailu.env電子郵件地址相同的用戶,要么您在登錄后記得用該名稱創(chuàng)建一個(gè)別名。如果不這樣做,就會(huì)出現(xiàn)各種奇怪的錯(cuò)誤!
使用外部反向代理
參考:https://mailu.io/2.0/reverse.html
所有選項(xiàng)都需要您修改docker-compose.yml和mailu.env文件。
以nginx做為反向代理可參考:https://mailu.io/2.0/reverse.html#have-mailu-web-frontend-listen-locally
實(shí)踐中,我并沒有采用外部nginx,而采用mailu部署的一個(gè)具備nginx功能的docker容器。
數(shù)據(jù)庫
默認(rèn)情況下 Mailu 使用 SQLite 數(shù)據(jù)庫。可以使用替代數(shù)據(jù)庫解決方案,例如 PostgreSQL 和 MySQL/MariaDB。
Mailu 數(shù)據(jù)庫包含靜態(tài)數(shù)據(jù)。SQLite足以滿足Mailu的任何部署場(chǎng)景。無需使用不同的數(shù)據(jù)庫系統(tǒng)。Mailu開發(fā)團(tuán)隊(duì)推薦使用SQLite。
實(shí)踐中,保持默認(rèn)的SQLite。
升級(jí)郵件服務(wù)器
可參考:https://mailu.io/2.0/maintain.html#upgrading-the-mail-server
暫未實(shí)踐
監(jiān)控郵件服務(wù)器(日志查看)
參考:https://mailu.io/2.0/maintain.html#monitoring-the-mail-server
cd /mailu; docker compose logs
動(dòng)態(tài)顯示最后100行:docker compose logs --tail=100 -f
顯示最后100行:docker compose logs --tail=100
管理外部 Let’s Encrypt 證書
參考:https://mailu.io/2.0/maintain.html#managing-of-external-let-s-encrypt-certificates
當(dāng)您不使用letsencryptMailu 的嵌入選項(xiàng)時(shí),您無法在目錄中使用它的符號(hào)鏈接功能letsencrypt/live。您應(yīng)該注意,每次續(xù)訂后,都會(huì)將新證書復(fù)制到容器中/mailu/certs,并重新加載容器中的nginx進(jìn)程。front
對(duì)于certbot,您可以編寫一個(gè)腳本作為部署鉤子執(zhí)行。例子:
#!/bin/sh
cp /etc/letsencrypt/live/domain.com/privkey.pem /mailu/certs/key.pem || exit 1
cp /etc/letsencrypt/live/domain.com/fullchain.pem /mailu/certs/cert.pem || exit 1
docker exec mailu-front-1 nginx -s reload
您將在 crontab 中使用的 certbot 命令如下所示:
52 0,12 * * * root /usr/bin/certbot renew --deploy-hook /path/to/script.sh
Mailu可能會(huì)自動(dòng)續(xù)簽SSL證書,實(shí)踐中,因?yàn)樵趦?nèi)網(wǎng),必須采用外部方案續(xù)簽,或者叫更換證書,但沒有采用certbot,而采用acme方案,自動(dòng)定期更換SSL證書和重載HTTP服務(wù),注意更換證書有好幾個(gè)地方,假設(shè)證書已經(jīng)獲取并拷貝到/mailu/certs/letsencrypt/archive/mailu/目錄,示例如下:
cd /mailu/certs/letsencrypt/archive/mailu/; mv -f domain.com.key privkey1.pem; mv -f fullchain.cer fullchain1.pem; mv -f ca.cer chain1.pem; mv -f domain.com.cer cert1.pem; /bin/cp -ap * ../mailu-ecdsa/; /bin/cp -ap fullchain1.pem ../../live/mailu/nginx-chain.pem; /bin/cp -ap fullchain1.pem ../../live/mailu-ecdsa/nginx-chain.pem; docker restart mailu-front-1
這可以寫到自動(dòng)計(jì)劃任務(wù)里面去。
后面會(huì)單獨(dú)整理acme跨機(jī)全自動(dòng)實(shí)現(xiàn)SSL證書續(xù)簽的文檔。
關(guān)于ACME方案的中文幫助:https://github.com/acmesh-official/acme.sh/wiki/%E8%AF%B4%E6%98%8E
網(wǎng)絡(luò)管理界面
當(dāng)在設(shè)置實(shí)用程序中啟用管理 GUI 或通過在mailu.env中手動(dòng)設(shè)置ADMIN=true時(shí),默認(rèn)情況下通過 URL
(https://domain.com/admin) 訪問管理 GUI 。前面若修改了uri地址,這里要做相應(yīng)的變更。要登錄管理 GUI,請(qǐng)輸入用戶的電子郵件地址和密碼。
多域支持:
垃圾郵件過濾
https://mailu.io/2.0/antispam.html#spam-filtering
Mailu 使用 Rspamd 進(jìn)行垃圾郵件過濾。Rspamd 是一個(gè)快速、免費(fèi)、開源的垃圾郵件過濾系統(tǒng)。
Rspamd 拒絕不合規(guī)的電子郵件和包含病毒的電子郵件。在Mailu中,Rspamd使用從0到15的評(píng)分范圍。以下值是默認(rèn)值,可以在Rspamd WebUI內(nèi)的選項(xiàng)卡配置下進(jìn)行更改:
分?jǐn)?shù)為 15 或更高的電子郵件將被拒絕。
分?jǐn)?shù)為 6 或更高的電子郵件將收到帶有垃圾郵件分?jǐn)?shù)的標(biāo)頭。
分?jǐn)?shù)為 4 或更高的電子郵件將被列入灰名單。
分?jǐn)?shù)為 3 或更低的電子郵件將被接受。
下面是反垃圾郵件功能統(tǒng)計(jì)圖:
測(cè)試
郵件可信任測(cè)試
在線測(cè)試網(wǎng)站:https://www.mail-tester.com/
遷移(備份)實(shí)例
SMTP 協(xié)議具有嵌入式重試機(jī)制和可以服務(wù)于單個(gè)域的多個(gè) MX,因此大多數(shù)遷移過程或維護(hù)過程不需要任何特定的照顧。
Mailu 嚴(yán)重依賴文件來存儲(chǔ)所有內(nèi)容,這有助于基于文件同步執(zhí)行的遷移過程。
建議的遷移過程包括設(shè)置一個(gè)新的備份服務(wù)器來刪除傳入的電子郵件(Mailu 未啟動(dòng)的)、同步兩個(gè)服務(wù)器、停止主服務(wù)器并啟動(dòng)備份服務(wù)器。然后,備份服務(wù)器切換為主 MX,并刪除舊服務(wù)器。
步驟:
- 準(zhǔn)備好你的新服務(wù)器,將你的docker-compose.yml、.env、基本配置文件復(fù)制到服務(wù)器上,這樣就可以開始配置Mailu了,不要啟動(dòng)Mailu
- 設(shè)置您的 DNS,使備份服務(wù)器成為該域的額外的、優(yōu)先級(jí)較低的 MX;如果您服務(wù)多個(gè)域,這可能會(huì)很復(fù)雜,在這種情況下,您可以簡(jiǎn)單地接受某些遠(yuǎn)程 MX 將重試幾分鐘,跳過此步驟
- 當(dāng)您的 DNS TTL 過期并且您的修改傳播時(shí),開始將您的data,dkim,mail等,同步到新服務(wù)器,重復(fù)直到僅同步幾個(gè)文件。
- 在舊服務(wù)器上停止Mailu,并在沒有進(jìn)程寫入文件時(shí)最后運(yùn)行一次rsync。
- 在新服務(wù)器上啟動(dòng)Mailu,生產(chǎn)應(yīng)該恢復(fù)正常。
- 將您的新服務(wù)器設(shè)置為域的主MX,如果您沒有設(shè)置其他MX,請(qǐng)確保您更改的MX、A、AAAA記錄正確。
基于上述遷移步驟,可以做成一個(gè)備份恢復(fù)方案。
另一個(gè)備份恢復(fù)方案是,備份所有容器,導(dǎo)出,導(dǎo)入,恢復(fù)數(shù)據(jù),啟動(dòng)容器實(shí)例,相應(yīng)的解析變更。
郵件客戶端
推薦一款,thunderbird,開源免費(fèi)
官網(wǎng):https://www.thunderbird.net/zh-CN/
android端:K-9 Mail,https://play.google.com/store/apps/details?id=com.fsck.k9
thunderbird的IMAP功能說明
在同步和存儲(chǔ)功能中,勾選“在此計(jì)算機(jī)上保留此賬戶所有文件夾中的消息”,那么,
一封郵件下載到 Thunderbird 并且在 Thunderbird中被刪除。(這封郵件一定會(huì)從本地計(jì)算機(jī)和郵件服務(wù)器中都被刪除)
每當(dāng) Thunderbird 啟動(dòng)時(shí),它會(huì)檢查 Thunderbird 郵件庫和郵件服務(wù)器之間的同步狀態(tài),然后執(zhí)行必要的同步(比如從服務(wù)器下載新郵件,從服務(wù)器刪除本地已經(jīng)刪除的郵件等)。文章來源:http://www.zghlxwxcb.cn/news/detail-786564.html
如果要在本地一直保留,或在云端一直保留,應(yīng)該改用POP3。文章來源地址http://www.zghlxwxcb.cn/news/detail-786564.html
到了這里,關(guān)于輕量級(jí)全功能開源免費(fèi)Mailu郵件服務(wù)器部署的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!