Postfix

如何正確配置 postfix 和 opendkim 並讓接收伺服器知道所有郵寄者簽名的詳細資訊?

  • December 20, 2013

我想要實現的目標 - 底線:郵件進入收件箱而不是垃圾郵件文件夾。

我有一個執行 postfix(郵件伺服器)的伺服器,我有 3 個域。郵件伺服器用於傳入和傳出郵件。

我正在使用 opendkim 簽名,並且有 DNS 記錄。

經過長時間的觀察,我意識到由於不正確的郵寄和簽名分配,郵件會進入垃圾郵件。

考慮一下,我的郵件伺服器是 mailserver.example.com,其他 3 個域是 example1.com、example2.com 和 example3.com

當有人從 admin@example1.com 發送電子郵件時,它應該顯示:

admin@example1.com 通過 mailserver.example.com

郵寄者:mailserver.example.com

簽名人:example1.com

我觀察到 mailjet 和 amazon 電子郵件幾乎不會進入垃圾郵件,事實是,“也許”是因為原始主機名/IP 反向解析為郵寄者和簽名者。

配置文件:

/etc/opendkim/Keytable

mvs._domainkey.example1.com example1.com:selc:/etc/opendkim/keys/example1_com/selc.private
mvs._domainkey.example2.com example2.com:selc:/etc/opendkim/keys/example2_com/selc.private

/etc/opendkim.conf

Domain          example1.com
KeyFile     /etc/opendkim/keys/example1_com/selc
Selector        selc

Domain          example2.com
KeyFile     /etc/opendkim/keys/example2_com/selc
Selector        selc

Canonicalization    simple
Mode            sv
Syslog                  yes
LogWhy                  yes
UMask                   022
UserID                  opendkim:opendkim
KeyTable           /etc/opendkim/KeyTable
SigningTable       /etc/opendkim/SigningTable
ExternalIgnoreList /etc/opendkim/TrustedHosts
InternalHosts      /etc/opendkim/TrustedHosts
Socket                  inet:34562@localhost
X-Header        no

最後

/etc/opendkim/SigningTable

example1.com selc._domainkey.example1.com
example2.com selc._domainkey.example2.com

我在哪裡失踪?

首先,請刪除這些值(如果您使用 KeyTable,則不需要它們):

Domain      example1.com
KeyFile     /etc/opendkim/keys/example1_com/selc
Selector    selc

Domain      example2.com
KeyFile     /etc/opendkim/keys/example2_com/selc
Selector    selc

像這樣設置你的KeyTable

mykey1 example1.com:recordname1:/path/to/domain.key
mykey2 example2.com:recordname2:/path/to/domain.key

像這樣設置您的SigningTable(注意萬用字元匹配以及來自KeyTable的mykey1mykey2):

*@example1.com mykey1
*@example2.com mykey2

最後通過refile *:*前綴(正則表達式支持)更改您的opendkim.conf以包含SigningTable :

SigningTable    refile:/etc/opendkim/SigningTable

和域記錄供參考(注意KeyTable中的recordname1recordname2):

recordname1._domainkey IN TXT "v=DKIM1; g=*; k=rsa; p=..."
recordname2._domainkey IN TXT "v=DKIM1; g=*; k=rsa; p=..."

此外,請檢查InternalHosts文件中是否有您的節點主機名(從中發送郵件) :

server1.example1.com
server2.example2.com
mail.example1.com
mail.example2.com

同樣,您可以使用*refile:*前綴來添加以下內容:

*.example1.com
*.example2.com

如果您有多個主機並且不想手動包含所有主機。如果您只接受本地郵件,則應在此處添加localhost

如果您的主機在InternalHosts文件中失去,您應該檢查日誌文件以獲取有關跳過簽名的DKIM通知。

opendkim.conf 範例:

# Set these values (Syslog, SyslogSuccess, LogWhy) for debugging and check syslog for details
Syslog      yes
SyslogSuccess   yes
LogWhy      yes

UMask       002
UserID      opendkim:opendkim

KeyTable            /etc/opendkim/KeyTable
SigningTable        refile:/etc/mail/SigningTable
InternalHosts       refile:/etc/mail/hosts

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