Перейти к содержимому

Шифрование входящей почты можно незаметно отключить

Предупреждение Весь домен Доставка писем

Общие инструкции. Откройте эту статью из отчёта PageCheck, чтобы увидеть её с почтовыми серверами вашего домена и точными шагами для вашего DNS-провайдера.

Что это такое

Почта между серверами обычно шифруется, но только если обе стороны договорятся об этом по пути, а злоумышленник посередине может убрать это предложение: тогда письмо доставляется без шифрования, и никто этого не замечает. MTA-STS — это небольшая публичная политика, которая сообщает отправляющим серверам, что ваши почтовые серверы всегда поддерживают шифрование, поэтому без него доставлять нельзя.

Что не так

У example.com нет политики MTA-STS, поэтому шифрование отправляемой на него почты можно незаметно отключить. Его политика DMARC уже останавливает письма, подделанные от его имени; это следующий шаг.

Как исправить

Начните с режима testing: отправляющие серверы тогда только сообщают о проблемах и по-прежнему доставляют каждое письмо, так что ничего не сломается, пока вы проверяете настройку.

1. Напишите файл политики. Сохраните это как обычный текстовый файл с именем mta-sts.txt. В нём должен быть указан каждый почтовый сервер (MX) домена:

mta-sts.txt

version: STSv1
mode: testing
mx: mail.example.com
max_age: 86400

2. Опубликуйте его по собственному адресу. Файл должен открываться по адресу https://mta-sts.example.com/.well-known/mta-sts.txt через HTTPS, с действительным сертификатом и без какого-либо перенаправления — перенаправление на www или на основной сайт заставляет отправителей игнорировать его.

Если ваш DNS находится в Cloudflare, проще всего — Cloudflare Worker (бесплатно): Workers & Pages → Create → Create Worker, назовите его mta-sts, замените его код кодом ниже и нажмите Deploy. Затем в Settings воркера → Domains & Routes → Add → Custom domain: mta-sts.example.com. Cloudflare создаст для него запись DNS и сертификат.

Cloudflare Worker

export default {
  async fetch() {
    const policy = [
      'version: STSv1',
      'mode: testing',
      'mx: mail.example.com',
      'max_age: 86400',
    ].join('\r\n') + '\r\n';
    return new Response(policy, { headers: { 'content-type': 'text/plain; charset=utf-8' } });
  },
};

У вашего хостинга: добавьте поддомен mta-sts.example.com с SSL-сертификатом, создайте в нём папку .well-known и загрузите туда mta-sts.txt.

  • Plesk: Websites & Domains → Add Subdomain, затем SSL/TLS Certificates → Let's Encrypt, затем File Manager.
  • cPanel: Domains → Create A New Domain, затем SSL/TLS Status → Run AutoSSL, затем File Manager.

3. Объявите политику в DNS.

  • Откройте DNS-записи вашего домена там, где управляется его DNS: обычно это регистратор домена, хостинг или Cloudflare.
  • Добавьте запись TXT с именем _mta-sts и значением v=STSv1; id=1 и сохраните.

4. Запросите отчёты. Отправляющие серверы будут ежедневно присылать по почте отчёт о каждой неудачной зашифрованной доставке. Сначала создайте ящик tls-reports@example.com (или используйте другой адрес, который вы читаете).

  • Откройте DNS-записи вашего домена там, где управляется его DNS: обычно это регистратор домена, хостинг или Cloudflare.
  • Добавьте запись TXT с именем _smtp._tls и значением v=TLSRPTv1; rua=mailto:tls-reports@example.com и сохраните.

5. Проверьте. Откройте https://mta-sts.example.com/.well-known/mta-sts.txt: файл должен отображаться как обычный текст. Затем запустите эту проверку снова: она читает файл и сравнивает его строки mx с вашими почтовыми серверами.

6. Примерно через две недели: включите принудительный режим. Когда в отчётах нет неудачных доставок, переключите файл в режим enforce с max_age в одну неделю:

mta-sts.txt

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

Затем измените TXT-запись _mta-sts на v=STSv1; id=2, чтобы отправители загрузили новый файл. Каждое последующее изменение файла требует нового id, а когда меняются ваши почтовые серверы, сначала обновите строки mx.

Set up MTA-STS (RFC 8461) for the mail domain example.com, starting in testing mode, and TLS-RPT (RFC 8460) reporting.
Its MX hosts (look them up first; this is a placeholder): mail.example.com.

Steps:
1. Serve this policy at https://mta-sts.example.com/.well-known/mta-sts.txt over HTTPS with a valid certificate for mta-sts.example.com, status 200, Content-Type text/plain, no redirect:
   version: STSv1
   mode: testing
   mx: mail.example.com
   max_age: 86400
   Use the web host (a subdomain with its own certificate) or a static host.
2. Add the TXT record _mta-sts.example.com = "v=STSv1; id=1".
3. Add the TXT record _smtp._tls.example.com = "v=TLSRPTv1; rua=mailto:tls-reports@example.com" (make sure that mailbox exists).
4. Verify: curl -sv https://mta-sts.example.com/.well-known/mta-sts.txt (200, no redirect, the policy text) and dig TXT _mta-sts.example.com +short.
5. Tell me to come back in two weeks: if the TLS reports show no failures, switch to mode: enforce with max_age: 604800 and change the TXT record to "v=STSv1; id=2".
Every mx line must match an MX host exactly or by a one-label wildcard (*.example.com); a missing one makes enforcing senders refuse mail.

Resources:
- MTA-STS, RFC 8461 (IETF): https://datatracker.ietf.org/doc/html/rfc8461
- TLS-RPT, RFC 8460 (IETF): https://datatracker.ietf.org/doc/html/rfc8460

Проверьте свой сайт, чтобы узнать, есть ли у него эта проблема. Проверить сайт