MTA-STS
MTA-STS (SMTP MTA Strict Transport Security, RFC 8461) — механизм принуждения отправляющих серверов использовать TLS с валидным сертификатом при доставке почты. Защищает от downgrade-атак (MITM на пути между MTA'ями). Аналог HSTS для веба.
Проблема
Обычный SMTP между MTA:
- Отправитель делает MX-lookup:
example.com → mail.example.com. - Подключается по TCP:25.
- Договариваются:
STARTTLS? Если сервер отвечает 220 → TLS. Иначе — plaintext.
MITM легко может:
- Спуфить MX → перенаправить на свой сервер.
- Убрать
250-STARTTLSиз EHLO-ответа → отправитель не знает что можно TLS → шлёт в plaintext. - Использовать самоподписанный сертификат — плайнтекст фолбэк или связь с плохим сертификатом.
Известные атаки: STARTTLS stripping — крупные ISP (в Египте, Тайланде) стирали STARTTLS у своих клиентов.
Как MTA-STS решает
- Домен публикует политику: «мои MX-хосты — вот эти, используй TLS с валидным сертом обязательно».
- Политика скачивается по HTTPS с фиксированного URL и кешируется.
- Отправитель, зная политику, не позволит 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
- mode:
none/testing/enforce. - mx: список MX-хостов (wildcards ok).
- max_age: сколько секунд кешировать (до 31557600 = 1 год).
3. Валидный HTTPS-сертификат
Хост mta-sts.example.com должен иметь публично валидный сертификат (Let's Encrypt подходит). Именно им подписывается доверие к политике.
Modes
| Mode | Что делает |
|---|---|
| none | Ничего. Политика игнорируется. Можно временно чтобы отменить |
| testing | Собираем данные, но не блокируем. См. TLS-RPT |
| enforce | Требуем TLS + валидный серт + MX в списке. Иначе — отклонить |
Roll-out
- Убедиться что все свои MTA имеют валидные сертификаты Let's Encrypt / коммерческие.
- Опубликовать
mode: noneсначала — чтобы TXT-запись существовала. - Настроить TLS-RPT для получения отчётов.
- Через неделю →
mode: testing. Собираем отчёты неделю-месяц. - Если отчёты чистые →
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-STS | DANE | |
|---|---|---|
| Транспорт политики | HTTPS | DNSSEC |
| Trust anchor | Web 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