DANE для електронної пошти: коли це виправдано (і чому часто ні)

Було корисно?

Ви можете експлуатувати бездоганний кластер пошти, вчасно оновлювати сертифікати, примусово застосовувати TLS, публікувати коректні SPF/DKIM/DMARC…
і все одно пересилати повідомлення по публічному інтернету з «найкращими зусиллями» з шифруванням і ввічливим зведенням плечима щодо атак з пониженням рівня безпеки.
Саме цю прогалину намагається закрити DANE.

Проблема: DANE додає не тільки безпеку. Воно розширює операційну поверхню — зокрема, DNSSEC.
Якщо вам коли-небудь дзвонили о 03:00 з повідомленням «це DNS», DANE просить прикріпити це до надійності вашої пошти.

Що DANE фактично робить для пошти (і чого не робить)

DANE (DNS-based Authentication of Named Entities) для SMTP стосується одного: зробити TLS для пошти
менш «опортуністичним» і більш «ви повинні використати цю криптографічну ідентичність, щоб доставити мені пошту».
Воно робить це шляхом публікації TLSA записів у DNS, захищених DNSSEC.

У доставці SMTP відправний MTA зазвичай дивиться записи MX, підключається, а потім пробує STARTTLS.
Без DANE (і без інших політик) мережевий атакувальник може спробувати понизити з’єднання — видалити STARTTLS,
змусити передачу в незашифрованому вигляді або спрямувати на інший ланцюжок сертифікатів і сподіватися, що відправник знизить плечима і продовжить.
DANE перетворює «підвести плечима і продовжити» на «перевірити або відмовити», принаймні для пірів, які це реалізовують.

Ключова відмінність: DANE валідуює через DNSSEC, а не через загальні CA

Традиційний TLS покладається на WebPKI: центри сертифікації, правила видачі, проміжні сертифікати
та величезний список довірених коренів. DANE дозволяє домену сказати: «Для _25._tcp.mx.example очікуйте цей сертифікат
(або цей публічний ключ).» Коренем довіри тут є ланцюжок довіри DNSSEC до кореневого зони DNS.

Це одночасно і сила безпеки, і операційна відповідальність. Ви обмінюєте «ризик екосистеми CA»
на «ризик правильності DNSSEC». У виробничому сенсі: ви переносите режим відмови від третьої сторони
до вашого власного DNS-процесу. Це може бути гарний обмін. А може стати програмою розвитку кар’єри.

Чого DANE не робить

  • Воно не автентифікує відправника. Це зона SPF/DKIM/DMARC.
  • Воно не забезпечує наскрізне шифрування. TLS SMTP захищає транспортування між вузлами, але не захищає вміст поштової скриньки від інфраструктури отримувача.
  • Воно не зупиняє спам. Спам — це людська проблема, замаскована під проблеми протоколу.
  • Воно не виправляє зламаний життєвий цикл сертифікатів. Воно просто дає вам новий спосіб його зламати.

Сухо-іронічна правда: DANE — це ремінь безпеки, який вимагає також перебудувати електричну систему авто.
Іноді воно того варте. Але не встановлюйте його лише тому, що прочитали страшний блог і захопилися.

Коли DANE виправдано

DANE виправдано, коли у вас є цінні потоки пошти, передбачувані партнери
та операційна зрілість для керування DNSSEC без ставлення до нього як до одноразової галочки.
Воно також виправдано, якщо ви готові терпіти поведінку «відмови з закриттям» для певного трафіку.

Підходить добре

  • Державні, оборонні, регульовані сектори, де атаки з пониженням рівня безпеки — не теоретична загроза.
    Якщо ви захищаєтеся від активних мережевих атак, опортуністичний STARTTLS недостатній.
  • B2B з визначеним набором партнерів. Ви можете вимагати DANE від партнерів, тестувати та координувати зміни.
    Думайте «банки, що відправляють платіжні інструкції», а не «розсилка на мільйони».
  • Домені, що вже правильно працюють з DNSSEC (керування ключами, процес ротації, моніторинг).
    Якщо DNSSEC вже нудне у вашій організації, DANE стає менш страшним.
  • Випадки, коли хочуть уникнути публічних CA для SMTP. DANE може публікувати самопідписаний сертифікат або закріплювати ключ.
    Це корисно, якщо політика така: «ми не залежатимемо від сторонніх CA для транспортної пошти».
  • Організації з SRE-покриттям для пошти та DNS. Якщо поштою займається «чиясь побічна робота», DANE не ваш перший апгрейд.

Правило прийняття рішення, яке мені подобається

Якщо відмова пошти для вашого домену — це Sev-1 і зміни DNS вже розглядаються як продакшн-деплои з відкатами,
DANE може бути раціональним наступним кроком. Якщо відмови пошти — «шум у трекері» і DNS оновлюють копіпастом у реєстраторському UI,
DANE — це пастка для надійності.

Чому часто ні: податок на надійність

Прийняття DANE для пошти обмежене не тому, що це поганий інженерний підхід, а тому, що його важко експлуатувати
і стимули не збігаються. Пошта федеративна, заплутана і повна старих MTA, які досі вважають SHA-1 «достатнім».

DNSSEC не складний. DNSSEC — безжальний.

DNSSEC перетворює помилку в DNS з «деякі резолвери кешували неправильне» на «валідaція не пройшла і ваш домен фактично зник».
З DANE цей збій може вибірково вбити вхідну пошту від валідуючих відправників. Найгірший тип відмови — коли
деякі відправники можуть досягнути вас, а деякі ні, бо вам доводиться одночасно насолоджуватися і інцидентом, і відмовою.

Операційні реалії, що роблять DANE непривабливим

  • Часткова підтримка екосистеми: багато великих приймачів не застосовують DANE для SMTP доставки так, як прихильники DANE хотіли б.
    Це знижує окупність інвестицій.
  • Ротація ключів + оновлення TLSA: ви керуєте і ключами DNSSEC, і TLS-пінінгом.
    Обидва мають режими «ой, тепер нічого не валідовано».
  • Прогалини в інструментарії: типовий корпоративний DNS-панель призначений для A-записів і маркетингових vanity.
    DNSSEC ставлять як екзотичну тварину.
  • Навантаження на on-call: ви маєте вміти швидко відповісти «DNSSEC поламався?».
    Якщо єдина людина, яка це розуміє, у відпустці, ви створюєте одиночну людську точку відмови.

Один короткий жарт, як обіцяв: DNSSEC як парашут — технічно простий, але ви хочете, щоб його запакував хтось, кому не байдуже.

Факти та історичний контекст (коротко, по суті)

  • Корені DNSSEC були підписані у 2010 році, що зробило глобальну валідацію можливою без «островів довіри». Це була передумова для практичності DANE.
  • DANE визначено в RFC 6698 (2012), що описує TLSA-записи та спосіб зіставлення сертифікатів або ключів через DNSSEC-захищений DNS.
  • Використання DANE для SMTP визначено в RFC 7672 (2015), яке прояснило, як MTA повинні використовувати TLSA для SMTP через STARTTLS.
  • STARTTLS для SMTP існує з 2002 року (RFC 3207), але його спроектовано для опортуністичного шифрування і він вразливий до пониження без додаткової політики.
  • Громадська увага до видаляння STARTTLS зросла після розкриттів масового спостереження (2013), що підштовхнуло екосистему до розгляду сильніших гарантій.
  • MTA-STS (RFC 8461, 2018) та TLS-RPT (RFC 8460, 2018) з’явилися як альтернативи «політика на базі WebPKI + звітування», які обмінюють залежність від DNSSEC на HTTPS та залежність від CA.
  • DANE може безпечно публікувати самопідписані пін-коди (бо довіра походить від DNSSEC), що незвично у TLS-світі і операційно привабливо у закритих середовищах.
  • Пошта повільно оновлюється, бо протокол федеративний і сумісний назад; ви не можете «примусово оновити» MTA інтернету.

Як DANE ламається в реальному житті

Режим відмови 1: DNSSEC ламається, і ви цього не помічаєте

Найпоширеніша відмова DANE — не «неправильний TLSA». Це «валідaція DNSSEC не пройшла», через що TLSA стає невидимим для валідаторів.
Залежно від відправного MTA і його політики, це може означати відкат до опортуністичного TLS або ж жорстку відмову.
Небезпечний варіант — тихе пониження: ви думаєте, що захищені, але валідуючі відправники не бачать ваш TLSA, тому вони доставляють опортуністично.

Режим відмови 2: TLSA вказує на вчорашній сертифікат/ключ

Ви оновили свій SMTP сертифікат. Чудово. Якщо ви закріпили сертифікат (або SPKI) через TLSA і не оновили запис вчасно та з правильним TTL,
валідуючі відправники DANE не зможуть доставити пошту. Це зазвичай проявляється як «деякі партнери не можуть надіслати нам пошту», а не повний збій,
бо тільки частина відправників здійснює валідацію.

Режим відмови 3: Неправильні припущення щодо поведінки MX

DANE для SMTP залежить від TLSA записів, прив’язаних до конкретних MX хостів. Багато команд думають, що можна опублікувати один TLSA на кореневому домені
і забути. Потім вони змінюють MX або додають новий MX-хост і забувають про TLSA для нової цілі.
Пошта все одно працює від невалідувальних відправників, що відсуває виявлення помилки до найгіршого моменту.

Режим відмови 4: «Ми ввімкнули це», але нічого не примусили

Якщо ваш вихідний MTA не налаштовано на використання DANE (або у вас не увімкнена валідація DNSSEC),
ваша організація не «використовує DANE». Ви «публікуєте TLSA записи і почуваєтеся добре».
Це різні дії.

Цитата, навмисно коротка і операційна:
Надія — не стратегія. — Джеймс Кемерон

Практичні завдання: команди, виводи та рішення (12+)

Мета цього розділу не показати набори команд. Мета — дозволити вам відповісти: «DANE працює?» та «Якщо ні, що робити далі?»
Усі приклади припускають інструменти Linux. Замініть домени та хости на свої.

Завдання 1 — Підтвердити, що ваш резолвер валідуює DNSSEC

cr0x@server:~$ resolvectl status | sed -n '1,80p'
Global
       Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=yes/allow-downgrade
resolv.conf mode: stub
Current DNS Server: 10.0.0.53
       DNS Servers: 10.0.0.53 10.0.0.54

Значення: DNSSEC увімкнено з allow-downgrade, що не те саме, що строгий режим валідaції.
Рішення: Для діагностики DANE використовуйте суворо валідуючий шлях (Unbound у валідуючому режимі або явні тести з +dnssec), щоб уникнути хибної впевненості.

Завдання 2 — Перевірити валідність ланцюга DNSSEC для домену

cr0x@server:~$ dig +dnssec +multi example.com SOA
; <<>> DiG 9.18.24 <<>> +dnssec +multi example.com SOA
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16173
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; ANSWER SECTION:
example.com.        3600 IN SOA ns1.example.net. hostmaster.example.com. (
                                2026010301 7200 3600 1209600 3600 )
example.com.        3600 IN RRSIG SOA 13 2 3600 (
                                20260110000000 20260103000000 12345 example.com.
                                ...signature... )

Значення: У вас є RRSIG, що необхідно, але не достатньо; це вказує, що зона підписана.
Рішення: Продовжуйте валідацією інструментом, який реально перевіряє ланцюжок (наступне завдання). «Підписано» ≠ «валідно».

Завдання 3 — Валідовати DNSSEC за допомогою delv (ланцюжок довіри)

cr0x@server:~$ delv example.com SOA
; fully validated
example.com.        3600 IN SOA ns1.example.net. hostmaster.example.com. 2026010301 7200 3600 1209600 3600

Значення: «fully validated» — це те, що вам потрібно. Якщо ви бачите «resolution failed» або «broken trust chain», DANE помер ще до початку.
Рішення: Якщо не валідовано, виправте DNSSEC спочатку. Не чіпайте TLSA, поки фундамент не тримає.

Завдання 4 — Перелічити MX-цілі, які потрібно покрити TLSA

cr0x@server:~$ dig +short MX example.com
10 mx1.example.com.
20 mx2.example.com.

Значення: TLSA для SMTP прив’язується до MX-імен хостів, а не до кореня домену.
Рішення: Переконайтеся, що кожен MX-хост, що приймає пошту, має правильні TLSA-записи для порту 25 і підписаний DNSSEC.

Завдання 5 — Запитати TLSA запис для SMTP (порт 25) для конкретного MX

cr0x@server:~$ dig +dnssec +short _25._tcp.mx1.example.com TLSA
3 1 1 7A9C2B4C0F4E0A18D8C4C3D66D3D1A64E2D3B9D3A2B2D9E0A3F7C1E8A7B5C6D
3 1 1 7A9C2B4C0F4E0A18D8C4C3D66D3D1A64E2D3B9D3A2B2D9E0A3F7C1E8A7B5C6D

Значення: Ймовірно, у вас дублікати записів (одні й ті ж дані повторюються), що неакуратно, але зазвичай безпечне.
Поля: usage=3 (DANE-EE), selector=1 (SPKI), matching=1 (SHA-256).
Рішення: Видаліть дублікати, щоб зменшити плутанину. Також підтвердіть, що цей хеш відповідає публічному ключу сертифіката, що сервер пред’являє (пізніше).

Завдання 6 — Підтвердити, що TLSA справді захищений DNSSEC

cr0x@server:~$ dig +dnssec _25._tcp.mx1.example.com TLSA | sed -n '1,30p'
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57421
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; ANSWER SECTION:
_25._tcp.mx1.example.com. 300 IN TLSA 3 1 1 7A9C2B4C0F4E0A18D8C4C3D66D3D1A64E2D3B9D3A2B2D9E0A3F7C1E8A7B5C6D
_25._tcp.mx1.example.com. 300 IN RRSIG TLSA 13 4 300 (
                                20260110000000 20260103000000 45678 example.com.
                                ...signature... )

Значення: RRset TLSA підписано (RRSIG присутній). Добре.
Рішення: Якщо RRSIG відсутній, запис не захищено; виправте підписання зони або делегацію.

Завдання 7 — Протестувати SMTP STARTTLS і переглянути пред’явлений сертифікат

cr0x@server:~$ openssl s_client -starttls smtp -connect mx1.example.com:25 -servername mx1.example.com -showcerts 
CONNECTED(00000003)
depth=0 CN = mx1.example.com
verify error:num=18:self signed certificate
verify return:1
---
250 SMTPUTF8
---
SSL-Session:
    Protocol  : TLSv1.3
    Cipher    : TLS_AES_256_GCM_SHA384
---
-----BEGIN CERTIFICATE-----
...pem...
-----END CERTIFICATE-----

Значення: Сервер пред’являє самопідписаний сертифікат. Це прийнятно з DANE-EE (usage 3), якщо TLSA відповідає.
Рішення: Якщо ви плануєте покладатися на WebPKI, не використовуйте самопідписаний сертифікат. Якщо покладаєтеся на DANE — переконайтеся, що TLSA правильно закріплює SPKI/сертифікат.

Завдання 8 — Витягти SPKI-хеш і порівняти з TLSA (selector 1, matching 1)

cr0x@server:~$ openssl s_client -starttls smtp -connect mx1.example.com:25 -servername mx1.example.com 
CONNECTED(00000003)
...snip...
-----BEGIN CERTIFICATE-----
...pem...
-----END CERTIFICATE-----
cr0x@server:~$ openssl x509 -noout -pubkey | openssl pkey -pubin -outform DER | openssl dgst -sha256
SHA2-256(stdin)= 7a9c2b4c0f4e0a18d8c4c3d66d3d1a64e2d3b9d3a2b2d9e0a3f7c1e8a7b5c6d

Значення: Хеш збігається з TLSA-даними (без урахування регістру). Закріплення DANE узгоджується з тим, що сервер пред’являє.
Рішення: Якщо не збігається, ви або виконали ротацію ключів/сертифікатів без оновлення TLSA, або опублікували неправильний TLSA. Виправте перед примусовим застосуванням.

Завдання 9 — Валідовати DANE наскрізно за допомогою вбудованого поведінкового механізму postfix (на основі логів)

cr0x@server:~$ postconf -n | egrep 'smtp_dns_support_level|smtp_tls_security_level|smtp_tls_loglevel'
smtp_dns_support_level = dnssec
smtp_tls_security_level = dane
smtp_tls_loglevel = 1

Значення: Вихідний Postfix налаштовано на використання DNSSEC і DANE для доставки. Це конфігурація «ми серйозно».
Рішення: Якщо ви експериментуєте, розгляньте початок із політикою на рівні домену замість глобального dane.

Завдання 10 — Дивитися логи щодо результатів валідації DANE під час доставки

cr0x@server:~$ journalctl -u postfix -n 50 --no-pager
Jan 03 10:12:41 mailgw postfix/smtp[22190]: Verified TLS connection established to mx1.example.com[203.0.113.10]:25: TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
Jan 03 10:12:41 mailgw postfix/smtp[22190]: TLSA validation succeeded for _25._tcp.mx1.example.com

Значення: Postfix явно вказує, що TLSA-валідaція пройшла. Це зелений сигнал.
Рішення: Якщо бачите «TLSA lookup failed» або «verification failed», не вгадуйте — переходьте до перевірок DNSSEC і TLSA.

Завдання 11 — Перевірити, чи ваші DNS-сервери публікують DS правильно (перевірка делегації)

cr0x@server:~$ dig +short DS example.com @1.1.1.1
12345 13 2 9A6B0D0F2A7C0D7A1B6E6E2F7C5F2A8D2B1A9C0D0E1F2A3B4C5D6E7F8A9B0C

Значення: Батьківська зона має DS для вашого домену. Без цього валідатори не довірятимуть вашим підписам.
Рішення: Якщо DS відсутній (порожній вивід), виправте це у реєстратора/батьківській зоні перед будь-якими іншими діями.

Завдання 12 — Підтвердити, що DNSKEY зони відповідає DS (швидка перевірка невідповідності)

cr0x@server:~$ delv +vtrace example.com DNSKEY | sed -n '1,40p'
; fetch: example.com/DNSKEY
; validating example.com/DNSKEY: got answer
; verify: success
example.com. 3600 IN DNSKEY 257 3 13 (
    ...keydata...
)

Значення: Успішна валідація вказує, що DS і DNSKEY узгоджені.
Рішення: Якщо delv +vtrace показує збій на кроці DS/DNSKEY, у вас проблема делегації — часто зіпсована ротація.

Завдання 13 — Перевірити наявність застарілого TLSA через TTL/кешування під час ротації сертифікатів

cr0x@server:~$ dig _25._tcp.mx1.example.com TLSA +noall +answer +ttlid
_25._tcp.mx1.example.com. 300 IN TLSA 3 1 1 7A9C2B4C0F4E0A18D8C4C3D66D3D1A64E2D3B9D3A2B2D9E0A3F7C1E8A7B5C6D

Значення: TTL — 300 секунд (5 хвилин). Це зручно для ротацій, якщо ваша DNS-інфраструктура дотримується TTL.
Рішення: Якщо TTL — години/дні, плануйте ротації ретельно або використовуйте подвійне публікування TLSA під час переходу.

Завдання 14 — Підтвердити, що вхідний MX пред’являє правильне ім’я/сертифікат під SNI та послідовний EHLO

cr0x@server:~$ swaks --to test@example.com --server mx1.example.com --tls --tls-optional
=== Trying mx1.example.com:25...
=== Connected to mx1.example.com.
<--  220 mx1.example.com ESMTP
 --> EHLO test
<--  250-mx1.example.com
<--  250-STARTTLS
=== TLS started with cipher TLS_AES_256_GCM_SHA384

Значення: STARTTLS пропонується і підключення відбувається коректно. Це базова гігієна перед тим, як сперечатися про DANE.
Рішення: Якщо STARTTLS не пропонується, виправте конфіг MTA спочатку. DANE не врятує SMTP без підтримки TLS.

Швидка діагностика — покроковий план

Коли хтось каже «нам повертається пошта» і DANE причетний, ви не починаєте з дебатів про RFC.
Ви швидко знаходите вузьке місце. Ось порядок дій, що заощадить час.

Перше: чи DNSSEC валідний зараз?

  • Запустіть delv example.com SOA мінімум з двох мереж (корпоративної та зовнішньої).
  • Якщо це не «fully validated», зупиніться. Виправіть DNSSEC.
  • Перевірте наявність DS у батьківській зоні та порівняйте з валідацією DNSKEY.

Друге: чи TLSA присутній і підписаний для кожного активного MX?

  • Перелічіть цілі MX.
  • Для кожного MX запитайте _25._tcp.mxN TLSA і підтвердіть наявність RRSIG.
  • Підтвердьте, що TTL розумний для вашої частоти ротацій.

Третє: чи сервер пред’являє те, що закріплено в TLSA?

  • Використайте openssl s_client -starttls smtp для захоплення сертифіката.
  • Обчисліть SPKI-хеш і порівняйте з TLSA.
  • Переконайтеся, що ви випадково не пред’являєте інший сертифікат на деяких вузлах (балансувальники навантаження люблять сюрпризи).

Четверте: чи відправник справді застосовує DANE?

  • Попросіть уривок з бумбеку/логу; шукайте «TLSA validation failed» проти загального «TLS error».
  • Якщо ви контролюєте відправника, перевірте конфіг MTA (smtp_tls_security_level, підтримка DNSSEC тощо).
  • Якщо ні — відтворіть проблему з відомого DANE-валідуючого хоста, щоб уникнути полювання на привидів.

П’яте: вирішіть — відкривати чи закривати у разі помилки

Якщо ви в режимі інциденту, можна тимчасово пом’якшити застосування DANE для конкретного домену
(карта політик) поки ви виправляєте проблему з DNSSEC/TLSA. Не робіть глобальних змін в паніці.
Панічні зміни — це те, як отримують два інциденти за одну ціну.

Типові помилки (симптом → корінна причина → виправлення)

1) Симптом: «Деякі відправники не можуть досягти нас, а інші можуть»

Корінна причина: Лише деякі відправники валідуюють DNSSEC/DANE. Ваш ланцюг DNSSEC зламаний або TLSA не збігається, тож валідуючі відправники відмовляють, а невалідувальні доставляють.

Виправлення: Перевірте за допомогою delv зовні; виправте невідповідність DS/DNSKEY або прострочені підписи; перевірте TLSA проти пред’явленого сертифіката.

2) Симптом: Доставки ламаються одразу після ротації сертифікатів

Корінна причина: TLSA закріплює старий сертифікат або старий SPKI. Або ви оновили сертифікат на одному MX-вузлі, але не на інших.

Виправлення: Публікуйте TLSA у подвійній формі під час ротацій (старий + новий SPKI), зменшіть TTL заздалегідь і переконайтеся, що ваш флот послідовний перед переключенням.

3) Симптом: DANE «працює в лабораторії», але ламається з інтернету

Корінна причина: Внутрішні резолвери валідуючі; зовнішня рекурсія бачить зламану делегацію, відсутній DS або інші відповіді через split-horizon DNS.

Виправлення: Тестуйте з публічних резолверів і з валідуючим рекурсивним резолвером поза вашою мережею; усуньте split-horizon для TLSA/DNSSEC записів.

4) Симптом: TLSA існує, але в логах Postfix — «TLSA lookup failed»

Корінна причина: Ваш шлях резолверів не виконує валідацію DNSSEC (або дозволяє пониження), або Postfix не налаштовано на DNSSEC.

Виправлення: Встановіть smtp_dns_support_level=dnssec і переконайтеся, що Postfix може досягти валідуючого резолвера; підтвердьте біт AD у відповідях, коли це доречно.

5) Симптом: Після переходу провайдера DNS деградує доставка пошти

Корінна причина: Неправильне повторне підписання DNSSEC/оновлення DS. Зона підписана, але не довіряється.

Виправлення: Ставтеся до міграцій DNS як до церемоній ключів: координуйте оновлення DS, перевіряйте поширення і верифікуйте за допомогою delv +vtrace.

6) Симптом: DANE ламається лише для одного MX-імені

Корінна причина: Відсутній TLSA для нового/додаткового MX або MX-хост знаходиться у непідписаній дочірній зоні.

Виправлення: Публікуйте TLSA під кожним FQDN MX і переконайтеся, що зона MX підписана DNSSEC з валідним ланцюжком до кореня.

Три корпоративні міні-історії з практики

Міні-історія 1: Інцидент через неправильне припущення

Середня SaaS-компанія вирішила «зробити DANE» після того, як рев’ю безпеки вказало, що опортуністичний SMTP TLS недостатній.
Поштова команда була компетентна, але мала мала кількість людей. DNS «належав» іншій групі, яка здебільшого займалася маркетинговими записами і CDN-перемиканнями.

Неправильне припущення було тонким: вони думали, що публікація TLSA на _25._tcp.example.com покриє пошту для домену.
Вони не зрозуміли, що доставка SMTP використовує цілі MX, і валідація DANE зазвичай виконується проти
_25._tcp.<mx-hostname>.

Вони поміняли MX на нове ім’я під час переходу постачальника. Вхідний трафік виглядав нормальним.
Потім великий клієнт зі строгими налаштуваннями DANE почав отримувати відмови. Перший звіт був «ваш поштовий сервер не працює»,
що було технічно невірно і оперативно недопоміжно.

Насправді: нове MX-ім’я взагалі не мало TLSA записів. Невалідувальні відправники доставляли нормально.
Валідуючі відправники відмовляли. Інцидент тривав годинами, бо всі намагалися відтворити його зі своїх ноутбуків,
і їхні рекурсивні резолвери не були валідуючими. Вони дебагували політику безпеки, якої не було в їхньому тестовому шляху.

Виправлення було простим: опублікувати підписані TLSA для кожного MX-імені, а також додати пункт у ранку: «Будь-яка зміна MX вимагає перевірки TLSA і зовнішньої валідації DNSSEC.»
Вартість навчання була дорожчою: якщо ви не можете точно описати, яке ім’я валідється, ви не маєте права випускати фічу.

Міні-історія 2: Оптимізація, що обернулася проти

Фінансова фірма мала надійний DNSSEC і хотіла використовувати DANE для закріплення SMTP-ключів без залучення публічних CA.
Вони оптимізували ротації: низькі TTL для TLSA (60 секунд), агресивні налаштування кешування в їхніх рекурсивних резолверах
і конвеєр, що оновлював TLSA відразу після деплою нових сертифікатів.

На папері це елегантно. На практиці вони створили крихку залежність від часу поширення оновлень DNS по кількох авторитетних серверах,
плюс несподівано складну сукупність кешів: локальні резолвери, upstream-форвардери і резолвери партнерів, які не завжди поважали низькі TTL.

Під час рутинної ротації ключів один авторитетний сервер відстав з оновленням. Половина інтернету бачила новий TLSA, інша половина — старий.
Їхній балансувальник навантаження також поетапно перезапускав вузли, тож різні MX-вузли пред’являли різні ключі у вікні.
Це створило відмову, де валідaція проходила або не проходила залежно від резолвера і IP-адреси MX — ситуація, що змушує сумніватися у реальності.

Вони «виправили» це, збільшивши TTL TLSA і перейшовши на довше подвійне публікування SPKI-хешів для більшого перекриття,
а також наполягаючи на атомарному деплої сертифікатів/ключів по всьому флоту MX-хостів (або принаймні по кожному MX-імені).
Урок: оптимізація для швидкості в розподілених системах часто просто збільшує кількість способів, як можна одночасно помилитися.

Міні-історія 3: Нудна, але правильна практика, що врятувала день

Велике підприємство експлуатувало кілька шлюзів пошти в регіонах. Вони мали DNSSEC і DANE, але без ілюзій:
вони ставилися до DNS як до продакшну і вели керування змінами, яке було, чесно кажучи, нудним. Нудність — це добре.

Щокварталу вони проводили «вогневу вправу DNSSEC і DANE». Не настільну вправу з гарними слайдами — реальну перевірку.
Хтось навмисно валідовував DNSSEC з зовнішньої мережі, перевіряв вирівнювання DS, порівнював TLSA-хеш з живим сертифікатом,
і переконувався, що другий інженер може слідувати ранку без племінного знання.

Одного дня заплановано було оновлення DS на боці реєстратора в рамках KSK-ротації. UI реєстратора прийняв DS,
але внутрішня затримка з погодженням означала, що набір DNSKEY зони не оновився вчасно. На короткий проміжок
DS у батьківській зоні не відповідало ключовому матеріалу дочірньої зони.

Моніторинг спіймав це швидко, бо вони мали просту зовнішню перевірку: «delv має повністю валідовувати зараз.»
Вони відкотили зміну DS і повторили ротацію з правильною послідовністю. Жодного тривалого впливу на пошту.
Нудна практика врятувала день — не тому, що запобігла помилкам, а тому, що скоротила час перебування в помилковому стані.

Чеклісти / покроковий план

Покроково: вирішення, чи впроваджувати DANE для SMTP

  1. Визначте модель загроз. Якщо ви не захищаєтеся від активних атак чи суворих вимог відповідності, DANE може бути зайвою складністю.
  2. Перелік контрагентів. Якщо більшість важливих партнерів не валідовують DANE, окупність обмежена.
  3. Підтвердьте зрілість DNSSEC. Потрібні процес ротації ключів, моніторинг і відповідальна людина на виклику, яка зможе це виправити.
  4. Визначте обсяг застосування. Розгляньте застосування примусово для окремих доменів при відправленні; для вхідних — це переважно «публікуйте і сподівайтеся, що відправники використають».
  5. Оберіть стиль TLSA. Вирішіть між закріпленням SPKI (selector 1) або повним сертифікатом (selector 0); SPKI зазвичай більш дружній до ротацій.
  6. Спроектуйте стратегію ротації. Плануйте подвійне публікування для переходів і визначайте TTL.
  7. Впровадьте моніторинг. Зовнішня валідація DNSSEC + наявність TLSA + перевірки збіжності сертифікат/SPKI за розкладом.
  8. Напишіть ранкбук. Включіть «як тимчасово відключити застосування для одного домену» для обмеження інцидентів.

Операційний чекліст: перед увімкненням примусового застосування DANE для вихідної пошти

  • Всі рекурсивні резолвери, які використовують MTA, виконують валідацію DNSSEC (строго, не надійно в кращому випадку).
  • Зовнішня валідація за допомогою delv успішна для вашого домену та імен MX.
  • TLSA існує, підписаний, для кожного MX-імені і відповідає пред’явленому ключу сертифіката.
  • Розгортання сертифікатів/ключів послідовне по флоту, що приймає пошту за кожним MX-іменем.
  • TLS-RPT налаштовано, щоб отримувати сигнали, коли партнери відмовляють (навіть якщо не DANE-специфічно, це допомагає).
  • On-call має односторінковий порядок діагностики «DANE зламався» (див. покроковий план вище).

Чекліст ротації: оновлення SMTP-ключів без ламання DANE

  1. Зменшіть TTL TLSA принаймні на один TTL-інтервал до змін (якщо ви плануєте його міняти).
  2. Опублікуйте додатковий TLSA для нового ключа (подвійне публікування: старий + новий SPKI-хеш).
  3. Зачекайте на поширення по авторитетних серверах і перевірте зовні.
  4. Розгорніть новий сертифікат/ключ на всіх вузлах MX для імені (або атомарно перемкніть/злив).
  5. Проведіть верифікацію, перерахувавши SPKI-хеш із живого сервера і порівнявши з TLSA.
  6. Після періоду перекриття видаліть старий TLSA-запис.
  7. Поверніть TTL до звичайного значення.

Другий (і останній) короткий жарт: якщо ви одночасно ротуєте ключі DNSSEC та SMTP, краще забронюйте наступний день — так чи інакше.

Питання та відповіді (FAQ)

Чи замінює DANE SPF, DKIM або DMARC?

Ні. DANE підсилює транспортну безпеку (автентичність TLS для SMTP). SPF/DKIM/DMARC — це про автентифікацію відправника та вирівнювання доменів.
Зазвичай ви хочете обидва набори механізмів для різних цілей.

Чи краще DANE за MTA-STS?

«Краще» залежить від того, що ви готові експлуатувати. DANE уникає публічних CA і може закріплювати ключі через DNSSEC.
MTA-STS покладається на WebPKI і HTTPS-хостинг, і часто він простіший для організацій, які вже надійно експлуатують веб-інфраструктуру.
Якщо DNSSEC не є основною компетенцією — MTA-STS частіше реалістичніший вибір.

Чи гарантує DANE зашифровану доставку листа?

Воно може гарантувати використання TLS та ідентичність пірів для MTA, які застосовують DANE і можуть валідовувати DNSSEC. Воно не може примусити весь інтернет підкоритися.
Багато відправників досі доставляють опортуністично.

Чи можна використовувати DANE з самопідписаним сертифікатом на MX?

Так, це одна з привабливих рис DANE. З usage 3 (DANE-EE) ви можете закріпити самопідписаний leaf-сертифікат або, частіше, SPKI-хеш.
Довіра походить від DNSSEC, а не від публічного CA.

Який стиль TLSA найбезпечніший для операцій?

Закріплення SPKI (selector 1) з SHA-256 (matching type 1) є поширеним, бо воно толерантне до перевидачі сертифіката,
якщо ключ лишається тим самим. Закріплення цілого сертифіката більш крихке під час оновлень.

Яка найпоширеніша причина невдач DANE?

Помилки в життєвому циклі DNSSEC: невідповідність DS/DNSKEY, прострочені підписи, зламана делегація після міграції DNS-провайдера,
та відсутність зовнішнього моніторингу валідaції. DANE настільки надійне, наскільки надійні ваші операції DNSSEC.

Чи можна публікувати TLSA для домену, а не для імен MX?

Для SMTP DANE зазвичай потрібні TLSA під іменами MX, бо відправний MTA підключається до цілі MX.
Публікуйте TLSA для кожного MX-імені, яке ви очікуєте, що відправники використовуватимуть.

Чи варто застосовувати DANE для вихідної пошти глобально?

Зазвичай ні. Почніть з карти політик для певних партнерських доменів, з якими ви координувалися, або для цінних потоків, де ви готові до відмови з закриттям.
Глобальне застосування збільшує радіус ураження від помилок DNSSEC і неправильних налаштувань партнерів.

Як дізнатися, чи партнер валідовує DANE?

Попросіть їхні MTA-логи або проведіть узгоджений тест із відомим DANE-валідуючим відправником. За відсутності доказів — вважайте, що вони не валідовують.
Екосистема електронної пошти повна «ми підтримуємо це» заяв, які означають «ми колись це пробували».

Чи допомагає DANE для вхідної пошти до нас?

Ви можете публікувати TLSA для своїх MX-хостів, щоб дозволити відправникам автентифікувати вас. Ви не можете примусити відправників валідовувати це.
Користь для вхідної пошти залежить від того, скільки відправників, що вас цікавлять, справді застосовують DANE.

Наступні кроки, які можна виконати цього тижня

Якщо ви розглядаєте DANE для SMTP, не починайте з додавання TLSA записів, бо це виглядає продуктивно.
Почніть з доведення, що ви можете експлуатувати DNSSEC без драм.

  1. Запускайте зовнішні перевірки валідaції DNSSEC щодня (навіть простий пробір delv) для вашого домену і кожного MX-імені.
    Якщо ви не можете швидко виявити зламану довіру, DANE не стане вашим другом.
  2. Перелік вашого флоту MX і розгортання сертифікатів. Переконайтеся, що кожне MX-ім’я послідовне по вузлах і балансувальниках.
  3. Оберіть один партнерський потік, де ви можете координувати застосування і протестувати DANE наскрізно.
    Використайте його, щоб зміцнити ранкбуки і процеси ротації.
  4. Визначте свою політику відмов: де ви закриватиметеся (безпека), а де відкриватиметеся (доставлення).
    Запишіть це рішення, бо у разі інциденту ви не залишитеся без відповіді.
  5. Якщо DNSSEC не зрілий, серйозно розгляньте MTA-STS + TLS-RPT спочатку.
    Це не «менш безпечно», це «більш експлуатоване» для багатьох організацій — а експлуатована безпека виживає зіткнення з вівторком.

DANE — не погана ідея. Це гострий інструмент. Якщо у вас є руки, що вміють ним користуватися, воно чисто вирішує реальну проблему SMTP.
Якщо ні — воно вирішить вашу доступність натомість.

← Попередня
Дешеві БЖ: як економія $20 перетворюється на феєрверк
Наступна →
ZFS L2ARC на NVMe: коли це варто (а коли достатньо ARC)

Залишити коментар