iRedMail邮件服务器为绑定的多个域名添加各自域名独立的DKIM签名

在iRedMail搭建的服务器,在绑定了几个独立域名后,发现发信给日本Yahoo.co.jp邮箱,发出的邮件会被自动弹回。弹出554错误。

这个方案作了经过很长时间的探索,最主要是前期不知道用什么语言来描述问题,同一邮件服务器上绑定多个域名,发出的邮件用各自的DKIM签名,后来寻得此方案,得来全不费功夫。

为方便日后工作,特意记录下来。

1, 生成key

(1),首先进入dkim 签名保存目录生成签名

cd /var/lib/dkim/

amavisd genrsa qicai.us.pem
amavisd genrsa sanxiang.org.pem

(2),修改权限签名文件的权限

chmod -R 0644 ./*.pem

2,为amavisd添加dkim_key记录 共a,b两处

vi /etc/amavisd/amavisd.conf

a, 查找 dkim_key 添加域名签名文件。

/dkim_key

dkim_key("qicai.us", "dkim", "/var/lib/dkim/qicai.us.pem");
dkim_key("sanxiang.org", "dkim", "/var/lib/dkim/sanxiang.org.pem");

b, 查找@local_domains_maps

“qicai.us”, “sanxiang.org”

修改后的记录类似如下结果

@local_domains_maps = ( [".$mydomain","qicai.us", "sanxiang.org"] );  # 添加所有的绑定域名列表

保存并重启amavisd服务

# :wq
# /etc/init.d/amavisd restart

接着读出每个域名的dkim签名公钥

Test that new key to make sure it was installed properly:

amavisd showkeys qicai.us

#以下为显示的结果,key我已修改

; key#1, domain qicai.us, /var/lib/dkim/qicai.us.pem
dkim._domainkey.qicai.us. 3600 TXT (
“v=DKIM1; p=”
“MIGfMA0GCSqQKBgQDYArsr2BKbdhv9efugByf7LhaK”
“txFUt0ec5+1LFK711sibNN5LutvnaiuH+w3Kr8Ylbw8gq2j0UBok”
“FcMycUvOBd/TUrOua3Nns+qKSJBy88IWSh2zHaGbjRYujyWSTjlPELJ0H+5”
“EV711qseo/omquskkwIDAQAB”)

在各自的域名DNS管理平台里,添加TXT类型的记录值,值的内容为上面KEY中显示出内容,自 v=DKIM1开始,一直到omquskkwIDAQAB后的双引号结束。去除双引号,空格,将其值链接起来。

Add a ‘TXT’ type DNS record, set value to the line you copied above.
After you added this in DNS, type below command to verify it:
添加DNS记录后,开始测试,如果之前没有添加过该记录,则该记录值一般立即生效;如果添加过,则需要等待10分钟以上才能生效。

添加后的情形如下所示

dkim spf DNS TXT 记录

dkim spf DNS TXT 记录

dkim-spf2
Windows 下 cmd 中可以运行如下命令清空计算机DNS缓存。

ipconfig /flushdns

检查指定域名的签名是否正确

# amavisd testkeys qicai.us

TESTING: dkim._domainkey.qicai.us => pass

如果有多个签名,可以一次性检查多个

amavisd testkeys

如果显示为pass 则说明我们添加的记录值正确,faild为失败,或记录纸暂时未生效.

Linux 下可以使用dig来查看域名的相关DKIM TXT记录纸

dig -t txt dkim._domainkey.qicai.us

您还可以到这个页面,发一封邮件给这个页面,来测试DKIM,SPF记录是否是生效
http://www.brandonchecketts.com/emailtest.php

有价值的参考内容:iRedMail官方文档

其他参考:邮件服务器DNS设置 – MX、SPF、DKIM记录详解

如何为DKIM设置DNS记录

在CentOS 6.4 64bit上,安装完邮件服务器脚本iredmail后,运行命令

amavisd showkeys

后,我们得到系统创建的Key如下

; key#1, domain qicai.us, /var/lib/dkim/qicai.us.pem
dkim._domainkey.qicai.us. 3600 TXT (
“v=DKIM1; p=”
“MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDdy1OEOCIRJIaL+CIa/wxcmjL7”
“QOSS+y4KJcbjG+fuHeivsvXfjd6Ng575mwBsjq4cStG1mKqUud2UFHFgwJ9/F812”
“z6yJHlCPCgMJyqo8NG4ud/5ubi5GGjN/skgylGbxcJCa6W4JBsuEIbV/30rcqCin”
“tpz/CXByyWV4pUflwQIDAQAB”)

如果运行命令后,出现错误提示“/etc/amavisd.conf not found” 则可以运行如下命令,指定amavisd.conf 的路径

amavisd -c /etc/amavisd/amavisd.conf showkeys

接下来我们需要将TXT()中这些key的值去掉双引号后连接起来。连接后如下:

v=DKIM1; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDdy1OEOCIRJIaL+CIa/wxcmjL7QOSS+y4KJcbjG+fuHeivsvXfjd6Ng575mwBsjq4cStG1mKqUud2UFHFgwJ9/F812z6yJHlCPCgMJyqo8NG4ud/5ubi5GGjN/skgylGbxcJCa6W4JBsuEIbV/30rcqCintpz/CXByyWV4pUflwQIDAQAB

这时,我们打开DNS服务器记录编辑页面,找到对应的域名,添加如下记录值

name type(类型) value
dkim._domainkey TXT v=DKIM1; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDdy1OEOCIRJIaL+CIa/wxcmjL7QOSS+y4KJcbjG+fuHeivsvXfjd6Ng575mwBsjq4cStG1mKqUud2UFHFgwJ9/F812z6yJHlCPCgMJyqo8NG4ud/5ubi5GGjN/skgylGbxcJCa6W4JBsuEIbV/30rcqCintpz/CXByyWV4pUflwQIDAQAB

其他的保持默认即可,如果你想自己设置TTL值,设置其为3600就好了。

保存所设置的DNS记录。然后测试

amavisd testkeys

如果验证正确,则会有如下提示:

TESTING#1: dkim._domainkey.qicai.us => pass

如果DNS记录值不对,则提示:

TESTING#1: dkim._domainkey.qicai.us => invalid (public key: OpenSSL error: bad base64 decode)

BTW, 还有一种测试方法,设置完DKIM 记录后,用这个设置了DKIM记录的邮箱发一封邮件到Gmail。
然后点击发送至 xxx 右边的下三角,看看是否有正确的记录。
如果设置正确,则会有如下的结果:

邮送域: qicai.us
署域: qicai.us

如果值设置出错,查看邮件源文件,header信息区Authentication-Results字段,就会有这样的记录:

dkim=neutral (no signature) header.i=@qicai.us

如果设置正确,header信息区Authentication-Results字段,就会有如下记录

dkim=pass header.i=@qicai.us

如有,且域名是你所期望的,则一切顺利!

至此,DKIM要设置的DNS记录已经完成。
预祝顺利!

本文参考iredmail官方文档:https://code.google.com/p/iredmail/wiki/DNS_DKIM