woff 發表於 2022-12-23 10:47:27

Centos 8 postfix+DKIM 設定(主從式架構可用)

信件總是被退?希望別的mail server相信我寄出的信?那麼你可以設定dkim。

dkim 是什麼?
DKIM (Domain Keys Identified Mail),網域金鑰認證郵件。

DKIM 和ssl(https)的運作機制相似,一樣採用公私鑰數位簽章方式。在發送郵件時由發信服務器對郵件以私鑰進行簽章,而在郵件接收伺務器上,會透過 DNS 查詢寄件者網域的dkim 公鑰資料,然後對這封郵件做簽章解碼,如果解碼成功,代表郵件確實為原始郵件伺服器所寄出。

此舉可以避免假冒的伺服器寄信者來源,讓該網域確實由授權的伺服器所寄出,減少email被偽造來源的可能。

簡單來說 dkim 是用來驗證寄件者是否來自於合法伺服器的方法。



安裝dkim服務
採用 opendkim 套件來支援dkim

安裝 opendkim
yum -y install epel-release
yum install opendkim

產生公私鑰
今天要替 @tshopping.com.tw 的email建立 dkim,所以建立一個以此網域命名的目錄匣

# mkdir /etc/opendkim/keys/tshopping.com.tw
產生公私鑰

# opendkim-genkey -D /etc/opendkim/keys/tshopping.com.tw/ -d tshopping.com.tw -s 20221222
參數的意義
-D 產生的公私鑰目錄
-d 網域名
-s 稱之為選擇器(selector),可以隨便取,我用今天日期20221222

執行後不會有回應是正常的,檢查目錄下產生的檔案

ls -al /etc/opendkim/keys/tshopping.com.tw
drwxr-xr-x. 2 opendkim opendkim50 12月 23 10:37 .
drwxr-x---. 3 root   opendkim30 12月 22 22:33 ..
-rwx--x---. 1 root root 891 12月 22 22:32 20221222.private <== 私鑰
-rwx--x---. 1 root root 322 12月 22 22:32 20221222.txt <== 公鑰 dns txt記錄

使用者和群組改為 opendkim

chown -R opendkim:opendkim /etc/opendkim/keys/tshopping.com.tw/


設定opendkim
設定 opendkim,設定檔在 /etc/opendkim.conf

設定 opendkim.conf
先備份 opendkim.conf

cp -p /etc/opendkim.conf /etc/opendkim.conf.org
修改 opendkim.conf

# 修改為 Mode s,他有3種模式,Mode s, Mode v, Mode sv。s代表寄出時簽章、v代表收信時檢查簽章。
Mode    s

# 加上註解
#KeyFile    /etc/opendkim/keys/default.private

# 以下項目移除註解
KeyTable    /etc/opendkim/KeyTable
SigningTable    refile:/etc/opendkim/SigningTable
InternalHosts   refile:/etc/opendkim/TrustedHosts

設定 KeyTable
vi /etc/opendkim/KeyTable

加上一行20221222._domainkey.tshopping.com.tw tshopping.com.tw:20221222:/etc/opendkim/keys/tshopping.com.tw/20221222.private


[選擇器名]._domainkey.[網域名] [網域名]:[選擇器名]:[私鑰檔路徑]

設定 SigningTable
vi /etc/opendkim/SigningTable

加上一行
*@tshopping.com.tw 20221222._domainkey.tshopping.com.tw




設定 TrustedHosts
vi /etc/opendkim/TrustedHosts

加上自己的ip,此文範例是使用InternalHosts,因此清單中寄信的來源ip都要加上簽章。如果有多個IP,就都加入
如下加入
127.0.0.1
::1
xxx:xxx:xxx:xxx
aaa:aaa:aaa:aaa

這兩個參數的意義可能是:

ExternalIgnoreList   設定寄出的信都不要加上簽章
InternalHosts   寄出的信都要加上簽章

啟動 opendkim

systemctl start opendkim
開機啟動 opendkim

systemctl enable opendkim

設定postfix
修改vi /etc/postfix/main.cf

在最後加上

### DKIM Settings
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
重新啟動postfix

systemctl restart postfix

確認參數有沒有啟動

postconf -n
設定dns的記錄
接下來設定dns的記錄,dkim主要要新增二筆。

第一筆是把/etc/opendkim/keys/tshopping.com.tw/20221222.txt 打開,裡面大概長這樣:

20221222._domainkey   IN      TXT   ( "v=DKIM1; k=rsa; "
          "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQEjrzWkJrIABJ6fKwZjcIvHsFRAEjrnfdM/ZiS23nGx73NkS1acbwFxP9otS/xNgJ2kyWS6tsh+mItM6QF0U7LV3iVFUDbFtJL0nZbDC+bExMCYpvIZRgPwcAZoTHFgjfQ+m5wvSlKR/lbYP0z2pmKZwqdDjZOPWndhtmg/n+hwIDAQAB" ); ----- DKIM key 20221222 for tshopping.com.tw

把他新增到你的dns中,例如我的網域是 tshopping.com.tw 完整記錄就是
20221222._domainkey.tshopping.com.tw.TXT 3600 "v=DKIM1; k=rsa;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQEjrzWkJrIABJ6fKwZjcIvHsFRAEjrnfdM/ZiS23nGx73NkS1acbwFxP9otS/xNgJ2kyWS6tsh+mItM6QF0U7LV3iVFUDbFtJL0nZbDC+bExMCYpvIZRgPwcAZoTHFgjfQ+m5wvSlKR/lbYP0z2pmKZwqdDjZOPWndhtmg/n+hwIDAQAB"


再加一筆adsp ,Author Domain Signing Practices(adsp) 簡單來說就是dkim的認證機制

dkim= 的值可以用 ”all””unknown””discardable”

_adsp._domainkey.tshopping.com.twTXT 3600 "dkim=unknown"
"all" 指定所有此網域的信都會有簽章

"discardable" 指定所有此網域的信都會有簽章,如果沒有的話請丟棄(最嚴格)。如要dkim 有意義的運作,最好把他設為這個。

"unknown" 指定所有此網域的信有可能會有簽章 (最寬鬆看待,等於沒設)。

測試及驗證
利用伺服器寄出一封信給自己試試,我使用 mutt 來完成,或是你要用你的郵件軟體也可以。

原始碼
查看 /var/log/maillog 的寄出記錄

Dec 22 21:38:57 dns postfix/smtpd: warning: hostname grieving.medyamol.com does not resolve to address 141.98.11.67
Dec 22 21:38:57 dns postfix/smtpd: connect from unknown
Dec 22 21:38:57 dns postfix/smtpd: discarding EHLO keywords: CHUNKING
Dec 22 21:39:02 dns postfix/smtpd: warning: unknown: SASL PLAIN authentication failed:
Dec 22 21:39:02 dns postfix/smtpd: disconnect from unknown ehlo=1 auth=0/1 quit=1 commands=2/3
Dec 22 21:39:13 dns postfix/smtpd: warning: hostname netyea.com does not resolve to address 202.39.11.212
Dec 22 21:39:13 dns postfix/smtpd: connect from unknown
Dec 22 21:39:13 dns postfix/smtpd: discarding EHLO keywords: CHUNKING
Dec 22 21:39:13 dns postfix/smtpd: 1AF2D400EE51: client=unknown, sasl_method=PLAIN, sasl_username=service
Dec 22 21:39:13 dns postfix/cleanup: 1AF2D400EE51: message-id=<003301d91677$be28e250$3a7aa6f0$@tshopping.com.tw>
Dec 22 21:39:13 dns opendkim: 1AF2D400EE51: DKIM-Signature field added (s=20221222, d=tshopping.com.tw) <span style="font-size: large; background-color: rgb(255, 255, 255);"><== 已加上簽章</span>
Dec 22 21:39:13 dns postfix/qmgr: 1AF2D400EE51: from=<service@tshopping.com.tw>, size=4285, nrcpt=1 (queue active)
Dec 22 21:39:13 dns postfix/local: 1AF2D400EE51: to=<woff@tshopping.com.tw>, relay=local, delay=0.13, delays=0.12/0.01/0/0, dsn=2.0.0, status=sent (delivered to mailbox)
Dec 22 21:39:13 dns postfix/qmgr: 1AF2D400EE51: removed



檢測器
諸多線上檢測器可以使用,替你檢測你的dkim能不能正常運作。

https://www.dmarcanalyzer.com/dkim/dkim-checker/


參考文章http://n.sfs.tw/content/index/15784



頁: [1]
查看完整版本: Centos 8 postfix+DKIM 設定(主從式架構可用)