dkim 是什麼?

DKIM (Domain Keys Identified Mail),網域金鑰認證郵件。

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

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

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

安裝dkim服務

yum -y install epel-release
yum install opendkim

產生公私鑰

mkdir /etc/opendkim/keys/mail.fisp.com.tw
opendkim-genkey -b 2048 -D /etc/opendkim/keys/mail.fisp.com.tw/ -d mail.fisp.com.tw -s mail

  • 參數的意義
  • -b 2048 bits,gmail要求要2048,沒帶此參數的話預設是1024
  • -D 產生的公私鑰目錄
  • -d 網域名
  • -s 稱之為選擇器(selector),可以隨便取,我用mail

將公私鑰的使用者和群組改為 opendkim

chown -R opendkim:opendkim /etc/opendkim/keys/mail.fisp.com.tw/

設定opendkim

vi 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

vi /etc/opendkim/KeyTable

加上一行
[選擇器名]._domainkey.[網域名] [網域名]:[選擇器名]:[私鑰檔路徑]
mail._domainkey.mail.fisp.com.tw mail.fisp.com.tw:mail:/etc/opendkim/keys/mail.fisp.com.tw/mail.private

vi /etc/opendkim/SigningTable

加上一行
*@mail.fisp.com.tw mail._domainkey.mail.fisp.com.tw

vi /etc/opendkim/TrustedHosts

加上自己的ip,此文範例是使用InternalHosts,因此清單中寄信的來源ip都要加上簽章。
60.251.35.77

啟動 opendkim

systemctl restart opendkim
systemctl enable opendkim

設定postfix

vi /etc/postfix/main.cf

在最後加上
# DKIM Settings
# 8891是opendkim提供服務的port

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/mail.fisp.com.tw/mail.txt 打開,裡面大概長這樣:

mail._domainkey IN      TXT     ( “v=DKIM1; k=rsa; ”     

     “p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2lv/zWzwbHh/GC4S9MDxNhAG9GZ+ROqb2KqocQdZigb9r3wM3W6uKP/y0mI6pwTpcad6YXYoxjMOOjxe4yntzRZWPzKBrO0ewWAic3oRbd7/TZGrWghj4OmGj4TjJHXwL/uRNcOwi044L1lnVHcWYHFQ4stpD+iW1C2CJ6duPmJrlM5pauo4YSqTig3Rn1BuFQ6enzhJ0bad5f”

          “W8qo1uVudpL24LsTdADLiLgTnvn7xbbPZK0EneJz6T/bARRt4jym35zDzlHFS+hdItJ1ZVXvTliw5I7nxRrC57MQn3K4WWmVUiNffF2kWPwCHcULZmNF7sBdeOc2XxjaZ/Srq6KwIDAQAB” )  ; —– DKIM key mail for mail.fisp.com.tw

依照內容在DNS上新增一筆TXT紀錄,如圖:

注意,三角形的地方記得要空格,對照mail.txt的內容就知道了

第二筆是adsp,Author Domain Signing Practices(adsp) 簡單來說就是dkim的認證機制dkim= 的值可以用 ”all””unknown””discardable”

“all” 指定所有此網域的信都會有簽章
“discardable” 指定所有此網域的信都會有簽章,如果沒有的話請丟棄(最嚴格)。如要dkim 有意義的運作,最好把他設為這個。
“unknown” 指定所有此網域的信有可能會有簽章 (最寬鬆看待,等於沒設)。

spf紀錄

測試及驗證

寄一封信給自己,然後看那封信的原始檔,大致上會長這樣,看到紅字部分就表示郵件寄出時會加入dkim的數位簽章

Return-Path: <[email protected]>
Delivered-To: [email protected]
Received: from [192.168.1.168] (unknown [106.104.166.116])
by mail.fisp.com.tw (Postfix) with ESMTPSA id E7E4F40566BC
for <[email protected]>; Wed, 31 Jan 2024 15:04:20 +0800 (CST)
DKIM-Filter: OpenDKIM Filter v2.11.0 mail.fisp.com.tw E7E4F40566BC
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mail.fisp.com.tw;
s=mail; t=1706684661;
bh=Bynm51C7RZD/vZ81iEMKjxxLoAJtSmKFcwU/eyFzPs8=;
h=Date:To:From:Subject:From;
b=R1s0ZTGXoJlof6ISeYfH2S9B9hrqUESd1Vlja0n9mgWszg8BIQ7x/ReC0/uafzIRE
iry1/gscdR7sQif5y8PxMduy0I+MVc1kdacQplaI7PJHAL8C+72eDOMfo+eWws3DxJ
PlWb+MUzVBJ89MTMuuzznbcwthIzymrDX1apQpUiDnfZ+noQww0XUJPS/ikfDis74E
UcifCRab9sM9JQ2zq3hcY2BDpDUNnU+WJMcFig/GlIq9fCEI7Yty596P5b+87uww37
RQvP58jdVxp473xOJnSioJsstroDqNqgkbHGewhDbWPxp/sXvQwDChQd426oK2v+fY
59AKQa8yQg+jQ==

Message-ID: <05dcbd87-c0e8-45fb-8ecf-344daf5936be@ash
Date: Wed, 31 Jan 2024 15:04:21 +0800
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Content-Language: en-US
To: t017@ashFrom: =?UTF-8?B?6JeN5ZyL6IiI?= <t017@ash
Subject: 測試郵件
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
測試郵件

dkim測試

https://mxtoolbox.com/dkim.aspx

spf測試

https://mxtoolbox.com/spf.aspx

發佈留言

Your email address will not be published. Required fields are marked *.

*
*
You may use these <abbr title="HyperText Markup Language">HTML</abbr> tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>