DomainKey 介绍:
雅虎的这项技术被称之为“DNS端的电子签名(DomainKeys)”,专门对付各种各样经过改头换面的垃圾邮件。
垃圾邮件经常通过改动电子邮件的发送着对用户进行欺骗,用户往往会误以为这不是垃圾邮件,因而打开查看的可能性加大。
雅虎的“DomainKeys”允许接受电子邮件的系统对邮件进行检查,以确定邮件发送者的身份是不是假的。
“DomainKeys”通过使用加密技术完成电子邮件发送者身份的验证。外发的邮件通过私人密码进行数字签名,
而接受电子邮件的系统则使用公共密码对签名进行核实。
 

一. 安装domainkey

实施步骤
OS:RedHat 2.6.9-55.EL
postfix:postfix-2.5.1-1.mysql.sasl2.vda.rhel4
dk-milter:dk-milter-1.0.1.tar.gz

1. 安装dk-milter

注意:

安装之前请先检查是否安装了sendmail-devel软件包
因为在编译时会有依赖关系
下载http://nchc.dl.sourceforge.net/sourceforge/dk-milter/dk-milter-1.0.1.tar.gz

                      
[root@  opt]#tar zxvf dk-milter-1.0.1.tar.gz
[root@  opt]#cd dk-milter-1.0.1
[root@  opt]#sh Build -c
[root@  opt]#sh Buld install
[root@  opt]#cd dk-filter
[root@  opt]#chmod +x  gentxt.csh
[root@  opt]#./gentxt.sh  default  *****.com                   
[root@  opt]#cp default.private  /etc/postfix/****.com.key.pem  
[root@  opt]#chmod 600  /etc/postfix/****.key.pem
[root@  opt]#/usr/bin/dk-filter -A -l -p inet:8891@localhost -d ****.com -s /etc/postfix/****.com.key.pem -S default


dk-filter 参数说明:

-a peerlist      # 哪些主机不做检查
-A               # dk-filter 挂掉后自动重启
-b modes         # s (singer) / v (verify) 预设为sv
-c canon         # 预设是 simple (邮件头不变),
                 # 另外是 relaxed (邮件头可能修改,去除空白,不换行)
-C config        # 详细配置
-d domlist       # 要签名的域名列表,以逗号分隔
-D               #
-f               # 前台执行
-h               # 在 Mail Header 中加入 X-DomainKeys 信息
-H               # DomainKey-Signature 说明签名的 header 信息
-i ilist         # 只做签名, 不做验证,默认127.0.0.1
-I elist         # 通过此主机转发的信做签名,不做验证
-l               # log 记录日志到 maillog
-m mtalist       # MTA 名字,也就是 DaemonPortOptions 中的 Name,預設是全部
-M macrolist     # MTA macros which enable signing
-o hdrlist       # 哪些 Header 不 sign,Ex: -o to,subject,date , From 一定要 sign
-P pidfile       # pid file 进程路径
-s keyfile       # private key
-S selector      # selector,会以 selector._domainkey.Domain 进行 type=TXT 查询
-u userid        # 运行用户
-V               # 检查版本


二. DNS配置:
系统自带的BIND,为节省时间 我在这里使用webmin做了配置记录
这个webmin很强大了,配置简单不容易出错 DNS基本配置不是本文重点
最基本的DNS A,MX记录等在这里就不介绍了

只写出与本文相关的配置:如下

1. 在dns 配置文件中添加文本记录:
[这个记录很难在服务商的服务器上添加]
default._domainkey.****.com.    IN  TXT    "k=rsa; t=y; p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALcmSvH4TMzpP5zi6zOy/Ffwl4FQ/irk 8T6NhlfqeJuPY04uC8jFEE603zU5iktvK/VKb6P9WHSA54CSlULzaXcCAwEAAQ=="
_domainkey.****.com.    IN  TXT     "k=rsa; t=y; p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALcmSvH4TMzpP5zi6zOy/Ffwl4FQ/irk 8T6NhlfqeJuPY04uC8jFEE603zU5iktvK/VKb6P9WHSA54CSlULzaXcCAwEAAQ=="

测试是否生效: nslookup

>set type=txt

>default._domainkey.××××.com

Non-authoritative answer:

default._domainkey.××××.com    text =

        "k=rsa; t=y; p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALcmSvH4TMzpP5zi6zOy/Ffwl4FQ/irk 8T6NhlfqeJuPY04uC8jFEE603zU5iktvK/VKb6P9WHSA54CSlULzaXcCAwEAAQ=="

出现上边的公钥就表示没问题了


2. 设置 SPF
Sender Policy Framework。SPF可以防止别人伪造你来发邮件,是一个反伪造性邮件的解决方案。
当你定义了你的domain name的SPF记录之后,接收邮件方会根据你的SPF记录来确定连接过来的IP地址是
否被包含在SPF记录里面,如果在,则认为是一封正确的邮件,否则则认为是一封伪造的邮件。
在DNS服务器上添加如下记录:

*****.com.    IN    TXT    "v=spf1 a mx ~all"

3. 修改 /etc/postfix/main.cf
添加如下参数:
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891

重启postfix


三. 测试

发一测试邮件到互联网上的邮件用户

Return-Path: <andyliu@****.com>
X-Original-To: andyliu@****.cn
Delivered-To: andyliu@****.cn
Received: from mail.****.com (unknown [XXX.XXX.XXX.XXX])
    by mail.****.cn (Postfix) with ESMTP id 0CEFA7C0352
    for <andyliu@e****.cn>; Thu,  1 Jul 2010 15:22:16 +0800 (CST)
Received: from test-pc (unknown [192.168.6.1])
    by mail.****.com (Postfix) with ESMTPA id 673329810B
    for <andyliu@****.cn>; Thu,  1 Jul 2010 14:45:30 +0800 (CST)
DomainKey-Signature: a=rsa-sha1; s=default; d=****.com; c=simple; q=dns;
    b=Qg2Qo63K8I/gMI2xL5Gc4svTlyvLeuidFflG9L0xgeJxqnDvx+oKGMeXOgOQ+nET1
    LtOXPB4Llf9kAcBL9n6LQ==

其中Domainkey 部分就说明了公共密钥已经添加到了邮件头中!
恭喜你完成了!