邮件服务器DNS设置-----MX、SPF、DKIM记录详解
DNS记录,需要你到你的域名托管商那里进行设置或者你自己管理DNS服务器。不少域名托管商不支持txt记录或者不支持DKIM记录,所以你就无法使用SPF和DKIM的功能。 DNS的修改,需要48小时以上才能生效。 国内的万网是不支持DKIM,目前新网是支持SPF和DKIM。
1.MX记录 邮件的MX记录最好是指向机器A记录,尽量不要直接指向IP地址(不符合规范)。 1.1 添加A记录 mail.example.com 192.168.1.100 1.2 添加MX记录 example.com mail.example.com 1.3 测试MX记录 # host exmple.com example.com mail is handled by 10 mail.example.com. #nslookup mail.example.com Name:mail.example.com Address:192.168.1.100
2.SPF记录 SPF是指Sender Policy Framework,是为了防范垃圾邮件而提出来的一种DNS记录类型,SPF是一种TXT类型的记录。SPF记录的本质,就是向收件人宣告:本域名的邮件从清单上所列IP发出的都是合法邮件,并非冒充的垃圾邮件。设置好SPF是正确设置邮件发送的域名记录和STMP的非常重要的一步。 例如: SPF 记录指向A主机记录 example.com. 3600 IN TXT "v=spf1 mx mx:mail.example.com ~all" SPF 记录指向IP地址 example.com. 3600 IN TXT "v=spf1 ip4:192.168.1.100 ~all" 。(以上内容参考自:http://baike.baidu.com/view/1372988.htm) 2.1 如何查看SPF Windows下**DOS模式后用以下命令: nslookup -type=txt 域名 Unix操作系统下用: # dig -t txt 域名
2.2 SPF的简单说明如下: v=spf1 表示 spf1 的版本 IP4 代表IPv4进行验证(IP6代表用IPv6进行验证), 注意 “ip4:” 和“IP”之间是没有空格的 ~all 代表结束
2.3 SPF记录例释 我们看这条SPF: yourdomain.com "v=spf1 a mx mx:mail.jefflei.com ip4:202.96.88.88 ~all" 这条SPF记录具体的说明了允许发送 @yourdomain.com 的IP地址是:a (这个a是指 yourdomain.com 解析出来的IP地址,若没有配置应取消) mx (yourdomain.com 对应的mx,即 mail.yourdomain.com的A记录所对应的ip) mx:mail.jefflei.com (如果没有配置过mail.jefflei.com这条MX记录也应取消) ip4:202.96.88.88 (直接就是 202.152.186.85 这个IP地址) 其他还有些语法如下: - Fail, 表示没有其他任何匹配发生 ~ 代表软失败,通常用于测试中 ? 代表忽略
如果外发的ip不止一个,那么必须要包含多个 v=spf1 ip4:202.96.88.88 ip4:202.96.88.87 ~all
2.4 测试SPF设置结果 设置好 DNS中的SPF记录后,发送邮件给自己的gmail,然后查看邮件的源文件,应该能看到类似的邮件头,其中有pass表示设置成功。 Received-SPF: pass (google.com: domain of test@jefflei.com designates 202.96.88.87 as permitted sender) client-ip=202.96.88.87; 需要注意的是,服务器的IP若有更改,需要同时修改SPF!!!
2.5 利用SPF记录防止垃圾邮件 在Unix下可以安装配置SpamAssassin之类的插件来防止垃圾邮件和钓鱼邮件(Phishing)
3.DKIM记录(通过Domainkeys或DKIM给自己的邮件添加一个数字验证) DKIM 技术通过在每封电子邮件上增加加密的数字标志,然后与合法的互联网地址数据库中的记录进行比较。当收到电子邮件后,只有加密信息与数据库中记录匹配的电子邮件,才能够**用户的收件箱。它还能检查邮件的完整性,避免黑客等未授权者的修改。 DKIM 的基本工作原理同样是基于传统的密钥认证方式,他会产生两组钥匙,公钥(public key)和私钥(private key),公钥将会存放在 DNS 中,而私钥会存放在寄信服务器中。私钥会自动产生,并依附在邮件头中,发送到寄信者的服务器里。公钥则放在DNS服务器上,供自动获得。收信的服务器,将会收到夹带在邮件头中的私钥和在DNS上自己获取公钥,然后进行比对,比较寄信者的域名是否合法,如果不合法,则判定为垃圾邮件。由于数字签名是无法仿造的,因此这项技术对于垃圾邮件制造者将是一次致命的打击,他们很难再像过去一样,通过盗用发件人姓名、改变附件属性等小伎俩达到目的。在此之前,垃圾邮件制造者通过把文本转换为图像等方式逃避邮件过滤,并且使得一度逐渐下降的垃圾邮件数目再度抬头。 注意:Amavisd-new 只有 2.6.0 及以上版本集成了 DKIM 功能。
下面简单说下安装方法(如果没安装的话)
(可参考http://eric.lubow.org/2009/mail/setting-up-dkim-and-postfix/)
(1)下载DKIM的source包,编译安装。由于DKIM需要libmilter模块,如果你用的SMTP软件是sendmail的话,会在sendmail中自带此模块。但如果你用的是其他软件(如postfix)的话,那么就要先下载最新的sendmail source包,解压后可找到子目录“libmilter”。在里面用./Build和./Build install安装libmilter模块。
(2)通过dkim-genkey生成证书。dkim可以给多个服务器发布不同的证书验证。方法是通过Selector来区分。在使用dkim-genkey生成证书时,可通过参数-s来设置selector。如果不指定selector的话,系统默认使用default作为selector。参数-d是域名。
如: dkim-genkey -s mail1 -d jackyhe.com 可生成一个selector是mail1的jackyhe.com下的证书。
名称成功执行后,会在当前目录生成两个名字叫mail1.txt和mail1.private的文件。mail1.txt是公钥部分,需要添加到DNS的txt记录中。
内容如:
mail1._domainkey IN TXT “v=DKIM1; g=*; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2ubSRHUKzL4ucfzuMKEHyy6rx/WlrZB5SKYKrCsSJWUpQstNqjcaLntaQtmKEnDgDr5rMvklaByf8vE5guqZerZ8UWeBx5joIwuohjkapgM/R6lFmI9VUj8N/c5O9AxQAOQLgnDNPl5OQamUuOp9c5W0jLbYd/hrymPYBSKEi0wIDAQAB” ; —– DKIM mail1 for jackyhe.com
我们需要在DNS的管理界面中添加一个新的txt记录。名字写“mail1._domainkey”(txt文件中红色部分,不同的selector就不同了)。值为txt文件中双引号的内容(如蓝色部分)。
然后,把mail1.private(这是密钥)保存在服务器上的安全的目录。如/etc/mail/dkim/keys。
(3)配置DKIM,DKIM的配置文件是dkim-filter.conf。里面有很多默认的设置。我们只要改下面的内容就可以了:
Domain jackyhe.com ## 设置域名 ExternalIgnoreList /etc/mail/dkim/trusted-hosts ## 设置可信任机器,如127.0.0.1
InternalHosts /etc/mail/dkim/trusted-hosts
KeyFile /etc/mail/dkim/keys/mail1.private ##就是密钥的保存位置
Selector mail1 ##本机使用的selector的名字,比如mail1
LocalADSP /etc/mail/dkim/local-adsp-rules ## 可在此文件中添加自己的ADSP规则(ADSP规则在下面说明)
Socket local:/var/run/dkim-milter/dkim.sock
(4)启动DKIM,如 /usr/sbin/dkim-filter -x /etc/dkim-filter.conf
(5)在原来的SMTP服务端(如sendmail,postfix)上修改设置。如postfix中可添加如下设置:
smtpd_milters = unix:/var/run/dkim-milter/dkim.sock non_smtpd_milters = unix:/var/run/dkim-milter/dkim.sock milter_protocol = 2
重启SMTP服务后看是否可以发邮件。如果在maillog中看到”DKIM-Signature” header added,就应该大功告成了。
试试发邮件给gmail.com的邮箱,然后在gmail中看看这邮件的邮件头,看看有没有找到dkim=pass。如果有就恭喜你了。
(6)最后说说什么是ADSP。在DKIM说明(http://www.dkim.org/specs/draft-ietf-dkim-ssp-04.html)中提到。我们可以有如下设置来限制没有通过DKIM签名而又用我们的域发出的邮件。
我们可以在DNS中添加一个新的TXT记录,名称是“_adsp._domainkey”,值是“dkim=all”。
“dkim=”后可有三个可选值:
unknow: 意思是从这个域发出的邮件可带DKIM证书,也可不带。
all: 意思是从这个域名发出的证书都应该带DKIM证书的。
discardable: 意思是强烈建议接收邮件的对端把没有DKIM证书或DKIM验证失败的邮件丢弃掉。
而之前提到的“LocalADSP”中的设置,就是在自己服务器上设置规定,在接收对方的邮件时不查询DNS的ADSP记录,而是按照自己的要求设置。
3.1 这里可以通过iredmail.tips 获得域名的DKIM,也可以在命令行下输入 # amavisd-new showkeys ; key#1, domain example.com, /var/lib/dkim/example.com.pem dkim._domainkey.example.com. 3600 TXT ( "v=DKIM1; p=" "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDGNVMuQRKqYeySIzqTGTm3xRzF" "/ZzhmMnpZkEcVVjFAk+t7E388oFGu/knyh6KBKwpZxHUN5HoOYVjMudqaR2FcSvK" "z+joFj8Vh3rXoTLa1zHDyfD7hICzxdEgmQZ8MJM5rjPPrRGZXnPowNYDsd6nDJ86" "N38iFYU+jALBYDLBwQIDAQAB")
3.2 把上面记录添加到ISP的DNS记录 dkim._domainkey.example.com. v=DKIM1; p=MIGfMA0....(省略)DLBwQIDAQAB
3.3 添加完DNS记录后,如果记录生效,可以通过运行命令检测 # amavisd-new testkeys TESTING: dkim._domainkey.example.com => pass
检查DNS设置 下面有几种方法,可以帮助你检测DNS是否设置生效和正常工作: 1.nslookup #nslookup Default Server: unknown Address: 192.168.1.1 > server 4.2.2.1 Default Server: vnsc-pri.sys.gtei.net Address: 4.2.2.1 > set type=mx > example.com Server: vnsc-pri.sys.gtei.net Address: 4.2.2.1 Non-authoritative answer: example.com MX preference = 20, mail exchanger = mail.example.com > set type=txt > example.com Server: vnsc-pri.sys.gtei.net Address: 4.2.2.1 Non-authoritative answer: example.com text = "v=spf1 ip4:192.168.1.100 -all" > dkim._domainkey.example.com Server: vnsc-pri.sys.gtei.net Address: 4.2.2.1 Non-authoritative answer: dkim._domainkey.example.com text = "v=DKIM1; p= MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCsgZaIvYHAos2jbp3CHW0 AwrTnAEwV1p4EaZP/JuF8t1BETBVg6WJr3YWN5ijCpi9vnw96nmf/u5MgtbLwZ+AzDBkbOY7Jbb/hIO+ mpmmfdJAY3w8KoXLCuQKDysXOys45YtfJEj66s51EHH3W+iXPYw3I/NWHjY3a5/mXnk4XJQIDAQAB"
2.linux dig MX记录 # host exmple.com example.com mail is handled by 10 mail.example.com.
SPF记录 # dig txt hotmail.com ; <<>> DiG 9.4.2-P2 <<>> txt hotmail.com ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43130 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION: ;hotmail.com. IN TXT
;; ANSWER SECTION: hotmail.com. 3600 IN TXT "v=spf1 include:spf-a.hotmail.com include:spf-b.hotmail.com include:spf-c.hotmail.com include:spf-d.hotmail.com ~all"
;; Query time: 176 msec ;; SERVER: 64.71.161.8#53(64.71.161.8) ;; WHEN: Sat Dec 5 08:43:51 2009 ;; MSG SIZE rcvd: 157
DKIM记录
#dig txt dkim._domainkey.example.com
参考:
http://www.ichiayi.com/wiki/tech/install_spf_dkim
http://blog.csdn.net/mal327/article/details/6700493
http://hi.baidu.com/dongfangmn/blog/item/a214ec013b554d037aec2c12.html
|