简介
本文档介绍ESA出站邮件流的DANE实施。
先决条件
ESA概念和配置的一般知识。
实施DANE的要求:
- 支持DNSSEC的DNS解析器
- 带AsyncOS 12.0或更高版本的ESA
背景信息
DANE已引入ESA 12以进行出站邮件验证。
基于DNS的命名实体身份验证(DANE)。
- DANE是允许X.509数字证书使用DNSSEC绑定到域名的互联网安全协议。(RFC 6698)
- DNSSEC是IETF规范的集合,通过使用公钥加密来保护DNS记录。(非常基本的解释。RFC 4033、RFC 4034和RFC 4035)
实施注意事项
验证ESA是否使用支持dnssec的DNS解析器。
要实施DANE,需要具备DNS功能来执行dnssec/DANE查询。
要测试ESA DNS DANE功能,可以从ESA CLI登录执行简单测试。
CLI命令“daneverify”将执行复杂查询,以验证域是否能够通过DANE验证。
相同的命令可用于确认已知正常的域,以确认ESA解析dnssec查询的能力。
“ietf.org”是一个全球知名的来源。执行cli命令daneverify将验证DNS解析器是否支持DANE。
有效通过:支持DANE的DNS服务器“DANE SUCCESS”(DANE成功)结果为ietf.org
> daneverify ietf.org
SECURE MX record(mail.ietf.org) found for ietf.org
SECURE A record (4.31.198.44) found for MX(mail.ietf.org) in ietf.org
Connecting to 4.31.198.44 on port 25.
Connected to 4.31.198.44 from interface 216.71.133.161.
SECURE TLSA record found for MX(mail.ietf.org) in ietf.org
Checking TLS connection.
TLS connection established: protocol TLSv1.2, cipher ECDHE-RSA-AES256-GCM-SHA384.
Certificate verification successful
TLS connection succeeded ietf.org.
DANE SUCCESS for ietf.org
DANE verification completed.
无效失败:不支持DANE的DNS服务器ietf.org的“BOGUS”结果
> daneverify ietf.org
BOGUS MX record found for ietf.org
DANE FAILED for ietf.org
DANE verification completed.
有效失败: daneverify cisco.com > cisco has not implemented DANE.这是支持dnssec的解析程序的预期结果。
> daneverify cisco.com
INSECURE MX record(alln-mx-01.cisco.com) found for cisco.com
INSECURE MX record(alln-mx-01.cisco.com) found. The command will still proceed.
INSECURE A record (173.37.147.230) found for MX(alln-mx-01.cisco.com) in cisco.com
Trying next MX record in cisco.com
INSECURE MX record(rcdn-mx-01.cisco.com) found for cisco.com
INSECURE MX record(rcdn-mx-01.cisco.com) found. The command will still proceed.
INSECURE A record (72.163.7.166) found for MX(rcdn-mx-01.cisco.com) in cisco.com
Trying next MX record in cisco.com
INSECURE MX record(aer-mx-01.cisco.com) found for cisco.com
INSECURE MX record(aer-mx-01.cisco.com) found. The command will still proceed.
INSECURE A record (173.38.212.150) found for MX(aer-mx-01.cisco.com) in cisco.com
DANE FAILED for cisco.com
DANE verification completed.
如果上述测试“有效”工作:
- 谨慎的方法是在添加域的配置文件之前测试每个域。
- 更积极的方法是在默认目标控制配置文件上配置DANE,并查看谁通过/失败。
邮件方向确定DANE是否将验证。
配置了“中继”操作的发件人组/邮件流策略将执行DANE验证。
已配置“接受”操作的发件人组/邮件流策略将不执行DANE验证。
注意:如果ESA在默认策略上启用了目标控制“DANE”,则存在传送失败的风险。 如果内部拥有的域(如RAT中列出的域)同时通过RELAY和ACCEPT邮件流策略,并且域存在SMTP路由。
SMTP 路由
除非“目标主机”配置为“USEDNS”,否则DANE在SMTP路由上将失败。
在退回配置文件计时器过期之前,DANE Opportunistic不会传送邮件,这些邮件将包含在“传送队列”中。
为什么?DANE验证被跳过,因为SMTP路由是对真实目的地的修改,可能无法正确使用DNS。
解决方案:创建目标控制配置文件以明确禁用包含SMTP路由的域的DANE验证
DANE Opportunistic或DANE Mandatory
在DANE验证期间将执行以下查找。
每个验证馈送内容以执行随后的验证。
- MX记录查找验证>>>是否安全、不安全、伪造
- 记录查找会验证>>>是否存在“安全不安全”>“伪造”
- TLSA记录查找验证是否>>>安全、不安全、伪造、NXDOMAIN
- 证书验证>>成功,失败
安全:
- DNS已验证是否存在包含RRSIG验证签名RRSIG DS和DNSKEY的安全记录,位于信任链的上方。
不安全的:
假的:
- 不完整,但当前的dnssec条目可能无法通过验证。
- 由于密钥过期,记录无效。
- 信任链中缺少记录或密钥。
NXDOMAIN
上述记录检查和验证结果的组合将确定“DANE成功 | DANE故障 | DANE退回到TLS。”
例如:如果example.com的MX记录没有发送RRSIG,则会检查父区域(.com)以查看example.com是否具有DNSKEY记录,表明example.com应对其记录签名。此验证继续沿着信任链向上进行,并达到根区域(.)密钥验证,且根区域的密钥与ESA预期匹配(ESA上的硬编码值,根据RFC5011自动更新)。
DANE必备
DANE必备
注意:DANE OPPORTUNISTIC不像TLS首选。以下图表中的ACTION部分会导致DANE FAIL,但不会针对Mandatory或Opportunistic提供。邮件将保留在传送队列中,直到计时器过期,然后传送终止。
DANE机会型
DANE机会型
在多设备环境中启用DANE
下图说明在多设备环境中启用DANE时的工作流程。
如果环境有多层ESA设备,一个用于扫描,另一个用于传送邮件。确保DANE仅在直接连接到外部目标的设备上配置。
多ESA设计。交付ESA上配置的DANE
管理多个DNS解析器
如果一个ESA配置了多个DNS解析器(其中一些支持DNSSEC,而另一些不支持DNSSEC),思科建议为支持DNSSEC的解析器配置较高的优先级(较低的数字值),以防止不一致。
这可以防止不支持DNSSEC的解析器将支持DANE的目标域归类为“伪造”。
管理辅助DNS服务器
当DNS解析器不可达时,DNS会退回到辅助DNS服务器。如果在辅助DNS服务器上未配置DNSSEC,则支持DANE的目标域的MX记录归类为“伪造”。 这会影响邮件的传送,而不考虑DANE设置(随机或强制)。思科建议您使用支持DNSSEC的辅助解析器。
配置
配置出站邮件流的DANE。
- Web导航到>邮件策略>目标控制>添加目标
- 根据您的偏好完成配置文件的顶部。
- TLS支持:必须设置为“TLS首选” | 首选-验证 | 必需 | 必需-验证 | 必需-验证托管域。"
- 启用TLS支持后,DANE Support:下拉菜单将变为活动状态。
- DANE支持:选项包括“无 | 机会型 | 必需.
- 完成DANE Support选项后,提交并确认更改。
目标控制配置文件- DANE验证
验证DANE成功
传送状态
监控WebUI“传送状态”报告,以了解任何可能由于DANE故障而意外的目标域建立。
在启用服务之前执行此操作,然后定期执行数天以确保持续成功。
ESA WebUI >监控(Monitor) >传送状态(Delivery Status) >检查“活动收件人”(Active Recipients)列。
邮件日志
日志级别的默认邮件日志(信息级别)。
邮件日志显示DANE成功协商邮件的非常微妙的指示器。
出站的最终TLS协商将包含一个经过略微修改的输出,以包含日志条目末尾的域。
日志条目将包含“TLS成功协议”,后跟“for domain.com”的TLS版本/密码。
神奇之处在于“为”这个词:
myesa.local> grep "TLS success.*for" mail_logs
Tue Feb 5 13:20:03 2019 Info: DCID 2322371 TLS success protocol TLSv1.2 cipher DHE-RSA-AES256-GCM-SHA384 for karakun.com
邮件日志调试
调试级别的自定义邮件日志将显示完整的DANE和dnssec查找、预期的协商、通过/失败的检查部分以及成功指标。
注意:为调试级别日志记录配置的邮件日志可能会消耗ESA上的过多资源,具体取决于系统负载和配置。
为调试级别日志记录配置的邮件日志可能会消耗ESA上的过多资源,具体取决于系统负载和配置。
邮件日志通常不会在调试级别长期保留。
调试级别日志可能会在短时间内生成大量邮件日志。
一种常见的做法是为mail_logs_d创建额外的日志订阅,并为DEBUG设置日志记录。
该操作可防止对现有mail_logs造成影响,并允许处理为订阅维护的日志量。
要控制创建的日志量,请将要维护的文件数量限制为较小的数量,如2-4个文件。
监控、试用期或故障排除完成后,禁用日志。
为调试级别设置的邮件日志显示非常详细的DANE输出:
Success sample daneverify
daneverify ietf.org
SECURE MX record(mail.ietf.org) found for ietf.org
SECURE A record (4.31.198.44) found for MX(mail.ietf.org) in ietf.org
Connecting to 4.31.198.44 on port 25.
Connected to 4.31.198.44 from interface 194.191.40.74.
SECURE TLSA record found for MX(mail.ietf.org) in ietf.org
Checking TLS connection.
TLS connection established: protocol TLSv1.2, cipher DHE-RSA-AES256-GCM-SHA384.
Certificate verification successful
TLS connection succeeded ietf.org.
DANE SUCCESS for ietf.org
DANE verification completed.
debug level mail logs during the above 'daneverify' exeuction.
Sample output from the execution of the daneverify ietf.org will populate the dns lookups within the mail logs
Mon Feb 4 20:08:47 2019 Debug: DNS query: Q('ietf.org', 'MX')
Mon Feb 4 20:08:47 2019 Debug: DNS query: QN('ietf.org', 'MX', 'recursive_nameserver0.parent')
Mon Feb 4 20:08:47 2019 Debug: DNS query: QIP ('ietf.org','MX','194.191.40.84',60)
Mon Feb 4 20:08:47 2019 Debug: DNS query: Q ('ietf.org', 'MX', '194.191.40.84')
Mon Feb 4 20:08:48 2019 Debug: DNSSEC Response data([(0, 'mail.ietf.org.')], secure, 0, 1800)
Mon Feb 4 20:08:48 2019 Debug: DNS encache (ietf.org, MX, [(8496573380345476L, 0, 'SECURE', (0, 'mail.ietf.org'))])
Mon Feb 4 20:08:48 2019 Debug: DNS query: Q('mail.ietf.org', 'A')
Mon Feb 4 20:08:48 2019 Debug: DNS query: QN('mail.ietf.org', 'A', 'recursive_nameserver0.parent')
Mon Feb 4 20:08:48 2019 Debug: DNS query: QIP ('mail.ietf.org','A','194.191.40.84',60)
Mon Feb 4 20:08:48 2019 Debug: DNS query: Q ('mail.ietf.org', 'A', '194.191.40.84')
Mon Feb 4 20:08:48 2019 Debug: DNSSEC Response data(['4.31.198.44'], secure, 0, 1800)
Mon Feb 4 20:08:48 2019 Debug: DNS encache (mail.ietf.org, A, [(8496573380345476L, 0, 'SECURE', '4.31.198.44')])
Mon Feb 4 20:08:48 2019 Debug: DNS query: Q('mail.ietf.org', 'AAAA')
Mon Feb 4 20:08:48 2019 Debug: DNS query: QN('mail.ietf.org', 'AAAA', 'recursive_nameserver0.parent')
Mon Feb 4 20:08:48 2019 Debug: DNS query: QIP ('mail.ietf.org','AAAA','194.191.40.84',60)
Mon Feb 4 20:08:48 2019 Debug: DNS query: Q ('mail.ietf.org', 'AAAA', '194.191.40.84')
Mon Feb 4 20:08:48 2019 Warning: Received an invalid DNSSEC Response: DNSSEC_Error('mail.ietf.org', 'AAAA', '194.191.40.84', 'DNSSEC Error for hostname mail.ietf.org (AAAA) while asking 194.191.40.84. Error was: Unsupported qtype') of qtype AAAA looking up mail.ietf.org
Mon Feb 4 20:08:48 2019 Debug: DNS query: Q('mail.ietf.org', 'CNAME')
Mon Feb 4 20:08:48 2019 Debug: DNS query: QN('mail.ietf.org', 'CNAME', 'recursive_nameserver0.parent')
Mon Feb 4 20:08:48 2019 Debug: DNS query: QIP ('mail.ietf.org','CNAME','194.191.40.83',60)
Mon Feb 4 20:08:48 2019 Debug: DNS query: Q ('mail.ietf.org', 'CNAME', '194.191.40.83')
Mon Feb 4 20:08:48 2019 Debug: DNSSEC Response data([], , 0, 1800)
Mon Feb 4 20:08:48 2019 Debug: Received NODATA for domain mail.ietf.org type CNAME
Mon Feb 4 20:08:48 2019 Debug: No CNAME record(NoError) found for domain(mail.ietf.org)
Mon Feb 4 20:08:49 2019 Debug: DNS query: Q('_25._tcp.mail.ietf.org', 'TLSA')
Mon Feb 4 20:08:49 2019 Debug: DNS query: QN('_25._tcp.mail.ietf.org', 'TLSA', 'recursive_nameserver0.parent')
Mon Feb 4 20:08:49 2019 Debug: DNS query: QIP ('_25._tcp.mail.ietf.org','TLSA','194.191.40.83',60)
Mon Feb 4 20:08:49 2019 Debug: DNS query: Q ('_25._tcp.mail.ietf.org', 'TLSA', '194.191.40.83')
Mon Feb 4 20:08:49 2019 Debug: DNSSEC Response data(['0301010c72ac70b745ac19998811b131d662c9ac69dbdbe7cb23e5b514b56664c5d3d6'], secure, 0, 1800)
Mon Feb 4 20:08:49 2019 Debug: DNS encache (_25._tcp.mail.ietf.org, TLSA, [(8496577312207991L, 0, 'SECURE', '0301010c72ac70b745ac19998811b131d662c9ac69dbdbe7cb23e5b514b56664c5d3d6')])
fail sample daneverify
[]> thinkbeyond.ch
INSECURE MX record(thinkbeyond-ch.mail.protection.outlook.com) found for thinkbeyond.ch
INSECURE MX record(thinkbeyond-ch.mail.protection.outlook.com) found. The command will still proceed.
INSECURE A record (104.47.9.36) found for MX(thinkbeyond-ch.mail.protection.outlook.com) in thinkbeyond.ch
Trying next A record (104.47.10.36) for MX(thinkbeyond-ch.mail.protection.outlook.com) in thinkbeyond.ch
INSECURE A record (104.47.10.36) found for MX(thinkbeyond-ch.mail.protection.outlook.com) in thinkbeyond.ch
DANE FAILED for thinkbeyond.ch
DANE verification completed.
mail_logs
Sample output from the execution of he danverify thinkbeyond.ch will populate the dns lookups within the mail logs
Mon Feb 4 20:15:52 2019 Debug: DNS query: Q('thinkbeyond.ch', 'MX')
Mon Feb 4 20:15:52 2019 Debug: DNS query: QN('thinkbeyond.ch', 'MX', 'recursive_nameserver0.parent')
Mon Feb 4 20:15:52 2019 Debug: DNS query: QIP ('thinkbeyond.ch','MX','194.191.40.84',60)
Mon Feb 4 20:15:52 2019 Debug: DNS query: Q ('thinkbeyond.ch', 'MX', '194.191.40.84')
Mon Feb 4 20:15:52 2019 Debug: DNSSEC Response data([(10, 'thinkbeyond-ch.mail.protection.outlook.com.')], insecure, 0, 3600)
Mon Feb 4 20:15:52 2019 Debug: DNS encache (thinkbeyond.ch, MX, [(8502120882844461L, 0, 'INSECURE', (10, 'thinkbeyond-ch.mail.protection.outlook.com'))])
Mon Feb 4 20:15:52 2019 Debug: DNS query: Q('thinkbeyond-ch.mail.protection.outlook.com', 'A')
Mon Feb 4 20:15:52 2019 Debug: DNS query: QN('thinkbeyond-ch.mail.protection.outlook.com', 'A', 'recursive_nameserver0.parent')
Mon Feb 4 20:15:52 2019 Debug: DNS query: QIP ('thinkbeyond-ch.mail.protection.outlook.com','A','194.191.40.83',60)
Mon Feb 4 20:15:52 2019 Debug: DNS query: Q ('thinkbeyond-ch.mail.protection.outlook.com', 'A', '194.191.40.83')
Mon Feb 4 20:15:52 2019 Debug: DNSSEC Response data(['104.47.9.36', '104.47.10.36'], insecure, 0, 10)
Mon Feb 4 20:15:52 2019 Debug: DNS encache (thinkbeyond-ch.mail.protection.outlook.com, A, [(8497631700844461L, 0, 'INSECURE', '104.47.9.36'), (8497631700844461L, 0, 'INSECURE', '104.47.10.36')])
Mon Feb 4 20:15:52 2019 Debug: DNS query: Q('thinkbeyond-ch.mail.protection.outlook.com', 'AAAA')
Mon Feb 4 20:15:52 2019 Debug: DNS query: QN('thinkbeyond-ch.mail.protection.outlook.com', 'AAAA', 'recursive_nameserver0.parent')
Mon Feb 4 20:15:52 2019 Debug: DNS query: QIP ('thinkbeyond-ch.mail.protection.outlook.com','AAAA','194.191.40.84',60)
Mon Feb 4 20:15:52 2019 Debug: DNS query: Q ('thinkbeyond-ch.mail.protection.outlook.com', 'AAAA', '194.191.40.84')
Mon Feb 4 20:15:52 2019 Debug: DNSSEC Response data([], , 0, 32768)
Mon Feb 4 20:15:52 2019 Debug: Received NODATA for domain thinkbeyond-ch.mail.protection.outlook.com type AAAA
Mon Feb 4 20:15:52 2019 Debug: DNS query: Q('thinkbeyond-ch.mail.protection.outlook.com', 'CNAME')
Mon Feb 4 20:15:52 2019 Debug: DNS query: QN('thinkbeyond-ch.mail.protection.outlook.com', 'CNAME', 'recursive_nameserver0.parent')
Mon Feb 4 20:15:52 2019 Debug: DNS query: QIP ('thinkbeyond-ch.mail.protection.outlook.com','CNAME','194.191.40.83',60)
Mon Feb 4 20:15:52 2019 Debug: DNS query: Q ('thinkbeyond-ch.mail.protection.outlook.com', 'CNAME', '194.191.40.83')
Mon Feb 4 20:15:53 2019 Warning: Received an invalid DNS Response: SERVER FAILED to IP 194.191.40.83 looking up thinkbeyond-ch.mail.protection.outlook.com
Mon Feb 4 20:15:53 2019 Debug: DNS query: QIP ('thinkbeyond-ch.mail.protection.outlook.com','CNAME','194.191.40.84',60)
Mon Feb 4 20:15:53 2019 Debug: DNS query: Q ('thinkbeyond-ch.mail.protection.outlook.com', 'CNAME', '194.191.40.84')
Mon Feb 4 20:15:54 2019 Warning: Received an invalid DNS Response: SERVER FAILED to IP 194.191.40.84 looking up thinkbeyond-ch.mail.protection.outlook.com
Mon Feb 4 20:15:54 2019 Debug: No CNAME record() found for domain(thinkbeyond-ch.mail.protection.outlook.com)
相关信息