Как настроить отчеты MTA-STS и TLS для вашего домена с помощью Apache в Ubuntu 18.04

Автор выбралElectronic Frontier Foundation Inc для получения пожертвования в рамках программыWrite for DOnations.

Вступление

Mail Transport Agent Strict Transport Security (MTA-STS) - это новый интернет-стандарт, который позволяет включить строгий принудительный TLS для электронной почты, отправляемой между поддерживаемыми поставщиками электронной почты. Это похоже наHTTP Strict Transport Security (HSTS), где политика принудительного TLS устанавливается и затем кэшируется в течение определенного периода времени, что снижает риск атак типа «злоумышленник в середине» или перехода на более раннюю версию.

MTA-STS дополняется отчетом SMTP TLS (TLSRPT), который позволяет понять, какие электронные письма успешно доставляются по TLS, а какие нет. TLSRPT похож наDMARC reporting, но для TLS.

Основная причина внедрения MTA-STS для вашего домена заключается в том, чтобы гарантировать, что конфиденциальная электронная почта, отправленная вам, будет безопасно передаваться по TLS. Другие методы поддержки TLS для обмена сообщениями по электронной почте, такие как STARTTLS, по-прежнему подвержены атакам типа «человек посередине», поскольку исходное соединение не зашифровано. MTA-STS помогает гарантировать, что после того, как будет установлено хотя бы одно безопасное соединение, TLS будет использоваться по умолчанию с этого момента, что значительно снижает риск этих атак.

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

В этом руководстве вы узнаете, как настроить MTA-STS и TLSRPT для вашего доменного имени, а затем интерпретировать свой первый отчет TLS. Хотя в этом руководстве рассматриваются этапы использования Apache в Ubuntu 18.04 с сертификатом Let Encrypt, конфигурация MTA-STS / TLSRPT также будет работать на альтернативах, таких как Nginx в Debian.

Предпосылки

Прежде чем начать это руководство, вам необходимо:

  • Доменное имя, уже настроенное для получения электронной почты с использованием вашего собственного почтового сервера или размещенной почтовой службы, напримерG Suite илиOffice 365. В этом руководстве будет использоватьсяyour-domain, однако его следует заменить вашим собственным доменным именем. Вам потребуется настроить поддомен как часть учебного пособия, поэтому убедитесь, что у вас есть доступ к настройкам DNS для вашего домена.

  • Один сервер Ubuntu 18.04, настроенный в соответствии сInitial Server Setup with Ubuntu 18.04, включая пользователя sudo без полномочий root.

  • Веб-сервер Apache устанавливается и настраивается следующим образом:How to Install the Apache Web Server on Ubuntu 18.04.

  • Настроенный клиент Certbot для получения сертификата Let’s Encrypt, следуяHow To Secure Apache with Let’s Encrypt on Ubuntu 18.04.

Когда они будут готовы, войдите на свой сервер как пользователь без полномочий root, чтобы начать.

[.note] #Note: После того, как вы выполнили шаги по внедрению MTA-STS и TLSRPT, вам, возможно, придется подождать до 24 часов, чтобы получить свой первый отчет TLS. Это связано с тем, что большинство провайдеров электронной почты отправляют отчеты один раз в день. Вы можете возобновить обучение с шага 5, как только получите свой первый отчет.
#

[[step-1 -—- created-an-mta-sts-policy-file]] == Шаг 1. Создание файла политики MTA-STS

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

Во-первых, откройте новый текстовый файл в вашем домашнем каталоге, чтобы у вас было где записать желаемую конфигурацию:

nano mta-sts.txt

Сначала мы рассмотрим пример, а затем вы напишите свой собственный файл конфигурации.

Ниже приведен пример файла конфигурации MTA-STS:

Пример файла конфигурации MTA-STS

version: STSv1
mode: enforce
mx: mail1.your-domain
mx: mail2.your-domain
max_age: 604800

В этом примере файла конфигурации указано, что вся электронная почта, доставляемая вmail1.your-domain иmail2.your-domain от поддерживаемых провайдеров, должна доставляться через действующее соединение TLS. Если действительное соединение TLS не может быть установлено с вашим почтовым сервером (например, если срок действия сертификата истек или он самоподписан), сообщение не будет доставлено.

Это значительно усложнит для злоумышленника перехват и изменение / отслеживание вашей электронной почты в ситуации, подобной атаке «человек посередине». Это связано с тем, что правильное включение MTA-STS позволяет передавать электронную почту только через действительное соединение TLS, для которого требуется действительный сертификат TLS. Злоумышленнику будет сложно получить такой сертификат, поскольку для этого обычно требуется привилегированный доступ к вашему доменному имени и / или веб-сайту.

Как показано в примере ранее на этом шаге, файл конфигурации состоит из нескольких пар ключ / значение:

  • version:

    • Purpose: чтобы указать версию спецификации MTA-STS для использования.

    • Accepted Values: В настоящее время единственное допустимое значение -STSv1.

    • Example:version: STSv1

  • mode:

    • Purpose: укажите, в каком режиме должен быть включен MTA-STS.

    • Accepted Values:

      • enforce: принудительно использовать для всей входящей электронной почты от поддерживаемых провайдеров допустимый TLS.

      • testing: режим только для отчетов. электронная почта не будет заблокирована, но отчеты TLSRPT по-прежнему отправляются.

      • none: отключить MTA-STS.

    • Example:mode: enforce

  • mx:

    • Purpose: чтобы указать, каким почтовым серверам разрешено обрабатывать электронную почту для вашего домена. Это должно соответствовать серверам, указанным в ваших записяхmx.

    • Accepted Values: полное доменное имя почтового сервера или хост с подстановочными знаками. Для указания нескольких почтовых серверов необходимо использовать несколько значенийmx:.

    • Example:mx: mail1.your-domain,mx: mail2.your-domain,mx: *.example.org

  • max_age:

    • Purpose: чтобы указать максимальное время жизни политики MTA-STS в секундах.

    • Accepted Values: любое положительное целое число до 31557600.

    • Example:max_age: 604800 (1 неделя)

Вы также можете просмотреть официальную спецификацию пар ключ / значение вSection 3.2 of the MTA-STS RFC.

[.warning] #Warning: Включение MTA-STS в режимеenforce может неожиданно привести к тому, что некоторые электронные письма не будут доставлены вам. Вместо этого рекомендуется сначала использоватьmode: testing и низкое значениеmax_age:, чтобы убедиться, что все работает правильно, прежде чем полностью включить MTA-STS.
#

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

Следующий пример файла идеально подходит для тестирования MTA-STS, так как он не приведет к неожиданной блокировке электронных писем и имеетmax_age всего 1 день, что означает, что если вы решите отключить его, срок действия конфигурации истечет. быстро. Обратите внимание, что некоторые поставщики электронной почты будут отправлять отчеты TLSRPT только в том случае, еслиmax_age больше 1 дня, поэтому 86401 секунда - хороший выбор (1 день и 1 секунда).

Пример тестового файла конфигурации MTA-STS

version: STSv1
mode: testing
mx: mail1.your-domain
mx: mail2.your-domain
max_age: 86401

На этом шаге вы создали нужный файл конфигурации MTA-STS и сохранили его в своем домашнем регионе. На следующем шаге вы настроите веб-сервер Apache для обслуживания файла в правильном формате.

[[step-2 -—- configuring-apache-to-serve-your-mta-sts-policy-file]] == Шаг 2. Настройка Apache для обслуживания вашего файла политики MTA-STS

На этом этапе вы сконфигурируете виртуальный хост Apache для обслуживания файла конфигурации MTA-STS, а затем добавите запись DNS, чтобы разрешить доступ к сайту с субдомена.

Чтобы ваш файл конфигурации MTA-STS автоматически обнаруживался почтовыми серверами, он должен обслуживаться по правильному пути:https://mta-sts.your-domain/.well-known/mta-sts.txt. Вы должны использовать поддоменmta-sts через HTTPS и путь/.well-known/mta-sts.txt, иначе ваша конфигурация не будет работать.

Это может быть достигнуто путем создания нового виртуального хоста Apache для поддоменаmta-sts, который будет обслуживать файл политики MTA-STS. Этот шаг основан на базовой конфигурации, которую вы настроили на предварительном шагеHow to Install the Apache Web Server on Ubuntu 18.04.

Во-первых, создайте каталог для вашего виртуального хоста:

sudo mkdir /var/www/mta-sts

Если вы размещаете на своем веб-сервере несколько разных доменов, рекомендуется использовать для каждого свой виртуальный хост MTA-STS, например/var/www/mta-sts-site1 и/var/www/mta-sts-site2.

Затем вам нужно создать каталог.well-known, в котором будет храниться ваш файл конфигурации MTA-STS. .well-known - это стандартизированный каталог для «широко известных» файлов, таких как файлы проверки сертификатов TLS,security.txt и т. д.

sudo mkdir /var/www/mta-sts/.well-known

Теперь вы можете переместить файл политики MTA-STS, созданный на шаге 1, в каталог веб-сервера, который вы только что создали:

sudo mv ~/mta-sts.txt /var/www/mta-sts/.well-known/mta-sts.txt

Вы можете проверить, что файл был скопирован правильно, если вы хотите:

cat /var/www/mta-sts/.well-known/mta-sts.txt

Это выведет содержимое файла, созданного на шаге 1.

Чтобы Apache обслуживал файл, вам необходимо настроить новый виртуальный хост и включить его. MTA-STS работает только через HTTPS, поэтому вы будете использовать исключительно порт443 (HTTPS), а не использовать порт80 (HTTP).

Во-первых, создайте новый файл конфигурации виртуального хоста:

sudo nano /etc/apache2/sites-available/mta-sts.conf

Как и в случае с каталогом виртуальных хостов, если вы размещаете несколько разных доменов на одном веб-сервере, рекомендуется использовать разные имена виртуальных хостов для каждого.

Затем скопируйте следующий пример конфигурации в файл и заполните переменные, где это необходимо:

~/etc/apache2/sites-available/mta-sts.conf



    ServerName mta-sts.your-domain
    DocumentRoot /var/www/mta-sts

    ErrorDocument 403 "403 Forbidden - This site is used to specify the MTA-STS policy for this domain, please see '/.well-known/mta-sts.txt'. If you were not expecting to see this, please use https://your-domain instead."

    RewriteEngine On
    RewriteOptions IgnoreInherit
    RewriteRule !^/.well-known/mta-sts.txt - [L,R=403]

    SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
    SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
    Include /etc/letsencrypt/options-ssl-apache.conf

Эта конфигурация создаст виртуальный хостmta-sts, который будет обслуживаться наmta-sts.your-domain. Он также будет перенаправлять все запросы, кроме запросов к самому файлуmta-sts.txt, на настраиваемую страницу ошибок403 Forbidden с понятным объяснением того, для чего предназначен сайт поддомена. Это сделано для того, чтобы посетители, случайно натолкнувшиеся на ваш сайт MTA-STS, не были случайно сбиты с толку.

В настоящее время используется самозаверяющий сертификат TLS. Это не идеально, поскольку для правильной работы MTA-STS требуется полностью действительный / доверенный сертификат. На шаге 3 вы получите сертификат TLS с помощью Let Encrypt.

Затем убедитесь, что необходимые модули Apache включены:

sudo a2enmod rewrite ssl

После этого включите новый виртуальный хост:

sudo a2ensite mta-sts

Затем запустите проверку синтаксиса файлов конфигурации Apache, чтобы убедиться в отсутствии непредвиденных ошибок:

sudo apachectl configtest

Когда тест проходит без ошибок, вы можете перезапустить Apache, чтобы полностью включить новый виртуальный хост:

sudo service apache2 restart

Теперь, когда виртуальный хост Apache настроен и настроен, вам необходимо создать необходимые записи DNS, чтобы разрешить доступ к ним с использованием полного доменного имениmta-sts.your-domain.

Способ, которым это делается, зависит от используемого вами хостинг-провайдера DNS. Однако, если вы используете DigitalOcean в качестве поставщика DNS, просто перейдите к своему проекту, а затем нажмите на свой домен.

Наконец, добавьте необходимые записи DNS для поддоменаmta-sts. Если ваш Droplet использует только IPv4, создайте записьA дляmta-sts, указав наyour-server-ipv4-address. Если вы также используете IPv6, создайте записьAAAA, указывающую наyour-server-ipv6-address.

A screenshot of the DigitalOcean DNS control panel

На этом шаге вы создали и настроили новый виртуальный хост Apache для своего субдомена MTA-STS, а затем добавили необходимые записи DNS, чтобы обеспечить легкий доступ к нему. На следующем шаге вы получите доверенный сертификат Let Encrypt для вашего поддоменов MTA-STS.

[[step-3 -—- acquiring-a-let-39-s-encrypt-certificate-for-your-mta-sts-subdomain]] == Шаг 3. Получение сертификата Let's Encrypt для вашего субдомена MTA-STS

На этом этапе вы получите сертификат TLS от Let’s Encrypt, чтобы ваш сайтmta-sts.your-domain правильно обслуживался по HTTPS.

Для этого вы будете использоватьcertbot, который вы установили как часть предварительного этапаHow To Secure Apache with Let’s Encrypt on Ubuntu 18.04.

Во-первых, запуститеcertbot, чтобы выдать сертификат для вашего поддоменаmta-sts, используя метод проверки плагина Apache:

sudo certbot --apache -d mta-sts.your-domain

Это автоматически выдаст доверенный сертификат и установит его на ваш веб-сервер Apache. Когда мастер Certbot спросит о настройке перенаправления HTTP → HTTPS, выберите «Нет», так как это не требуется для MTA-STS.

В завершение протестируйте новый виртуальный хост, чтобы убедиться, что он работает правильно. Используйте веб-браузер для посещенияhttps://mta-sts.your-domain/.well-known/mta-sts.txt или используйте инструмент командной строки, напримерcurl:

curl https://mta-sts.your-domain/.well-known/mta-sts.txt

Это выведет файл политики MTA-STS, который вы создали на шаге 1:

Outputversion: STSv1
mode: testing
mx: mail1.your-domain
mx: mail2.your-domain
max_age: 86401

В случае возникновения ошибки убедитесь, что конфигурация виртуального хоста из шага 2 верна и что вы добавили запись DNS для поддоменаmta-sts.

На этом этапе вы выпустили сертификат Let’s Encrypt TLS для своего субдоменаmta-sts и проверили его работоспособность. Затем вы установите некоторые записи DNS TXT, чтобы полностью включить MTA-STS и TLSRPT.

[[step-4 -—- configuring-the-dns-records-required-to-enable-mta-sts-and-tlsrpt]] == Шаг 4. Настройка записей DNS, необходимых для включения MTA-STS и TLSRPT

На этом шаге вы сконфигурируете две записи TXT DNS, которые полностью активируют политику MTA-STS, которую вы уже создали, а также активируют TLS Reporting (TLSRPT).

Эти записи DNS могут быть настроены с использованием любого поставщика услуг размещения DNS, но в этом примере в качестве поставщика используется DigitalOcean.

Сначала войдите в панель управления DigitalOcean и перейдите к своему проекту, а затем нажмите на свой домен.

Затем вам нужно добавить следующие две записи TXT:

_mta-sts.your-domain IN TXT "v=STSv1; id=id-value"
_smtp._tls.your-domain IN TXT "v=TLSRPTv1; rua=reporting-address"

id-value - это строка, используемая для определения версии вашей политики MTA-STS. Если вы обновите свою политику, вам также потребуется обновить значениеid, чтобы обеспечить обнаружение новой версии почтовыми службами. В качествеid рекомендуется использовать отметку текущей даты, например20190811231231 (23:12:31 11 августа 2019 г.).

reporting-address - это адрес, на который будут отправляться ваши отчеты TLS. Это может быть адрес электронной почты с префиксомmailto: или веб-URI, например, для API, собирающего отчеты. Адрес сообщения не обязательно должен быть адресомyour-domain. Вы можете использовать совершенно другой домен, если хотите.

Например, следующие две примеры записей являются действительными:

_mta-sts.your-domain IN TXT "v=STSv1; id=20190811231231"
_smtp._tls.your-domain IN TXT "v=TLSRPTv1; rua=mailto:tls-reports@your-domain"

При необходимости измените переменные и установите эти записи DNS TXT на панели управления DigitalOcean (или у любого провайдера DNS, которого вы используете):

A screenshot of the DigitalOcean control panel

A screenshot of the DigitalOcean control panel

Как только эти записи DNS будут установлены и распространены, MTA-STS будет включен с политикой, созданной на шаге 1, и начнет получать отчеты TLSRPT по указанному вами адресу.

На этом этапе вы настроили записи DNS, необходимые для включения MTA-STS. Далее вы получите, а затем интерпретируете свой первый отчет TLSRPT.

[[step-5 -—- interpting-your-first-tlsrpt-report]] == Шаг 5 - Интерпретация вашего первого отчета TLSRPT

Теперь, когда вы включили MTA-STS и TLSRPT (отчеты TLS) для своего домена, вы начнете получать отчеты от поддерживаемых поставщиков электронной почты. В этих отчетах будет показано количество электронных писем, которые были или не были успешно доставлены по TLS, и причины ошибок.

Различные почтовые провайдеры отправляют свои отчеты в разное время; например, Google Mail отправляет свои отчеты ежедневно около 10:00 UTC.

В зависимости от того, как вы настроили запись DNS TLSRPT на шаге 5, вы будете получать отчеты либо по электронной почте, либо через веб-API. В этом руководстве рассматривается метод электронной почты, так как это наиболее распространенная конфигурация.

Если вы только что завершили оставшуюся часть этого урока, подождите, пока вы не получите свой первый отчет, и вы можете продолжить.

В вашем ежедневном отчете TLSRPT по электронной почте обычно указывается следующая тема:

Report Domain: your-domain Submitter: google.com Report-ID: <[email protected]>

Это электронное письмо будет иметь вложение в формате.gz, которое представляет собой сжатый архив Gzip, с именем файла, подобным следующему:

google.com!your-domain!1565222400!1565308799!001.json.gz

В оставшейся части этого руководства этот файл будет называтьсяreport.json.gz.

Сохраните этот файл на локальном компьютере и распакуйте его с помощью любого инструмента, который вы предпочитаете.

Если вы используете систему Linux на основе Debian, вы сможете выполнить командуgzip -d для распаковки архива:

gzip -d report.json.gz

Это приведет к созданию файла JSON с именемreport.json.

Далее, вы можете просмотреть отчет либо непосредственно в виде необработанной строки JSON, либо использовать свой любимый префиксатор JSON, чтобы перевести его в более читаемый формат. В этом примере будет использоватьсяjq, но вы также можете использоватьjson.tool Python, если хотите.

[.note] #Note: Если у вас не установлен jq, вы можете установить его с помощьюapt install jq. Или для других операционных систем используйте необходимыйinstallation instructions из jq.
#

jq . report.json

Это выведет что-то похожее на следующее:

Prettified report.json{
    "organization-name": "Google Inc.",
    "date-range": {
        "start-datetime": "2019-08-10T00:00:00Z",
        "end-datetime": "2019-08-10T23:59:59Z"
    },
    "contact-info": "[email protected]",
    "report-id": "2019-08-10T00:00:00Z_your-domain",
    "policies": [
        {
            "policy": {
                "policy-type": "sts",
                "policy-string": [
                    "version: STSv1",
                    "mode: testing",
                    "mx: mail1.your-domain",
                    "mx: mail2.your-domain",
                    "max_age: 86401"
                ],
                "policy-domain": "your-domain"
            },
            "summary": {
                "total-successful-session-count": 230,
                "total-failure-session-count": 0
            }
        }
    ]
}

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

Этот пример отчета показывает, что 230 писем были успешно доставлены по TLS от почтового провайдера, который сгенерировал отчет, и при 0 доставках электронной почты не удалось установить правильное соединение TLS.

В случае сбоя, например, если срок действия сертификата TLS истекает или в сети есть злоумышленник, режим сбоя будет задокументирован в отчете. Некоторые примеры режимов отказа:

  • starttls-not-supported: если получающий почтовый сервер не поддерживает STARTTLS.

  • certificate-expired: Если срок действия сертификата истек.

  • certificate-not-trusted: если используется самоподписанный или другой недоверенный сертификат.

На этом последнем шаге вы получили, а затем интерпретировали свой первый отчет TLSRPT.

Заключение

В этой статье вы настроили и настроили отчеты MTA-STS и TLS для своего домена и интерпретировали свой первый отчет TLSRPT.

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

Наконец, если вы хотите узнать больше о спецификациях MTA-STS и TLSRPT, вы можете просмотреть RFC для них обоих:

Related