В данной статье мы рассмотрим настройку почтового сервера в части, касающейся политики SMTP MTA Strict Transport Security (MTA-STS). MTA-STS — стандарт, который был разработан для обеспечения использования TLS для подключений между почтовыми серверами. Крупные провайдеры почтовых служб, такие как Google, давно используют политику MTA-STS, описанную в стандарте RFC 8461. В нашей стране, среди первых оказалась служба Mail.ru, которая с 2020 года начала применять MTA-STS.

MTA-STS
MTA-STS

Мы рассмотрим лишь частный случай настройки собственного почтового сервера, касающийся только приема вхдящей почты. Известно, что не все OpenSource почтовые серверы поддерживают политику MTA-STS при передаче исходящей почты.

Допустим вы имеете доменное имя, например, yahoo.com и и ваш регистратор предоставляет вам возможность редактирования DNS-зоны на собственном DNS-сервере. Также вы имеете выделенный внешний IP-адрес, например, 74.6.143.25, который предоставлен вашим Internet-провайдером.

Reverse Lookup

Вы также решили, что ваш почтовый сервер будет иметь доменное имя mail.yahoo.com и первое, что вам необходимо сделать, это попросить вашего Internet-провайдера сделать обратную DNS-запись:

  25.143.6.74.in-addr.arpa.   86400  IN  PTR    mail.yahoo.com.

которая преобразует IP-адрес в имя сервера.

Postfix

Таким образом в настройках почтового сервера (здесь и далее, мы будем рассматривать postfix), в файле /etc/postfix/main.cf, необходимо указать имя сервера и имя домена, следующим образом:

  myhostname = mail.yahoo.com
  mydomain   = yahoo.com

Отметим сразу, вам понадобятся SSL-сертификаты для субдоменов mail и mta-sts. Получить их проще всего с помощью утилиты certbot (Let's Encrypt).

Важным здесь является то, что сервер исходящей почты должен иметь сертификаты, выпущенные для субдомена mail.yahoo.com. Поэтому, в файле /etc/postfix/main.cf, необходимо прописать именно следующие пути:

  smtpd_tls_cert_file = /etc/letsencrypt/live/mail.yahoo.com/fullchain.pem
  smtpd_tls_key_file  = /etc/letsencrypt/live/mail.yahoo.com/privkey.pem
  smtpd_tls_CAfile    = /etc/letsencrypt/live/mail.yahoo.com/chain.pem

если речь идет о стандартном расположении сертификатов, полученных с помощью certbot.

Nginx

MTA-STS политика должна быть доступна по адресу:

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

Это простой текстовый файл, где каждая запись располагается в отдельной строке. End-of-line символами могут быть, как символ '\n', так и последовательность '\r\n' (как было принято в MS Windows). Сам файл должен заканчиваться пустой строкой.

Проще всего, организовать публикацию MTA-STS политики с помощью Nginx:

    #
    # MTA-STS server:
    #

    server {
        listen 80;
        listen [::]:80;

        server_name mta-sts.yahoo.com;
        return 301 https://mta-sts.yahoo.com$request_uri;
    }

    server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;

        server_name mta-sts.yahoo.com;

        error_log /var/log/nginx/mta-sts.yahoo.com-error.log;
        access_log /var/log/nginx/mta-sts.yahoo.com-access.log;

        ssl_certificate          /etc/letsencrypt/live/mta-sts.yahoo.com/fullchain.pem;
        ssl_certificate_key      /etc/letsencrypt/live/mta-sts.yahoo.com/privkey.pem;
        ssl_trusted_certificate  /etc/letsencrypt/live/mta-sts.yahoo.com/chain.pem;

        location = /.well-known/mta-sts.txt {
            default_type text/plain;
            return 200 "version: STSv1\nmode: enforce\nmx: mail.yahoo.com\nmax_age: 604800\n";
        }
    }

Такая организация виртуального сервера не требует создания файла mta-sts.txt в файловой системе машины, на которой работает Nginx.

SSL-сертификаты для субдомена mta-sts.yahoo.com, также необходимо получить с помошью certbot.

DNS Records

Теперь, для того чтобы на ваш почтовый сервер доставлялись сообщения от таких почтовых служб как gmai.com и mail.ru, необходимо выполнить самое важное, а именно сделать записи в вашей DNS-зоне.

С указанием IP-адресов виртуалных серверов все достаточно просто:

  mail          A       74.6.143.25
  mta-sts       A       74.6.143.25

Далее необходимо сделать следующие записи:

  _mta-sts      TXT     v=STSv1; id=20241109025300Z;
  _smtp._tls    TXT     v=TLSRPTv1; rua=mailto:support@yahoo.com

Об этом достаточно много информации в Internet. Единственно, на что следует обратить снимание, это id в записи _mta-sts. Если вы меняете политику, то есть содержимое файла:

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

следует также обновить id, например, назначив новую дату id=20241109035700Z.

Дополнительно можно задать:

  imap          CNAME   yahoo.com.
  pop           CNAME   yahoo.com.
  smtp          CNAME   yahoo.com.

И вот теперь, самое важное. Ключевым моментом является MX-запись:

  @             MX      0    mail.yahoo.com.

или в стиле bind сервера:

  yahoo.com.   IN MX   0    mail.yahoo.com.

MX-запись позволяет получить имя сервера получателя по доменному имени почты и здесь важна обратная DNS-запись, о создании которой вы просили вашего Internet-провайдера.

Иными словами MX-запись должа отсылать к имени вашего почтового сервера mail.yahoo.com и, кроме того, PTR-запись должна, по IP-адресу вашего домена, возвращать тоже самое имя, то есть mail.yahoo.com.

Выгрузив вашу DNS-зону на всеобщее обозрение, вам будет необходимо подождать один или несколько дней поскольку TTL у всех разные, а в зоне .ru (как говорят специалисты mail.ru) NS записи отдаются с TTL равным TTL=345600 (четверо суток). На практике, если вы все сделали правильно, время ожидания не превысит и получаса, так как DNS-серверы регистраторов довольно быстро выгружают зоны.

Test Receiver

Проверить результаты своей работы можно по адресу:

  https://www.checktls.com/TestReceiver

Здесь необходимо ввести доменное имя yahoo.com и включить проверку MTA-STS.

Запустив тест, путем нажатия на кнопку Run Test, надо будет немного подождать получения результатов тестирования:

seconds         lookup result
[000.000]       DNS LOOKUPS
[000.001]       SEARCHLIST      168.63.129.16,1.1.1.1,8.8.8.8
[000.747]       MTASTS policy-->url     https://mta-sts.yahoo.com/.well-known/mta-sts.txt
[000.747]       MTASTS policy-->status  200 OK
[000.748]       MTASTS policy-->version STSv1
[000.748]       MTASTS policy-->mode    enforce
[000.748]       MTASTS policy-->max_age 604800
[000.748]       MTASTS policy-->mx      mail.yahoo.com
[000.875]       _mta-sts.yahoo.com      v=STSv1
[000.876]       _mta-sts.yahoo.com      id=20241108125700Z
[001.123]       _smtp._tls.yahoo.com    v=TLSRPTv1
[001.124]       _smtp._tls.yahoo.com    rua=mailto:support@yahoo.com
[001.696]       MX-->yahoo.com          (0) mail.yahoo.com {MTASTS OK}
[001.943]       MX:A-->mail.yahoo.com   74.6.143.25

  .   .   .

Важно обратить внимание на строки:

  .   .   .

                Cert VALIDATED: ok
                Cert Hostname VERIFIED (mail.yahoo.com = mail.yahoo.com | DNS:mail.yahoo.com)
                Not Valid Before: Oct 20 04:08:11 2024 GMT
                Not Valid After: Jan 18 04:08:10 2025 GMT
  .   .   .

Когда мы говорили о SSL-сертификате сервера исходящей почты (smtpd), мы имели ввиду важность того, что сертификаты должны быть выпущены именно для сервера mail.yahoo.com.

Mandatory TLS

Электронная почта в Интернете, как и сам Интернет, спроектирована так, чтобы быть надежной и позволяющей обойти проблемы. В случае с электронной почтой это означает отправку электронного письма в виде обычного текста, если с шифрованием что-то пойдет не так. Сегодня, к сожалению, это может противоречить политике, контрактным обязательствам и быть незаконным.

Системы электронной почты поддерживают "Обязательный" ("Принудительный" или "Требуемый") TLS (англ. transport layer security — Протокол защиты транспортного уровня). Такие системы позволяют вам вести список доменов, которые ДОЛЖНЫ использовать шифрование. Если что-то пойдет не так с шифрованием, сообщение электронной почты либо будет ждать и повторит попытку позже, либо вернется обратно отправителю.

Протестировать собственный сервер в режиме Mandatory TLS также можно на ресурсе:

  https://www.checktls.com/

Для этого необходимо выбрать пункт меню "//email/testMandatoryTo:" или набрать в строке поиска браузера:

  https://www.checktls.com/TestReceiver?ASSURETLS

Затем выполнить тестирование как обычно, выбрав необходимые тесты.

Источники:

Enjoy.

Комментарии (0)