Linux

DKIM - 單個主機 - 多個 IP

  • September 25, 2015

試圖找出在具有多個彈性 IPS 的單個 EC2 上實施 DKIM 的最佳實踐。

# /etc/opendkim.conf
...
Mode                    sv
Canonicalization        relaxed/simple
ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts
InternalHosts           refile:/etc/opendkim/TrustedHosts
KeyTable                refile:/etc/opendkim/KeyTable
SigningTable            refile:/etc/opendkim/SigningTable
SignatureAlgorithm      rsa-sha256
...

# /etc/opendkim/KeyTable
default._domainkey.example.com example.com:hp-hv-1:/etc/opendkim/keys/default.private
default._domainkey.example.com example.com:hp-hv-2:/etc/opendkim/keys/default.private

# /etc/opendkim/SigningTable
*@example.com default._domainkey.example.com

然後我有兩條 DNS 記錄:

hp-hv-1._domainkey.example.com TXT "v=DKIM1;k=rsa;p=default.txt_key_goes_here"

hp-hv-2._domainkey.example.com TXT "v=DKIM1;k=rsa;p=default.txt_key_goes_here"

對於同一個 EC2 實例上的兩個後綴實例,每個實例都具有以下 $myhostname:

# postfixmulti instance #1
myhostname = hp-hv-1

# postfixmulti instance #2
myhostname = hp-hv-2

兩個 postfix 實例都在同一個 EC2 實例上,因此它們都共享相同的 default.private/default.txt 私鑰/公鑰對,因此無需向 KeyTable 和 SigningTable 添加更多行。據我所知,如果我想實現多個域(我不這樣做),我只需要向 KeyTable 和 SigningTable 添加額外的行。

但是當我測試我的 DKIM 設置時,我不斷收到“通過:中立”的回复,說電子郵件沒有簽名,但它們是,我可以在日誌文件中看到它:

# snippet from /var/log/maillog
Sep 25 15:15:31 service-a-4 opendkim[27420]: 5B4A3625F0: DKIM-Signature field added (s=hp-hv-1, d=example.com)

我錯過了什麼?

版本:

CentOS 6.5
Postfix v2.6.6
Opendkim v2.9

好吧,我顯然很困惑,我一直認為 DKIM 簽名欄位中的“s”應該從後綴配置中辨識 $myhostname,但實際上它沒有。在閱讀了有關DKIM 密鑰輪換的更多資訊後,我終於明白了,“s”只是從 KeyTable、SigningTable 和 DNS 中使用的選擇器。

檢查這個:

# /etc/opendkim/KeyTable
#  Format: selector(1) domain:selector(2):/path/to/key
#    selector(1) is used in the /etc/opendkim/SigningTable
#    selector(2) is built into the DKIM signature for every email sent, which is used to lookup the DNS TXT entry: mail-1_r-1._domainkey.example.com
mail-1_r-1._domainkey.example.com example.com:mail-1_r-1:/etc/opendkim/keys/mail-1_r-1.private

現在,如果我想旋轉密鑰,我會這樣做:

# /etc/opendkim/KeyTable
#  Generate new private/public key pair, and rename accordingly
mail-1_r-1._domainkey.example.com example.com:mail-1_r-1:/etc/opendkim/keys/mail-1_r-1.private
mail-1_r-2._domainkey.example.com example.com:mail-1_r-2:/etc/opendkim/keys/mail-1_r-2.private

然後在簽名表中:

# /etc/opendkim/SigningTable
*@shouttag.com mail_r-1._domainkey.example.com
*@shouttag.com mail_r-2._domainkey.example.com

然後對於 DNS 條目,您將擁有以下內容

mail_r-1.domainkey.example.com "v=DKIM1;k=rsa;p=mail_r-1.txt_key_goes_here"
mail_r-2.domainkey.example.com "v=DKIM1;k=rsa;p=mail_r-2.txt_key_goes_here"

這些 DNS 條目用於幫助驗證電子郵件是否真正從您的域發送(因此是域密鑰辨識郵件)。然後在 7 天左右後,您可以刪除 mail_r-1.domainkey.example.com。

引用自:https://serverfault.com/questions/724847