centos 安裝dkim並且自動產生相關文件

先前寫了一篇centos7安裝opendkim+postfix 這只是單一網域, 若要多個網域,實在是很麻煩

google爬文爬到一篇文章,有神人寫了自動產生相關文件的shell script , 我稍微修改一下, 就能很方便產生相關文件.

  • 安裝dkim套件
#centos 7
yum install opendkim
#centos 8 , rocky linux 8
yum install opendkim opendkim-tools
  • 修改 opendkim.conf
    把Mode 改成 sv

cetnos 7 + postfix 新增dkim功能

  1. 安裝

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install -y opendkim

  1. 產生private key與dns的TXT Record

opendkim-genkey -d <domain name>
cp default.* /etc/opendkim/keys
chown -R opendkim:opendkim /etc/opendkim

  1. 修改/etc/opendkim.conf
    確認該設定檔案有以下的設定( KeyFile /etc/opendkim/keys/default.private 要mark起來 )

Mode sv
Socket inet:8891@127.0.0.1
Canonicalization relaxed/simple
Domain <domain name>
#KeyFile /etc/opendkim/keys/default.private
KeyTable refile:/etc/opendkim/KeyTable
#ps 若使用測試軟體出現invalid data set, 請改成 KeyTable /etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts

  1. 修改 /etc/opendkim/KeyTable

default._domainkey.<domain name> <domain name>:default:/etc/opendkim/keys/default.private

以 test.com 為例子

default._domainkey.test.com test.com:default:/etc/opendkim/keys/default.private

  1. 修改 /etc/opendkim/SigningTable

*@<domain name> default._domainkey.<domain name>

以test.com為例子

*@test.com default._domainkey.test.com

  1. 修改 /etc/opendkim/TrustedHosts

127.0.0.1
<mail host name>
<domain name>

以 test.com 為例子

127.0.0.1
mail.test.com
test.com

  1. 新增以下設定 /etc/postfix/main.cf

smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept

  1. 將/etc/opendkim/key/default.txt的資料更新到dns上

  2. 啟用service

systemctl start opendkim ; systemctl enable opendkim ; systemctl restart postfix

  1. 測試
    • opendkim-testkey -x /etc/opendkim.conf 若無錯誤訊息代表成功
    • 測試網站 https://www.appmaildev.com/

DKIM介紹

DKIM(DomainKeys Identified Mail)是一種用來對抗釣魚之類廣告信的協定.

當初yahoo以及cisco為了對抗廣告信(至少不讓廣告商冒用其名義寄信),使用一種特殊的方式對抗廣告信,
實施了多年以後,終於證明可以有效阻擋廣告信,因此他們將此協定開放讓大家使用,
到了2005年,在多家廠商的合作下,規範出第一版DKIM,送交IETF審查.
,並且在2007年通過,成為開放通訊協定中的一種,RFC編號為4871.

DKIM的運作方式有兩種, 第一種是驗證(verification),第二種是簽名(signature).
假設我是test.com這個網域的管理員, 我必須利用DNS設定一組公開金鑰,
讓所有人可以取得且用來驗證郵件是否為test.com郵件伺服器發出.
這樣以後所有從test.com郵件伺服器所送出的郵件,只要經過簽名(必須使用私密金鑰才可以簽名),
對方就可以使用公開金鑰認證,確保郵件是否為真.

若所有的郵件伺服器都有這樣的機制, 那些廣告信就無所遁形, 因為他們無法經由簽名預告郵件是否為真
.若廣告商要破解這種機制是需要很大的成本,就目前來說, 是很有效的檔廣告機制.

目前實做的DKIM的模組,對於所定義的公開金鑰與私密金鑰,
還只限於郵件伺服器本身對外發出(非公信力單位發出),
現已有 RFC5016(DKIM Signing Practices Protocol)討論所謂的SPP,
未來很可能形成另一種具備安全性與公信力的通訊協定,讓DKIM更能普及.

若遭遇大量廣告郵件攻擊郵件伺服器,在伺服器還沒進行DKIM驗證的動作時,
可以搭配其他輔助套件,先行阻擋廣告商郵件寄送,
才不至於造成郵件伺服器負載過高甚而停止運作.

特別一提的是目前DKIM並不能證明郵件真的是發信者本人發出,
必須搭配第三者簽名的方式如PGP等單位才是正確方式,

參考文件
http://www.dkim.org/index.html

william 2008/09/16