Chinaunix首页 | 论坛 | 博客
  • 博客访问: 600496
  • 博文数量: 129
  • 博客积分: 6240
  • 博客等级: 准将
  • 技术积分: 1765
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-18 15:42
文章分类

全部博文(129)

文章存档

2015年(1)

2012年(3)

2011年(6)

2010年(14)

2009年(105)

我的朋友

分类:

2009-05-27 11:21:32

认证

在邮件认证的这个项目里,所使用的方法是利用DNS检查邮件传送端的网域,去确认邮件是否来自合法的
邮件服务器。它不同于邮件内容过滤或是寄件者电子签章。 我们仅简短的介绍,电子邮件会有哪些验证的
规则,让用户有足够的了解去把这些认证的规则应用到电子邮件里。而细节部分可参阅相关规范的标准
文件。

最简单被用来识别邮件的规则,是利用DNS反向查询方式加上正向查询,来验证寄出邮件的IP地址是否符合在这些网域里面。然而,这个方式比较没有弹性,因为这个方式原本就不是设计用来验证邮件的;这也是为什么这种验证的方式被用在SMTP以及常见的邮件伪造,在假的网域上被寄出。因此,真正的邮件识别方式与规则就这样被提出来以解决如此的问题。

传送端规则架构(Sender Policy Framework, SPF)、传送端识别(SenderID, SID)、网域签章(DomainKey) 以及网域签章邮件识别(DomainKeys Identified Mail, DKIM) 都是用来验证传送端的网域是否合法。

DomainKeys和DKIM的操作

DomainKeys和DKIM的工作原理是类似的。DomainKey最初是由Yahoo提出的。后来,人们吸收了该观念并提出了DKIM。它的概念是:生成一对公共密钥和私有密钥。“寄件者的邮件服务器”运用私有密钥,在外送的邮件上附上一个签名;当这些邮件抵达“收件者的邮件服务器”时,收件者的邮件服务器则使用公共密钥,自DNS服务器发出一个查询去验证签名的合法性。



该机制的原理是:公共密钥用来“验证”签名,私有密钥则用来“签署”签名。而且,人们无法自“公共密钥”猜测出“私有密钥”。所以,当签名无法通过验证时,这即暗示了此封电子邮件在寄出时并没有经过正确的签名程序,它可能是一封伪造的邮件。




以下是一对私有密钥和公共密钥的范例:

-----BEGIN RSA PRIVATE KEY-----

MIICXQIBAAKBgQC+2og5sex8zeXAZonl2/vnzVjsUHLKUv0DSoZeWgpQrB5FQgf7Ttd18w1FT
jAmv8hK4GtYOSRtoBZFUCVMwmBB9Tkx60EHckp+Fb494OZYbenL8hJL7XLuS5ux4tokwGW
//3dBUxIHnTxIRt+aJ7Ik96GIr90lUt0oqe3FbAE6/wIDAQABAoGADpcCJvb1Dy1mTOkJzaqdfUD
zdU1JGTJy6Rd/YiMb+sLNpZnApnOGgRvNfejWQYATvbWePyZPJJpCWZYg49dQKFiS8/wA7fd
qodAlyAOS5vhFmUBdcJh45mbHLRElwVfDGIx1tkFlwxGZLvIUP08Q2i7mneO9i421FOKLTEl3p
rECQQD78J1N5GcnUor3yt8diBJOyJm1UPG31bUtTidXw980tjlnIlcZntIgg0q9VIYooJZhjs0O9aeA
5aw1TZBW5N6LAkEAwe3njHPtoyH9zsUROsnBg48UtGQZ1KgC3nPFL+LxxRjfoU/Ew54bdcKr0
Ye8p3qM3IwZ1aqES/SyVO+SJL/33QJBAPkYXJ9v7WGephH7fn/3UoqcogT4hBWL8bdap2GKIz0
90iGbfVyyf/Vvek0Zrg+rPyQ0CaD512SFMK//AXA4l6MCQFu+TLhpb5apUgUrvYbuQ5oValocsQ
uloBXU9wg8eNwhdEpADnnsplkDi31Ilbs1gsYjkWU/ke7NCECeRakVGBECQQD4Cjs2CWSZotij
yPab/dG0ynP7Wsdw3EcHlml1kO2JHdwYOD0DfUetikKhBDq5f5arkgBSzCpQjmf7CVmmdy93

-----END RSA PRIVATE KEY-----



-----BEGIN PUBLIC KEY-----

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC+2og5sex8zeXAZonl2/vnzVjsUHLKU
v0DSoZeWgpQrB5FQgf7Ttd18w1FTjAmv8hK4GtYOSRtoBZFUCVMwmBB9Tkx60EHckp+Fb4
94OZYbenL8hJL7XLuS5ux4tokwGW//3dBUxIHnTxIRt+aJ7Ik96GIr90lUt0oqe3FbAE6/wIDAQAB

-----END PUBLIC KEY-----



公共密钥应在DNS中予以公布。在DNS的TXT记录中,它拥有如下格式:

selector._domainkey.example.com. IN TXT "g=*; k=rsa; p=MIGf...DAQAB"

“selector”是DKIM或DomainKeys在外寄邮件的签名中指示的签证选择器。“_domainkey”部分则照实填写。通常,如您在DNS记录中添加域名时使用了完全名,那您则需要加一个结束符号“.”。公共密钥被置于“p=…. ”处。此记录显示它使用的是RSA运算法则。如果您仅仅想要做测试,您可以在记录中添加“t=y”。

当一封邮件抵达某接收主机时,需要知道使用哪个公共密钥。例如,如果您的每台机器在签署外寄邮件时都使用不同的密钥,那在DNS上您可能有若干个公共密钥。通过指定不同的签证选择器(selector),接收主机就会知道要从DNS服务器上查询哪个公共密钥。

beta1._domainkey.example.com. IN TXT "g=*; k=rsa; p=MIGf...DAQAB "
beta2._domainkey.example.com. IN TXT "g=*; k=rsa; p=MIGf...FAFAB "

如果您在某接收主机上查看邮件标头,您可能会发现标头包含“DKIM-Signature”或“DomainKey-Signature”部分。这意味着该邮件是由“DKIM”或“DomainKey”签署的。

验证结果也会被标示在“Authentication-Results”区域。


SPF和SID的操作

SPF和SID是不同的标准。SID最初是由微软提出的,后来它遵从因特网工程任务小组 (Internet Engineer Task Force, IETF)的建议而从属于SPF。所以,从安全上来说,我们建议在DNS中配置SPF即可。SPF记录看起来应是这样:

mydomain.com. IN TXT "v=spf1 a +mx +ip4:130.207.0.0/16 -all"

请注意此处的“a”或“mx”是指在DNS中对应的“一个记录”和“MX记录”。至于那些“+”和“-”,它们已被作为“合格者”提交给SPF。它们有如下含义:

? + : 通过,它可被省略,+mx等同于mx
? ? : 中立, 类似于NONE (no policy)的说明
? ~ : 轻微失败,介于中立和失败之间
? - : 失败,应拒绝此邮件


每一列都应被从左至右地读取;如果前面部分匹配,后续部分则会被忽略。

SID比SPF有一些添加,“v=spf1”被替换为以下的每行:

1. spf2.0/mfrom
2. spf2.0/mfrom,pra
3. spf2.0/pra,mfrom
4. spf2.0/pra

然而,当看见“v=spf1”时,需要退回至SPF.




上图涵盖了SPF和SID的操作方法。与该域名相关联的DNS服务器上的某DNS记录指示了哪台机器作为该域名的合法代表,是被允许寄出邮件的。当一封邮件抵达某机器时,接收机器会向DNS服务器发出询问,以便了解此IP地址是否被允许自此域名往外寄送邮件。如果它与DNS记录中规定的规则不符,那意味着它是一封伪造的邮件。

此后的内容与前文类似,我们开始将它们运用于实际。


产生认证钥

在产生认证钥的这个页面里,按下‘创建’按钮,系统即开始为使用DKIM或DomainKey而随机产生一对公共密钥(public key)和私有密钥(private key)。基于安全的考虑,私有密钥不会显示在Web用户接口上。

利用画面右上角的‘检视’按钮,即会出现整个公共密钥的内容。将公共密钥的内容全部复制起来,记录到DNS里,便可完成DimaunKey的一部份了。




DKIM & DK

DKIM 或 DK(DomainKey) 的签章是用于验证一个邮件主机的真实性。

私有密钥是用于签证寄出的邮件,而从域名(DNS)主机查询得到的公共密钥将被用于验证收到的邮件;这样,能有效地判断寄件者的网域(Domain)是否是伪造的,以及寄出信件是不是来自于伪造的网域。因此,将公共密钥置入域名服务(DNS)主机是必要的,如此才可让其它邮件主机验证收到的邮件是由正确的主机送出。

想要标记外送邮件或验证进入邮件,在DomainKey或DKIM签证和验证的这个地方,我们应事先做如下
设置:

它可以通过 Email >>认证 >> DKIM & DK 来操作。签证选择器(Selector)和想要签证的域名清单也应填入。邮件系统会将签证选择器(Selector)的名称置于DKIM和DomainKey签名上,以便在其它的地方可验证收到的邮件。

用于签证寄出邮件的 Selector名称: selector1
将要签证的域名清单: mydomain.com



请注意,系统只会为那些在列表中的域名做DKIM/DK的签名标记,这些域名都应带有此处填入的签证选择器(selector)标签。换句话说,系统不会为那些不在此列表中的域名做标记。所以,如果您有时候必须用不同的域名发送邮件,您就应该选择您想要标记的域名,并将它们填入“将要签证的域名清单”区域,以“,”来间隔。

如果您想要标记外送邮件,在填入相关的DNS记录之前,不要开启“启始 DKIM 和 DomainKey 的处理”。就算您已填好了相应的DNS记录,它也不会马上生效。所以,由于在DNS中没有记录,您可以预知到在另一端会出现几种失败的验证结果。当DNS记录在其它DNS服务器上生效的时候,那些签名就可被正确验证了。

您也可以选择不去标记那些外送邮件,而让系统仅验证那些进入的邮件。点选“只验证收到的邮件,不对寄出邮件的签证”此复选框即可。当您点选了该复选框后,其它部分的选项设置即会被忽略。系统只会验证进入的邮件,而不会标记外送邮件。

依照预设的规则,对进入的邮件,系统会验证其DKIM和DomainKey签名,但针对外送的邮件,却只会为之标记上DKIM签名。要改变此规则,您需要在此配置页面上点选那些选项。

例如,要增加DomainKey签名,您需要点选“ DKIM-Signature(签章)外,另加上 DomainKey-Signature 到寄出邮件的邮件标头上 ”的选项。

如果您打算为外送邮件做标记,不要忘记增加相关的DNS记录。我们以后会提到这一点,假使您的DNS服务器也是建构在同一台机器上的状况。


SPF & SID

SPF记录允许网域拥有者代表他们的网域,去指定哪些主机可以传送电子邮件,可以保障网域拥有者,是避免被 spammers 冒充发信的一种机制。做法是在DNS 内的域名中加入 SPF 纪录,说明这个域名只会透过那些主机发送邮件,以避免有伪造或虚设寄件者网域地址的情况。

正如我们此前提及的,邮件服务器上将会为SID和SPF执行验证过程。其它地方的服务器如想知道您域名上的哪个IP地址可以外送邮件,那么您需要将相关的记录置于DNS服务器上。

在DNS里面的信息,是涵盖了与域名相关的纪录,包含了代表主机是合法的寄送邮件的宣告。当邮件抵达接收端邮件服务器,这边的邮件服务器可能会去利用DNS,去查询这封信件里已知的IP地址是否是真的由这个网域之邮件服务器所寄出的。如果经由DNS记录所查询到的信息不是的话,那么这封邮件就会被当成是封伪造邮件来处理。

Email >> 认证 >> SPF & SID 处核取并送出请求,即可开启SPF和SID验证。



PF, DKIM以及DomainKey的相对应DNS记录

如果您是使用Azblink的DNS建构系统,您可按照以下指示的步骤操作。

经由 Dns >> 网络区域 >> 区域管理,点选您创建的域名,您会发现有不同的DNS高级选项。按“SPF”,您会看到如下的页面。

通过点选复选框,选择您想要的SPF机制, SPF记录即会生成。如果您打算以更准确的方式来操作,您可按“文字记录”,直接以TXT记录来处理。





针对DKIM和DomainKey,我们亦直接使用了TXT记录来处理。



记住,“sa1”必须与您使用于邮件服务器的那个签证选择器(selector)一模一样,在此处公共密钥也需要复制一份。

阅读(5112) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~