本篇文章更新時間:2022/04/17
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣 或 新台幣 贊助支持。
不得不說,現在滿喜歡用 Go 開發的開源專案,因為大多都可以直接編譯成一個執行檔案,非常的乾淨!
[Git] Ubuntu Server 自架 Gogs 版本控制存放庫 Repository 代管主機的作法 這篇也是使用 Go 開發的開源專案
本篇主角:Maddy - Composable all-in-one mail server 是最近兩年左右起來的新秀,亮眼的就是他真的是 All In One!把 Email 伺服器需要搭配的一堆東西(DKIM, SPF, DMARC..)都包在一起。
本文為當前作者建立操作的筆記,可能隨著時間的推移,軟體的版本而有不同,建議還是搭配官方文件閱讀使用。
內容目錄
作業系統
Ubuntu 20.04 Server (Linode主機測試)
2019/11/05 之後才開立的 Linode 帳號預設會封鎖 Port 25, 456, 587 等發信通信阜。(資訊來源 ,這篇文章建議閱讀,對 Email 架構會清楚不少。)
安裝執行環境
apt update && apt upgrade -y && apt install acl snapd socat gcc libc6-dev make && snap install core; snap refresh core && snap install --classic certbot && ln -s /snap/bin/certbot /usr/bin/certbot
把過程中會需要的元件,一次安裝起來!
安裝 Maddy
這邊一次筆記編譯版本以及現成軟體下載來的安裝方式。(擇一使用即可)
編譯 Maddy
準備 Go 的執行環境以及 Maddy 原始碼來編譯。(Go版本查詢)
wget "https://dl.google.com/go/go1.18.1.linux-amd64.tar.gz"
tar -C /usr/local -xzf go1.18.1.linux-amd64.tar.gz
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$GOPATH/bin:$GOROOT/bin:$PATH
source ~/.bashrc
git clone https://github.com/foxcpp/maddy.git
cd maddy
$ git checkout v0.4.0 # 切換版本來編譯
$ git checkout master # 選擇當前最新修復問題版本
$ git checkout dev # 測試功能的版本
$ ./build.sh # 編譯
# ./build.sh install # 安裝
編譯時不用是
root
權限,但安裝時要切換。
下載編譯好的 Maddy 來安裝
wget https://maddy.email/builds/0.5.4/maddy-0.5.4-x86_64-linux-musl.tar.zst
tar --use-compress-program=unzstd -xvf maddy-0.5.4-x86_64-linux-musl.tar.zst
cd maddy-0.5.4-x86_64-linux-musl
mv maddy maddyctl /usr/local/bin/
mkdir /etc/maddy && mv maddy.conf /etc/maddy/
mv systemd/*.service /usr/lib/systemd/system/
mv man/*.1 /usr/share/man/man1/ && mv man/*.5 /usr/share/man/man5/
寫文當前最新釋出版本為 0.5.4
,可以到這裡查看最新釋出版本。
建立 Maddy 的使用者
useradd -mrU -s /sbin/nologin -d /var/lib/maddy -c "maddy mail server" maddy
Maddy 不使用 root
執行,配一個系統使用者給他。而後續建立的相關檔案也要記得權限要配置給這位使用者,以免執行時會碰到權限問題。
chown -R maddy:maddy /usr/local/bin/maddy* /etc/maddy
安裝憑證
certbot certonly --standalone --preferred-challenges http -d mx.mxp.tw
憑證處理好後
mkdir -p /etc/maddy/certs
mkdir -p /etc/maddy/state
mkdir -p /etc/maddy/runtime
mkdir -p /etc/maddy/log
chown maddy:maddy /etc/maddy -R
setfacl -R -m u:maddy:rX /etc/maddy/certs/
setfacl -R -m u:maddy:rX /etc/letsencrypt/{live,archive}
cd /etc/maddy/certs
ln -s /etc/letsencrypt/live/mx.mxp.tw
建立必要目錄,然後建立憑證放置資料夾,設定權限,建立符號連結(軟連結、Symbolic link)
記得編輯
sudo vi /etc/letsencrypt/renewal/mxp.tw.conf
中的renew_hook = service maddy reload
如果有更新憑證可以重載入 Maddy 設定
設定 Maddy 組態
vi /etc/maddy/maddy.conf
編輯設定檔案,修改內容如下
$(hostname) = mx.mxp.tw
$(primary_domain) = mxp.tw
$(local_domains) = $(primary_domain)
tls file /etc/maddy/certs/$(hostname)/fullchain.pem /etc/maddy/certs/$(hostname)/privkey.pem
state_dir /etc/maddy/state
runtime_dir /etc/maddy/runtime
log syslog /etc/maddy/log/maddy.log
預設不用改動太多就可以使用了。
建立帳號
maddyctl creds create [email protected]
maddyctl imap-acct create [email protected]
啟動 Maddy 服務
service maddy start
沒意外就會正常啟動,有意外可以搭配 /etc/maddy/log/maddy.log
與 journalctl -u maddy.service -f
觀看執行狀態下的問題。
網域相關設定
上面這樣就已經可以把 Maddy 給開好等著來收發信件。
不過其實到這個段落才是重頭戲,一來是要讓 Email 主機 IP關聯網域,二來還要兼顧驗證發信端來源是否可以信任這件事。
關聯發信 Email 主機
這邊主要是 MX 紀錄,要去 DNS 設定一組發信主機的紀錄
mx.mxp.tw A IPv4地址
mx.mxp.tw AAAA IPv6地址
然後再補上一個發信主機的紀錄指向這個主機
mxp.tw MX mx.mxp.tw
SPF 紀錄
這邊會讓接收端的郵件主機來驗證發信端的設定權限
mxp.tw TXT "v=spf1 mx -all"
意思是,除了DNS裡設定的 MX 紀錄外,其他來源一率拒絕。
DKIM 紀錄
這邊的金鑰資料要從 /etc/maddy/state/dkim_keys/mxp.tw_default.dns
裡取得設定資料。
把 v=DKIM1; k=rsa; p=MIIBI.......
整串加入 DNS 紀錄如下:
`default.domainkey.mxp.tw TXT "v=DKIM1; k=rsa; p=MIIBI......."
DMARC 紀錄
宣告如果遇到問題郵件的處理窗口
_dmarc.mxp.tw TXT "v=DMARC1; p=quarantine; ruf=mailto:[email protected]"
主機 IP 的 PTR 反向DNS紀錄(rDNS)
這個紀錄要主機服務端支援, Linode 有提供這個功能可以後台設定,就是把當初指定到這主機的網域 mx.mxp.tw
填入設定,等待生效即可!
(這沒處理應該可以說保證會進入垃圾信了)
其他 DNS 相關
還有像是 DNSSEC, MTA-STS, TLS, TLSA 與 CAA 等紀錄可以強化安全性的,本篇幅就不多寫了,可以參考這篇也是 Maddy 用戶的筆記解說,非常詳細,推薦一看: Maddy打造个人邮箱服务
測試
到這一步就可以把上述的 [email protected]
使用 macOS 裡的「郵件」加入帳號來測試發信。
建議可以先發向 Mail-Tester 這家的服務,能夠檢測服務是否有設定正確!
拿到 10/10
滿分其實不難,但要一開始發往 Gmail 還不進垃圾郵件,我覺得很難...XD 似乎還要再累積點這個IP的「名聲」。
針對 Gmail 判定發信等級的部分可以參考使用這個大邵介紹的工具: Google Postmaster。
後記
信件伺服器 Email Server 其實真的不難架設,難在管理以及對這背後整個運作系統的認識。
還記得好早以前玩 VPS 架設網站主機的時候也開過 Postfix
服務來架設,但沒多久就被主機商警告亂發垃圾信。現在網路上攻擊的機器人從沒少過,只要你機器上有任何一個破口,被駭客給掌握到有發信服務,他肯定來幫你發爆。
粉絲頁 2022/02/26 時寫過的這個專案,我也是拖到今天 2022/04/16 才實驗完以及筆記,期待這專案越來越完整!