kn007的个人博客
♥ You are here: Home > 软件与网络 > VPS > [Postfix进阶]使用新版DKIM签名(OpenDKIM)

[Postfix进阶]使用新版DKIM签名(OpenDKIM)

by | 39 Comments

提醒:本文最后更新于 2838 天前,文中所描述的信息可能已发生改变,请仔细核实。

postfix-with-opendkim虽然OpenDKIM的前身dkim-milter仍然可以使用,而且也不存在性能问题,或其他问题,但总有人喜新厌旧。(如何配置dkim-milter详见《[Postfix进阶]CentOS邮件系统添加DKIM签名》)

注:该文章不适合Ubuntu和Debian,需要做些变动。这两系统比较煞笔,还要修改/etc/default/opendkim才行。

今个儿就来说说,OpenDKIM的配置方法(仍然以CentOS示例),其实也很简单,请继续往下看。

本人系统是CentOS 6.6 X64,考虑到方便以后可以升级,我们使用yum方式来安装。

我写了个Shell的自动安装脚本。(注意:确保你的hostname是你的域名)

#!/bin/bash
#Made By kn007
#Add EPEL Community Project
rpm --import http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
#Fix EPEL Setup Error
sed -i 's:#baseurl:baseurl:g' /etc/yum.repos.d/epel.repo
sed -i 's:mirrorlist:#mirrorlist:g' /etc/yum.repos.d/epel.repo
#Install Postfix DKIM Signature
yum -y install opendkim
cat > /etc/opendkim.conf<<EOF
UserID                  opendkim:opendkim
UMask                   022
Mode                    sv
PidFile                 /var/run/opendkim/opendkim.pid
Canonicalization        relaxed/relaxed
TemporaryDirectory      /var/tmp
ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts
InternalHosts           refile:/etc/opendkim/TrustedHosts
KeyTable                refile:/etc/opendkim/KeyTable
SigningTable            refile:/etc/opendkim/SigningTable
MinimumKeyBits          1024
Socket                  inet:8891
LogWhy                  Yes
Syslog                  Yes
SyslogSuccess           Yes
EOF
mkdir -p /etc/opendkim/keys/`hostname -f`
opendkim-genkey -D /etc/opendkim/keys/`hostname -f`/ -d `hostname -f` -s default
chown opendkim:opendkim -R /etc/opendkim/
chmod -R 700 /etc/opendkim
echo "default._domainkey.`hostname -f` `hostname -f`:default:/etc/opendkim/keys/`hostname -f`/default.private" >> /etc/opendkim/KeyTable
echo "*@`hostname -f` default._domainkey.`hostname -f`" >> /etc/opendkim/SigningTable
echo "localhost" >> /etc/opendkim/TrustedHosts
echo "`hostname -f`" >> /etc/opendkim/TrustedHosts
cat >> /etc/postfix/main.cf<<EOF

#DKIM
milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:8891
non_smtpd_milters = inet:8891
EOF
service opendkim start
service postfix restart
cp /etc/opendkim/keys/`hostname -f`/default.txt /root/`hostname -f`-dkim-signature_default.txt
echo "open '/root/`hostname -f`-dkim-signature_default.txt', then add the TXT record to you DNS resolution system."

就这样,就好了。过程非常简单。

最后,需要你打开/root下的XXX-dkim-signature_default.txt添加到DNS域名解析商里面,如下所示。
dkim-dns-txt-record

转载请注明转自:kn007的个人博客的《[Postfix进阶]使用新版DKIM签名(OpenDKIM)

donate
有所帮助?

Comments

39 Comments立即评论
  1. 好吧 :roll:

    1. MOD回复

      @hannah: :o 。。额

  2. LV3回复

    :x 啦啦啦

    1. MOD回复
  3. 回复

    学习了。

    1. MOD回复

      @DUX主题: 主题不错

  4. :x 代码!

    1. MOD回复

      @灰常记忆: 复制就能用

    2. @kn007: 木机器 :o

    3. MOD回复
  5. LV2回复

    留言错误,看另一条,不好意思。

  6. LV2回复

    按照你的安装了。
    得到的default.txt里面是这样的格式,并没有你截图里面的 g=*;(我自己按照你的格式解析到dns里面去了),如下:
    default._domainkey IN TXT ( "v=DKIM1; k=rsa; "
    "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC91VFxYN+53apjWt4it6Y.............

    然后重启
    service opendkim restart
    service postfix restart
    测试发信了n封,等了一个小时都收不到。
    然后service opendkim stop,停止opendkim
    3秒钟内,之前没收到的信立马都收到了。(gmail和QQ邮箱中都分别收到了。)
    请问这是opendkim没装好导致的? 还是要在postfix里面有另外的配置? 我的postfix已经正常可以发信,spf也可以。
    希望回复,谢谢。

    1. MOD回复

      @小王涛: 你是centos的哪个版本?
      这种描述我无法为你解答任何问题。需要提供log。谢谢。
      DKIM Key 简单测试:http://dkimcore.org/c/keycheck
      或许你也可以试试旧版 :razz:

    2. LV2回复

      @kn007: CentOS release 6.5,64位 ,日志是这个吗?:/var/log/maillog

    3. MOD回复

      @小王涛: 嗯。对的。主要看下有什么错误。
      另外下次在安装时,可以利用类似 sh tmp.sh >install.log 来保存安装日志。

    4. LV2回复

      @kn007: 安装很正常,没报错,刚刚我看了日志。错误如下(域名和邮箱以免ad我替换了。)

      Mar 25 14:18:36 v16 postfix/pickup[11964]: D57F74261C: uid=80 from=《mypostfix@xxxx.com》
      Mar 25 14:18:36 v16 postfix/cleanup[12082]: D57F74261C: message-id=《20150325061836.D57F74261C@mail.xxxx.com》
      Mar 25 14:18:36 v16 opendkim[11867]: can't load key from /etc/opendkim/keys/xxxx.com/default.private: Permission denied
      Mar 25 14:18:36 v16 opendkim[11867]: D57F74261C: error loading key 'default._domainkey.xxxx.com'
      Mar 25 14:18:36 v16 postfix/cleanup[12082]: D57F74261C: milter-reject: END-OF-MESSAGE from localhost[127.0.0.1]: 4.7.1 Service unavailable - try again later; from=《mypostfix@xxxx.com》 to=《test@qq.com》

      -------------
      /etc/opendkim/keys/xxxx.com/default.private 这个文件是存在的,并且用户名当组都是opendkim ,权限是700,后来我改为755测试了也无效。

    5. MOD回复

      @小王涛: Permission denied,如果700不行,就只能600试试,不可能会有x权限的

    6. MOD回复

      @小王涛: 600不行就644试试

    7. LV2回复

      @kn007: 700 755 600 666 644 600 444 400 这些权限全部试过了,还是不行,昨天搞了一天+一个通宵,今天爬起来又搞,心力交瘁了。 :grin:

    8. MOD回复

      @小王涛: :o :o :o :o :o selinux关了试试?

    9. LV2回复

      @kn007: selinux 一直是关着的,防火墙也临时关闭了,也测试没用。

    10. MOD回复

      @小王涛: ps -Aef 看下opendkim是被哪个用户运行的,确定是不是opendkim这个用户运行的。

    11. LV2回复

      @kn007: 是的
      opendkim 17815 0.0 0.6 138792 3036 ? Ssl 15:28 0:00 /usr/sbin/opendkim -x /etc/opendkim.conf -P /var/run/opendkim/opendkim.pid

    12. MOD回复

      @小王涛: 那特么的就奇怪了,你换成root启动试试,文件也用root授权

    13. LV2回复

      @kn007: :x :x :x 无效,root启动后opendkim自动接管。。

    14. MOD回复

      @小王涛: 这还真是奇了怪了。在很多vps都试过没问题。。。
      要不你试下dkim-milter,一样功能实现

    15. LV2回复

      @kn007: 好的,我试试。

    16. MOD回复

      @小王涛: 我没有空闲的vps,晚些我买一个测试下。你postfix都配置了什么?什么版本?是yum安装吗?

    17. LV2回复

      @kn007: 是yum安装的,版本是 postfix-2.6.6-6.el6_5.x86_64

    18. MOD回复

      @小王涛: 脚本第36行至43行已经配置了postfix。

  7. LV2回复

    另外,好像hostname -f 这个是不能执行的吧?会报错,我是直接用域名替代的。

    1. MOD回复

      @小王涛: hostname -f 是可以执行的,你可以自己搜索这条命令

    2. LV2回复

      @kn007: 嗯,这个的问题知道是在哪里了。

    3. @小王涛: 字母是不是打错了

  8. 最近一直在实验这个东西,但是确认操作正确,到了验证Key的时候总是提示:opendkim-testkey: keys do not match
    :o :o :o :o :o :o

    1. MOD回复

      @王琪亮: 你是什么系统,非centos会有一些不同

    2. @kn007: 我确认了一下,你的文章是给Centos写的……我的系统是Ubuntu 17.04

    3. MOD回复

      @王琪亮: 嗯,注意下文章红色字

    4. @kn007: 好吧看见了……
      配置了/etc/default/之后发现这货居然不听端口…… :cry:

icon_wink.gificon_neutral.gificon_mad.gificon_twisted.gificon_smile.gificon_eek.gificon_sad.gificon_rolleyes.gificon_razz.gificon_redface.gificon_surprised.gificon_mrgreen.gificon_lol.gificon_idea.gificon_biggrin.gificon_evil.gificon_cry.gificon_cool.gificon_arrow.gificon_confused.gificon_question.gificon_exclaim.gif