因此,目前我使用 opendkim 对来自特定域的邮件进行签名,并且这样做有效。但是当我尝试从 opendkim 不认识的域发送邮件时,它们没有被签名。
我想要做的是让 opendkim 使用单个域名对通过 postfix 的所有电子邮件进行签名,就像 mailchimp 等所做的那样。
例如:我正在发送电子邮件[电子邮件保护]使用 mailchimp,签名如下所示:
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; s=k1;
d=mail2.suw13.rsgsv.net;
h=Subject:From:Reply-To:To:Date:Message-ID:
List-ID:List-Unsubscribe:Sender:Content-Type:MIME-Version;
i=*****[email protected];
bh=4Rla76/wHV31ER3IZqXOuA09j3OG2SuFbfD5Jc7Kn94=;
b=17jmyvz05JfeNC+avqWJmtESF2A58LA/CievFVtQ0sqwo4FYKAP
0Gfpjtc5LSG7tr9ntS5CziAgSOa+UyEjRP3AhZOOXDFoQMUG0gn
tqxg/gP074Vi7Hy0XvFzAiJYZfAhijwvaroY45hjuX+RN3nQ0xT
fhWem5mv3+VVYpwvUo=
我如何实现这个目标?
答案1
喜欢这个答案 诀窍在于使用SigningTable
and KeyTable
:
/etc/opendkim.conf
...
SigningTable refile:/etc/mail/dkim_signing_table
KeyTable csl:keyname=example.com:selector:/etc/mail/selector.key
/etc/mail/dkim_signing_table
* keyname
因此SigningTable
将所有域映射到一个键,并KeyTable
为键名提供一个域/选择器。
答案2
在您的示例中,邮件不是为您自己的域签名的,而是为 签名的d=mail2.suw13.rsgsv.net
。MailChimp 将其作为其默认身份验证, 但它建议使用自定义域身份验证即每个域都有自己的 DKIM 身份验证。
它会删除默认的 MailChimp 身份验证信息(“通过 mcsv.net”或“代表 mcsv.net”) 会显示在某些电子邮件客户端中您的营销活动的“发件人”姓名旁边。
出于同样的原因,您不应该尝试使用单个域来为所有域签署消息。
答案3
opendkim
总是“自己”决定是否签名(然后验证)。你只能操纵它的决定并说服它签名:
- 有相关电子邮件的密钥材料
- 让 MTA 发送预定的键值对到
opendkim
以下几行是我的“全部签名”配置的关键元素:
/etc/opendkim.conf
SigningTable csl:*=key1
KeyTable csl:key1=example.org:selector:/etc/dkimkeys/key.private
MacroList csl:{dkimsign}=yes,dkimsign=yes
Socket local:/var/spool/postfix/opendkim/opendkim.sock
第 1 行:对所有域使用“key1”
第 2 行:在 DKIM-Signature 标头中使用“d=example.org; s=selector;”并使用该私钥进行签名
第 3 行:向 MTA 发送请求{dkimsign}
并dkimsign
签名电子邮件(如果其中任何一个被设置为)yes
(请参阅下面的注释)
第 4 行:用于与 MTA 通信的套接字
第 1 行和第 2 行满足上面的第 1 点,第 3 行满足上面的第 2 点。
/etc/postfix/main.cf
milter_macro_defaults = dkimsign=yes
smtpd_milters = unix:opendkim/opendkim.sock
non_smtpd_milters = unix:opendkim/opendkim.sock
第 1 行:将dkimsign
属性设置为yes
第 2 行和第 3 行:用于访问过滤器应用程序的套接字(与上面的 opendkim 相同,但相对于 postfix chroot...)
笔记:
- opendkim 的惊喜
- 选项
Mode=s
不强制签名 - 选项
LogWhy
没有记录原因 - 即使没有,标准输出/错误也没有
SysLog
- 选项
- 既没有
opendkim
也没有postfix
适当的 - 有些地方有问题:opendkim 需要请求
{dkimsign}
anddkimsign
(或任何其他属性,但必须带括号和不带括号),否则无法正常工作;也可能是postfix