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