簡介
本文檔介紹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伺服器ietf.org的「DANE成功」結果
> 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的「假造」結果
> daneverify ietf.org
BOGUS MX record found for ietf.org
DANE FAILED for ietf.org
DANE verification completed.
有效失敗: daneverify cisco.com > cisco尚未實施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不會傳送郵件,這些郵件將包含在傳送隊列中。
為什麼?由於SMTP路由是對真實目標的修改,並且可能未正確使用DNS,因此跳過DANE驗證。
解決方案:建立目標控制配置檔案以明確停用包含SMTP路由的域的DANE驗證
DANE機會主義或DANE強制
在DANE驗證期間會執行下列查詢。
每個驗證饋送內容以執行隨後的驗證。
- MX記錄查詢驗證是否>>>安全、不安全、偽造
- 記錄查詢驗證是否>>>安全不安全>偽造
- TLSA記錄查詢驗證>>> Secure、Insecure、Bogus、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或Opportistic提供。郵件將保留在傳遞隊列中,直到計時器過期,然後傳遞終止。
DANE機會主義
DANE機會主義
在多個裝置環境中啟用DANE
下圖說明在多個裝置環境中啟用DANE時的工作流程。
如果環境有多層ESA裝置,一層用於掃描,另一層用於傳送消息。確保DANE僅在直接連線到外部目標的裝置上配置。
多ESA設計。在交付ESA上配置的DANE
管理多個DNS解析器
如果ESA配置了多個DNS解析器(其中一些支援DNSSEC,還有一些不支援DNSSEC),Cisco建議為支援DNSSEC的解析器配置較高優先順序(較低的數值),以防止不一致。
這可以防止非DNSSEC功能的解析程式將支援DANE的目標域歸類為「偽造」。
管理輔助DNS伺服器
當DNS解析程式不可訪問時,DNS將回退到輔助DNS伺服器。如果在輔助DNS伺服器上未配置DNSSEC,則支援DANE的目標域的MX記錄歸類為「偽記錄」。 這會影響報文傳送,而與DANE設定(機會性或強制性)無關。Cisco建議您使用輔助支援DNSSEC的解析程式。
組態
為出站郵件流配置DANE。
- Webui導航至>郵件策略>目標控制>增加目標
- 根據您的偏好設定完成設定檔的頂端。
- TLS支援:必須設定為「TLS首選」 | 首選-驗證 | 必填 | 必需-驗證 | 必需-驗證託管域。」
- 啟用「TLS支援」後,「DANE支援:下拉式功能表就會變成作用中。
- DANE支援:選項包括「無」 | 機會主義 | 必填.
- 完成「DANE支援」選項後,請提交並確認變更。
目標控制配置檔案- DANE驗證
驗證DANE成功
傳送狀態
監控WebUI「傳送狀態」報告,以瞭解任何可能由於DANE故障而意外建立的目的網域。
請在啟用服務之前執行此操作,然後定期執行幾天,以確保持續成功。
ESA WebUI > Monitor > Delivery Status >檢查「Active Recipients」列。
郵件日誌
日誌級別的預設郵件日誌位於資訊級別。
郵件日誌顯示DANE成功協商郵件的非常細微的指示器。
最終的出站TLS協商將包含經過微幅修改的輸出,以在日誌條目末尾包含域。
日誌條目將包含「TLS成功協定」,後跟「for domain.com」的TLS版本/密碼。
神奇之處在於「for」:
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)
相關資訊