ORF反垃圾邮件系统

邮件服务器-邮件系统-邮件技术论坛(BBS)

 找回密码
 会员注册
查看: 8235|回复: 1
打印 上一主题 下一主题

[求助] 给hmailserver添加DKIM签名

[复制链接]
跳转到指定楼层
顶楼
发表于 2010-11-19 14:33:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
中午费了点时间,写了这个,高手请不要见笑,Exchange咱不会用,只能搞些简单点的东西了。
原文在http://dagai.net/archives/870
-----------------------------------------------------------------------------------------------
上一篇说了hmailserver如何设置反垃圾邮件功能,现在来说说如何让自己的hmailserver发出去的邮件不要被别人反垃圾了。

hmailserver的反垃圾邮件功能中有提到给垃圾评分标准,其中比较主要的四个,SPF、HELO、DNS MX、DKIM签名,看hmailserver默认的分值,无疑DKIM签名是最高的,如果校验DKIM失败,直接会当作垃圾邮件的。无疑,如果对方的邮件服务器启用了这几个校验,如果你发出去的邮件未通过,就会被当作垃圾邮件了,我试了一下,都没有设置,发往gmail的邮件直接发送失败,发往腾讯企业邮箱的邮件还收到了。

那如何让这些校验通过呢?首先你最好得有一个固定IP,这样才好设置SPF,需要给你的域名添加一个txt记录,里面包含你邮件服务器的IP。可以用nslookup来查询一下qq.com的txt记录,那就是SPF了,关于SPF的介绍,可以查看http://baike.baidu.com/view/1372988.htm来了解一下。HELO这是直接在hmailserver的Settings-Protocols-SMTP-Delivery of e-mail中的local host name中填写。MX记录解析,这个在域名中添加mx记录即可,最后就到了DKIM签名。
DKIM的全称是Domain Key Identified Mail,域名密钥识别邮件,就是邮件服务器对自己发的邮件签名,表示这个邮件是自己发出去的,如果一个对方邮件服务器能够验证这个签名,就表明这个邮件可能不是垃圾邮件,因为垃圾邮件一般都会伪造地址发送的。那岂不是那些垃圾邮件发送者只要给垃圾邮件也每个签名也能表示它发送的不是垃圾邮件?接收邮件服务器如何能辨别这个签名真假?那发送邮件服务器跟接收邮件服务之间有个约定,呃,你记好了,我的签名是如何如何防伪的,这就是基于私钥与公钥的签名。
发送方基于私钥给邮件DKIM签名,接收方根据发送方的公钥来验证这个DKIM签名,很明显,私钥是给发送邮件服务器来使用的,那公钥如何传输呢?不多说了,了解一下就行了,下面是网上的介绍。

一些签名的具体细节:
1、算法,必须支持rsa-sha256,可选支持rsa-sha1。key size建议1024。
标准化(Canonicalization). 有的邮件服务器可能会少量修改文件内容,比如换行或者移除一些空格等等。因此DKIM定义了两种2、标准化方法,simple和relaxed。simple最简单,就是一个字节也不能改,改了就错。relaxed就是可以少量的修改一些空格等等。邮件头和内容这两部分的标准化可以选择不同的方法,表示起来用/隔开,比如simple/relaxed表示头部用simple方式,内容用relaxed方式来标准化。
3、过程,签名是先对内容(body)部分hash,然后把这个body hash放在header里面,再对头部做签名。头部也不是所有字段都签名的,只有一些常用的字段,或者比较有意义的,会被签名。像Received和Return-Path这样的字段一般不被签名。而From则必须被签名。

下面我们来给hmailserver加上DKIM签名,工欲善其事,必先利其器,咱们得把器准备好,hmailserver这个主角可不能少,当然,用其他的邮件服务器也可以参考一下。
Openssl,我们要用它来生成私钥与公钥,在这里下载openssl的windows版本,根据需求吧,64位系统就下64位的,我这里下的是Win32 OpenSSL v1.0.0a,安装这个得先安装Visual C++ 2008 Redistributables,呃,中文windows就下中文的,英文就下英文的,别搞得装不上重下,装好openssl咱就来生成密钥吧。
详情可以参考一下这篇文章
http://www.elandsys.com/resources/sendmail/dkim.html
默认openssl安装在C:\OpenSSL-Win32,按照下面命令生成

cd C:\OpenSSL-Win32\bin
openssl.exe genrsa -out rsa.private 1024 //生成私钥
openssl.exe rsa -in rsa.private -out rsa.public -pubout -outform PEM //生成公钥

然后会看到bin目录下多了两个文件rsa.private与rsa.public,先把私钥rsa.private移到hmailserver的安装目录去,然后用记事本打开rsa.public,里面有一串base64编码的字符串,掏出来,然后到域名解析的控制面板去添加一个txt记录,名称为hmail._domainkey(hmail这个可自定义,后面的_domainkey是必需的),记录值为k=rsa; t=y; p=base64,这个p=后面的base64换成rsa.public里面的那串字符串,添加完txt记录,可以用以下命令来查看一下是否生效了

nslookup
set type=txt
hmail._domainkey.domain.com //domain.com替换为你的域名

如果看到像下面的结果就表示生效了

非权威应答:
s0907._domainkey.qq.com text =

“k=rsa; t=y; p=MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhAJJepXlnnJe5bFumOeyG8v2W8
LFpudv3kOkV3eMapHGkl1TU6hgVCyNSOJgYgQkvozdZRJ5b9d7FJsrEhHbeR+klTcLYCe1u1HP7HbxdU
fDU34szV/Tc0rE125WENSGXlwIDAQAB”

这里公钥就设置完成,然后在hmailserver邮件服务器中设置私钥。
打开到Domains-你的域名-DKIM signing,选上Enabled激活DKIM签名先,
Private key file就选择之前移到hmailserver目录的rsa.private文件,
Selector里填入hmail,这个要跟添加txt记录时_domainkey前面的值一致。
Header method与Body method都选择Relaxed,前面说了Simple比较严格一些,如果你添加的记录里面多或少了一个空格,那就通不过了。
Signing algorithm,签名算法,SHA1肯定是赶不上SHA256安全,不过SHA256加密时占用CPU资源会高一些,根据你自己的需求选吧。
设置完成,当然得Save一下,然后发个邮件给gmail试试,呃,为啥选gmail呢,因为gmail比较好看,比较好看原始邮件,可以在里面查找到dkim=pass字样,还有dkim-signature后面的签名,OK,成功了,DKIM签名就说到这里,费了一中午时间。
并不是说你做到了这样你的邮件就不会被判为垃圾邮件了,只是少了许多可能罢了,还有方方面面的原因,比如你的ip在rbl里之类的,不在赘述。
沙发
发表于 2010-11-20 10:26:52 | 只看该作者
大虾帮忙, 关于HMAIL server  问题~  在你上一贴~
您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

小黑屋|手机版|Archiver|邮件技术资讯网

GMT+8, 2024-12-26 04:08

Powered by Discuz! X3.2

© 2001-2016 Comsenz Inc.

本论坛为非盈利中立机构,所有言论属发表者个人意见,不代表本论坛立场。内容所涉及版权和法律相关事宜请参考各自所有者的条款。
如认定侵犯了您权利,请联系我们。本论坛原创内容请联系后再行转载并务必保留我站信息。此声明修改不另行通知,保留最终解释权。
*本论坛会员专属QQ群:邮件技术资讯网会员QQ群
*本论坛会员备用QQ群:邮件技术资讯网备用群

快速回复 返回顶部 返回列表