建設 Postfix + SPF + DKIM + DMARC

因為源用了好幾年的VPS hosting供應商AlphaRacks.com突然結業, 迫於無奈要找新的hosting供應商, 最迫不得意的當然是重新建設mail server. 當然您也可以使用raspberry piOrangePi. 今次使用的VPS供應商是SnowVPS.com, 而選用的OS當然也是Ubuntu 16.04吧. 既然是由零開始, 所以今次一於記錄下安裝程序方便有須要朋友可參考. 今次安裝的 smtp server 是 Postfix, 另外會加上 SPF 作為 inbound/outbound filter, 再加上 DKIM 及 DMARC 作業 email authentication. 另外我都會使用 greylist 加強 spam filter.

安裝系統前我會先登入super user(root), 如果您未能進入root的console, 可使用以下command

sudo -i

安裝postfix

Postfix是在unix/linux/FreeBSD 上的smtp靈魂,沒有它什麼email也不能收發. smtp 全寫是Simple Mail Transfer Protocol 是一個相對簡單的基於文字的協定. 收發email時需要使用DNS的MX作為交換.

安裝postfix的command其實很簡單,只需在console上打入下面這個command.

apt-get install postfix

如果中途出現選項,可以選 “internet”

完成後須要做的是修改 /etc/postfix/main.cf
我這台mail server是 alpha.unixwise.xyz, 另一台backup server是 mx.unixwise.xyz, 這兩台server是需要在DNS上config成MX (mail exchange)

smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = unixwise.xyz
myorigin = $myhostname
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = $myhostname, alpha.unixwise.xyz, localhost.unixwise.xyz, , localhost
relayhost =
mynetworks = localhost mx.unixwise.xyz 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128

mydestination 是說明server會收那個domain/sub-domain的email, 而 mynetwork 是說明那台機可以接駁過來而把這台機當作 relayhost

完成了這個基本步驟, 您的mail server已經可以發送email

安裝 SPF

SPF全寫是Sender Policy Framework, 最基本的SPF只需要使用任何一個SPF generator也可以, 而我今次會使用mxtoolbox.com

如上圖輸入資料後, 再把 “v=spf1 a mx …..” 貼上您的DNS record就可以了.

安裝 DKIM

DKIM全寫是DomainKeys Identified Mail,它是通過DNS上的 _domainkey 及 outbound 的 DKIM signature來確認email的合法性. 可以說是SPF的加強版本. DKIM在Linux上是有一個software需要安裝的, 它就是 opendkim 了, 安裝command如下

apt-get install opendkim opendkim-tools

安裝完成後, 再輸入下面這個command建設 opendkim的unix account

adduser postfix opendkim

當opendkim及unix account加建後, 就是生產 dkim 的 keypair時間了

opendkim-keygen -t -s dkim -d unixwise.xyz

opendkim-keygen -t -b 2048 -s dkim -d unixwise.xyz

兩者主要分別是key length, 上面這兩個command分別會產生 dkim.private 及 dkim.txt 兩個files. dkim.private 就是server上的 private key, 而 dkim.txt 就是 DNS 上的 DNS record.

因為方便管理, 我會把dkim.private及dkim.txt放入 /etc/opendkim

cp dkim.private /etc/opendkim/dkim.key
cp dkim.txt /etc/opendkim.dkim.txt

在unix上運行opendkim, server上還需求 grant privileges, command 如下

chown -R opendkim:opendkim /etc/opendkim

到了最後一步當然就是修改config吧, 第一個耍改的就是 /etc/default/opendkim

SOCKET=”inet:8891@localhost”

把其他打上#, 只留下上面這行, 意思是說opendkim會用 port# 8881作為 service port

而另一個需要修改的就是 /etc/postfix/main.cf

## OpenDKIM
milter_protocol = 6
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891

把上面這幾句加到最後就可以了.

加建DMARC

DMARC全寫是Domain-based Message Authentication, Reporting & Conformance

通過DMARC policy, email server 會把inbound email 分類, 最基本的DMARC可通過mxtoolbox.com 的DMARC generator 產生

如上圖輸入資料後, 再把 “v=DMARC1;p=…..” 貼上您的DNS record就可以了.

運行 Postfix + SPF + DKIM + DMARC

從上面好幾個步驟, 新mail server的安裝已經基本完成, 但要完全投入服務, 還需要restart service

service opendkim restart
service postfix restart

mail log

想知DKIM 是否成功加簽, 可以在 /var/log/mail.log 找找

Jun 18 15:33:53 alpha opendkim[1085]: 928EA2012C: DKIM-Signature field added (s=dkim, d=alpha.unixwise.xyz)
Jun 18 15:33:53 alpha postfix/qmgr[1566]: 928EA2012C: from=<adrian@unixwise.xyz>, size=1255, nrcpt=1 (queue active)
Jun 18 15:33:53 alpha postfix/smtp[1649]: Untrusted TLS connection established to gmail-smtp-in.l.google.com[108.177.111.27]:25: TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)
Jun 18 15:33:54 alpha postfix/smtp[1649]: 928EA2012C: to=<unixwise@gmail.com>, relay=gmail-smtp-in.l.google.com[108.177.111.27]:25, delay=0.56, delays=0.09/0.01/0.27/0.18, dsn=2.0.0, status=sent (250 2.0.0 OK  1560843234 m15si17045590ioc.3 - gsmtp)
Jun 18 15:33:54 alpha postfix/qmgr[1566]: 928EA2012C: removed

1 thought on “建設 Postfix + SPF + DKIM + DMARC”

Leave a Reply