TLS-RPT
TLS-RPT (SMTP TLS Reporting, RFC 8460) — механизм отправки отчётов о неудачных TLS-подключениях при доставке почты в твой домен. Отчёты приходят от других почтовых серверов (Google, Microsoft, Yahoo). Полезно для отладки TLS/SMTP и диагностики MTA-STS.
Как работает
- Домен публикует TXT-запись с адресом для отчётов.
- Отправляющие серверы, если у них не получилось установить TLS или проверить MTA-STS-политику, копят статистику.
- Раз в 24 часа шлют агрегированный JSON-отчёт по указанному адресу.
Настройка
_smtp._tls.example.com. IN TXT "v=TLSRPTv1; rua=mailto:tls-reports@example.com"
Или на HTTPS:
_smtp._tls.example.com. IN TXT "v=TLSRPTv1; rua=https://reports.example.com/tls"
Можно несколько адресатов:
"v=TLSRPTv1; rua=mailto:tls@example.com,mailto:security@example.com"
Формат отчёта
JSON, gzip'нутый, в attachment письма (или на HTTPS POST). Пример:
{
"organization-name": "Google Inc.",
"date-range": {
"start-datetime": "2026-07-15T00:00:00Z",
"end-datetime": "2026-07-16T00:00:00Z"
},
"contact-info": "smtp-tls-reporting@google.com",
"report-id": "2026-07-15T00:00:00Z_example.com",
"policies": [
{
"policy": {
"policy-type": "sts",
"policy-string": ["version: STSv1", "mode: enforce", "mx: mail.example.com"],
"policy-domain": "example.com",
"mx-host": ["mail.example.com"]
},
"summary": {
"total-successful-session-count": 1247,
"total-failure-session-count": 3
},
"failure-details": [
{
"result-type": "certificate-expired",
"sending-mta-ip": "209.85.220.41",
"receiving-mx-hostname": "mail.example.com",
"failed-session-count": 3
}
]
}
]
}
Типы failure
| Result-type | Что случилось |
|---|---|
| starttls-not-supported | Приёмник не предложил STARTTLS |
| certificate-host-mismatch | CN/SAN серта не совпал с MX-именем |
| certificate-expired | Просрочен |
| certificate-not-trusted | Untrusted CA (self-signed) |
| validation-failure | Общее «TLS handshake не удался» |
| sts-policy-fetch-error | Не смог скачать MTA-STS политику |
| sts-policy-invalid | Политика есть, но битая |
| sts-webpki-invalid | Серт HTTPS-эндпоинта невалиден |
| tlsa-invalid | DANE-TLSA-запись битая |
| dnssec-invalid | DNSSEC-проверка не прошла |
| dane-required | DANE требует TLS, а не сработало |
Практика
- Опубликовать TXT.
- Создать почтовый ящик
tls-reports@example.com. - Ждать неделю.
- Прогонять полученные JSON через парсер, смотреть где failure.
Инструменты
- URIports, DMARC-Report, Postmark — коммерческие агрегаторы, принимают TLS-RPT.
- tlsrpt-python — open-source парсер.
- Rspamd с TLS-RPT-модулем.
Общие проблемы находимые через TLS-RPT
- Просрочка сертификата на MX-сервере (Let's Encrypt renewal сломался).
- MX-хост не соответствует SAN сертификата.
- Один из бэкапных MX не поддерживает TLS.
- MTA-STS политика битая — 90-day HSTS-like кеш держит фейл.
- DNSSEC-цепочка сломана (актуально для DANE).
Комбо для полной SMTP-security
# DNS-записи для example.com
_dmarc TXT "v=DMARC1; p=reject; rua=mailto:dmarc@example.com"
_mta-sts TXT "v=STSv1; id=20260716"
_smtp._tls TXT "v=TLSRPTv1; rua=mailto:tls-rpt@example.com"
# SPF на apex
@ TXT "v=spf1 mx -all"
# DKIM
mail._domainkey TXT "v=DKIM1; k=rsa; p=..."