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
測試郵件