[VPS] 使用 Maddy 架設 Email 伺服器的方法

本篇文章更新時間: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.logjournalctl -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 才實驗完以及筆記,期待這專案越來越完整!


Share:

作者: Chun

資訊愛好人士。主張「人人都該為了偷懶而進步」。期許自己成為斜槓到變進度條 100% 的年輕人。[///////////____36%_________]

發佈留言

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


文章
Filter
Apply Filters
Mastodon