MTA-STS

MTA-STS (SMTP MTA Strict Transport Security, RFC 8461) — механизм принуждения отправляющих серверов использовать TLS с валидным сертификатом при доставке почты. Защищает от downgrade-атак (MITM на пути между MTA'ями). Аналог HSTS для веба.

Проблема

Обычный SMTP между MTA:

  1. Отправитель делает MX-lookup: example.com → mail.example.com.
  2. Подключается по TCP:25.
  3. Договариваются: STARTTLS? Если сервер отвечает 220 → TLS. Иначе — plaintext.

MITM легко может:

Известные атаки: STARTTLS stripping — крупные ISP (в Египте, Тайланде) стирали STARTTLS у своих клиентов.

Как MTA-STS решает

  1. Домен публикует политику: «мои MX-хосты — вот эти, используй TLS с валидным сертом обязательно».
  2. Политика скачивается по HTTPS с фиксированного URL и кешируется.
  3. Отправитель, зная политику, не позволит MITM'у:
    • Отклонит письмо если STARTTLS не предложен.
    • Отклонит если сертификат невалиден.
    • Отклонит если MX не в списке.

Настройка — три штуки

1. DNS TXT-запись

_mta-sts.example.com.  IN TXT  "v=STSv1; id=20260716"

id= меняется когда меняется политика — сигнал «перекачай»...

2. HTTPS-endpoint

https://mta-sts.example.com/.well-known/mta-sts.txt

Содержимое (текстовый файл):

version: STSv1
mode: enforce
mx: mail.example.com
mx: *.mail.example.com
max_age: 604800

3. Валидный HTTPS-сертификат

Хост mta-sts.example.com должен иметь публично валидный сертификат (Let's Encrypt подходит). Именно им подписывается доверие к политике.

Modes

ModeЧто делает
noneНичего. Политика игнорируется. Можно временно чтобы отменить
testingСобираем данные, но не блокируем. См. TLS-RPT
enforceТребуем TLS + валидный серт + MX в списке. Иначе — отклонить

Roll-out

  1. Убедиться что все свои MTA имеют валидные сертификаты Let's Encrypt / коммерческие.
  2. Опубликовать mode: none сначала — чтобы TXT-запись существовала.
  3. Настроить TLS-RPT для получения отчётов.
  4. Через неделю → mode: testing. Собираем отчёты неделю-месяц.
  5. Если отчёты чистые → mode: enforce.

Проверка

$ dig +short TXT _mta-sts.example.com
"v=STSv1; id=20260716"

$ curl https://mta-sts.example.com/.well-known/mta-sts.txt
version: STSv1
mode: enforce
mx: mail.example.com
max_age: 604800

# Онлайн-проверка:
# https://esante.gouv.fr/labels-certifications/mta-sts
# https://aykevl.nl/apps/mta-sts/

Кто поддерживает

MTA-STS проверяется отправляющими MTA. На 2026:

MTAПоддержка
Google (Gmail)Да, отправляет и проверяет
Microsoft (Exchange Online)Да
Yahoo, AOL, ComcastДа
PostfixНет прямо, через postfix-mta-sts-resolver — sockmap
EximЧерез плагины
Mail.ruОграниченно (проверяют, но не всегда шлют отчёты)
Яндекс.ПочтаОграниченно

MTA-STS vs DANE

Есть альтернатива — DANE для SMTP (RFC 7672): TLS-параметры MTA публикуются в DNSSEC-подписанных TLSA-записях. Более надёжно (криптографически), но требует DNSSEC — который большинство доменов не разворачивает.

MTA-STSDANE
Транспорт политикиHTTPSDNSSEC
Trust anchorWeb PKI (CA)DNSSEC root
Пре-требованияВалидный HTTPS-сертDNSSEC на всей цепочке
Легко развернутьДаНет (DNSSEC)

Postfix + MTA-STS

# Установить резолвер
apt install postfix-mta-sts-resolver

# /etc/postfix/main.cf
smtp_tls_policy_maps = socketmap:inet:127.0.0.1:8461:postfix

# /etc/mta-sts-daemon.yml
port: 8461
cache:
  type: internal
default_zone:
  strict_testing: false
  timeout: 4

См. также