zimbra 电子邮件保护的最佳实践:SPF、DKIM、DMARC

字数 1789阅读 1526

我们安装完zimbra后,需要知道一些额外的配置来允许我们安全得发送邮件到其他邮件服务器,比如gmail,hotmail,yahoo,etc。这篇文章将介绍已存在的不同的邮件防护措施,取决于邮件的发件量,最好只实现一个或两个,或者所有

SPF:

Sender Policy Framework (SPF)是邮件的确认系统,用来阻止邮件欺骗。检测安全问题,SPF将去核实邮箱源IP地址然后匹配它的dns中txt记录的spf信息


在哪里配置SPF:

SPF需要在公共的dns服务商上进行配置

如何配置它:

首先,生成 TXT、SPF、DNS条目,例如我们的域名叫:domain.com,然后我们需要添加三条记录:

  • A记录 - mail.domain.com
  • MX记录 - srvmta.domain.com
  • IPv4记录 - 60.70.80.90
    如果在你的邮件系统中你使用了外部的服务,比如Mailchimp,Salesforce,etc。需要添加它们的include。例如:
  • include:servers.mcsv.net (Mailchimp)
  • include:_spf.salesforce.com (Salesforce)
  • include:_spf.google.com (Google Apps)


理解 “all” 在SPF中的设置:

SPF有多种不同的设置,98%的域名使用 ~all(softfail),意思是如果spf条目与源邮件服务器不对应,标识邮件为软失败。下表将展示SPF中 all 的区别:

参数 结果 含义
+all pass Permits all the email, like have nothing configured.(允许所有邮件,相当于未设置)
-all fail Will only mark the email like pass if the source Email Server fits exactly, IP, MX, etc. with the SPF entry.(仅通过匹配spf中正确配置IP、MX、etc.)
~all softfail Allows to send the email, and if something is wrong will mark it like softfail.(有错误的标识为软失败)
?all neutral Without policy(策略之外)

-all 和 ~all 的区别:

如果一个垃圾邮件攻击试图欺骗你的域名,你可以尝试将SPF改为 -all 一段时间,当攻击停止再改回~all。如果你需要严格控制你的 SPF条目并且确认你的DNS正确无误,可以将值设置为 -all

如何测试他们:

有很多工具来检测SPF是否正确:

弃用SPF RR,仅支持 TXT RR:

2014年4月,SPF DNS 在RFC弃用,正确使用SPF的方法只有配置DNS的TXT记录,这是2014年4月之前有效的dns记录,txt和spf值:



然后这是RFC中记录仅能使用TXT:


image.png

参考文档:
SPF介绍
2014年4月之前的RFC
2014年4月之后的RFC

DKIM:

DomainKeys Identified Mail (DKIM) 是电子邮件验证标准——域名密钥识别邮件标准,帮助企业证实邮件真实性,从而使得用户邮件能顺利的发送到海外邮箱的收件箱中,而不会再出现发送失败或者发到对方垃圾箱中的现象


需要配置哪里:

需要将zimbra服务器中使用到的所有域名在公共的 DNS中进行设置

如何设置:

正确配置DKIM,请查看这个文档(之后我会将它翻译)接下来也会简单介绍:
https://wiki.zimbra.com/wiki/Configuring_for_DKIM_Signing
在公共DNS解析上配置DKIM,如下:

如何测试:

有多种网站可以测试它,比如:http://dkimvalidator.com/ ,你需要发送一封邮件,如果测试通过,当你有DKIM配置,你将可以在网站上查看到DKIM部分的返回结果,由于我这边没有设置所以返回结果:

ZCS 8.7.x 设置2048-bit 的签名:

使用zcs 8.7.x 生成一个 2048字节的key,运行下面的命令:(如果是第一次设置使用 -a ,如果是更新DKIM 使用 -u)

/opt/zimbra/libexec/zmdkimkeyutil -a -d yourdomain.com

然后观察接下来的显示:(使用你自己的信息)

DKIM Data added to LDAP for domain zimbra.io with selector 25D766CE-CEAC-11E7-B087-020B6DB9DD9A
Public signature to enter into DNS:
25D766CE-CEAC-11E7-B087-020B6DB9DD9A._domainkey IN      TXT     ( "v=DKIM1; k=rsa; "
          "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwA4vVMiV3/14hRMzbKNnBKNThqxTWLi2E5NqqHLccIJg/P33yqwgGVKKUM9HFfXZ8urz6/dl8oNG3oxs73W1sgWHrFRo3ZayHsuUMe+DLyt8wtyR/RUae0nvd6Z6t0lPwujXWBrRS/FeMg/IGA8ExBKjD+aAYdQfH/lhlDGzumTXgbSB0KMzlpOjcum2Aes69rEiR744GGaPb2"
          "X3MxK8vjpeMIx16n2tADb0wKKP19WTF0at5HCP8F4SFflLUPJMOC1Be9FCWjTjNr1qrRZTwCwC7OC9tnV7SsKKXG+8D6hu39Tm5U1GLzpKvLMIv14b6MWsU9cV/iVKH+hQq4YRowIDAQAB" )  ; ----- DKIM key 25D766CE-CEAC-11E7-B087-020B6DB9DD9A for zimbra.io

默认,dns服务器 txt记录支持255个字符,所以需要做接下来的操作:

  • 在dns配置页创建一个新的TXT记录,然后值设置类似于"v=DKIM1; k=rsa; p=ALL-THE-CODE-"
  • 如果使用其他的dns服务器,如bind,在配置里面如下添加:

25D766CE-CEAC-11E7-B087-020B6DB9DD9A._domainkey    IN    TXT    ("v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w..."
25D766CE-CEAC-11E7-B087-020B6DB9DD9A._domainkey    IN    TXT    "...AQAB")

*其他dns设置:

25D766CE-CEAC-11E7-B087-020B6DB9DD9A._domainkey IN      TXT     ("v=DKIM1;k=rsa; p="
"MIIBIjANBgkqhkiG9w..."
"...AQAB") 

如何检查正确设置DKIM值:

使用这个url: http://dkimcore.org/tools/keycheck.html 填写selector 和域名进行检查,可以对是否正确设置DKIM进程检查


然后几秒钟后将会看到结果:

参考文档:
https://www.douban.com/group/topic/83569978/
https://baike.baidu.com/item/DKIM/152526?fr=aladdin

DMARC:

DMARC, 是 “Domain-based Message Authentication, Reporting & Conformance”的简写,多个组织为了识别并拦截钓鱼邮件,使钓鱼邮件不再进入用户邮箱中(收件箱or垃圾箱),减少邮箱用户打开/阅读到钓鱼邮件的可能性,从而保护用户的帐号密码等个人信息安全。

DMARC 标准化 如何使用SPF和DKIM机制对邮件接收器行邮件认证,这意味着会在AOL、Gmail、Hotmail、Yahoo对发送者的信息进行一致性验证,然后其他邮件接收者执行DMARC。我们希望这将鼓励发送者验证他们的出站电子邮件,使电子邮件成为更可靠的交流方式

需要配置哪里:

在公共DNS中配置

如何设置:

可以在多个网站生成DMARC记录,如: http://www.kitterman.com/dmarc/assistant.html 例如是用域名example.com,请注意所有默认选项都将有内含值,即使在生成器中没有选择它们:

这些配置将生成DNS条目:

如何测试:

下面这个链接是测试DMARC的网站: https://dmarcian.com/dmarc-inspector/google.com 这个网站将显示你的所有DMARC信息域

RDNS:

反向DNS用来确定一个IP关联的域名。有些邮件公司,将拒收没有有效反向dns的邮件


image.png

需要配置哪里:

拥有RDNS和服务器的SMTP之间的完美匹配,有以下条件:

  • 在公共DNS的ISP服务商,或者如果你能管理公共DNS来管理你的ip段,这样你能添加你自己的rdns
  • 在zimbra服务器,需要编辑HELO来匹配它和rdns之间的记录

如何设置:

修改公共DNS来匹配IP和rdns,你需要联系你的ISP服务商,或者你能活编辑你的IP的dns记录,然后改变它。例如,你的60.60.60.60的ip,然后需要让它解析至 mail.example.com

编辑SMTP,然后匹配它的外部rdns。在zimbra 8.0.x 下修改:

zmlocalconfig -e postfix_smtpd_banner="mail.example.com"
zmcontrol restart

zimbra 8.5 8.6 或者更高:

zmprov ms  `zmhostname` zimbraMtaSmtpdBanner mail.example.com
zmcontrol restart

如何测试:

使用这个网址: https://mxtoolbox.com/ReverseLookup.aspx ,如果正确配置,将会返回结果

参考文档:
官方原文