Base de Conhecimento

Como configurar os relatórios MTA-STS e TLS para o seu domínio usando o Apache no Ubuntu 18.04  Imprimir este Artigo

Introdução

O MTA-STS (Security Strict Transport Security) do Mail Transport Agent é um novo padrão da Internet que permite ativar o TLS forçado estrito para emails enviados entre provedores de email compatíveis. É semelhante ao HSTS (HTTP Strict Transport Security) , onde uma política force-TLS é definida e armazenada em cache por um período de tempo especificado, reduzindo o risco de ataques intermediários ou de downgrade.

O MTA-STS é complementado pelo SMTP TLS Reporting (TLSRPT), que fornece informações sobre quais emails são entregues com sucesso por TLS e quais não. TLSRPT é semelhante ao relatório DMARC , mas para TLS.

O principal motivo para implementar o MTA-STS para o seu domínio é garantir que o email confidencial enviado a você seja transmitido com segurança pelo TLS. Outros métodos para incentivar o TLS para comunicações por email, como o STARTTLS, ainda são suscetíveis a ataques intermediários, pois a conexão inicial não é criptografada. O MTA-STS ajuda a garantir que, uma vez estabelecida pelo menos uma conexão segura, o TLS seja usado por padrão a partir daí, o que reduz bastante o risco desses ataques.

Um exemplo de caso de uso para os relatórios MTA-STS e TLS é ajudar a criar um sistema seguro de atendimento ao cliente para o seu negócio. Os clientes podem enviar tíquetes de suporte por e-mail que contêm informações pessoais confidenciais, que precisam de uma conexão TLS segura. O MTA-STS ajuda a garantir a segurança da conexão e o TLSRPT fornece relatórios diários identificando todos os emails que não foram enviados com segurança - fornecendo informações cruciais sobre quaisquer ataques em andamento ou anteriores ao seu sistema de email.

Neste tutorial, você aprenderá como configurar o MTA-STS e o TLSRPT para o seu nome de domínio e depois interpretar o seu primeiro relatório TLS. Embora este tutorial cubra as etapas para o uso do Apache no Ubuntu 18.04 com um certificado Let's Encrypt, a configuração do MTA-STS / TLSRPT também funcionará em alternativas, como o Nginx no Debian.

Pré-requisitos

Antes de começar este guia, você precisará de:

  • Um nome de domínio já configurado para receber email, usando seu próprio servidor de email ou um serviço de email hospedado, como G Suite ou Office 365 . Este tutorial será usado por your-domaintoda parte, no entanto, este deve ser substituído por seu próprio nome de domínio. Você precisará configurar um subdomínio como parte do tutorial, para garantir que você possa acessar as configurações de DNS do seu domínio.

  • Um servidor Ubuntu 18.04 configurado seguindo a Configuração inicial do servidor com o Ubuntu 18.04 , incluindo um usuário sudo não root.

  • Um servidor web Apache foi instalado e configurado, seguindo Como instalar o servidor web Apache no Ubuntu 18.04 .

  • Um cliente Certbot configurado para adquirir um certificado Let's Encrypt, seguindo Como proteger o Apache com Let's Encrypt no Ubuntu 18.04 .

Depois de prepará-los, efetue login no servidor como usuário não root para começar.

Nota: Depois de concluir as etapas de implementação do MTA-STS e TLSRPT, talvez seja necessário esperar até 24 horas para receber seu primeiro relatório TLS. Isso ocorre porque a maioria dos provedores de email envia relatórios uma vez por dia. Você pode retomar o tutorial da Etapa 5 depois de receber seu primeiro relatório.

Etapa 1 - Criando um arquivo de diretiva MTA-STS

O MTA-STS é ativado e configurado usando um arquivo de configuração de texto sem formatação que você hospeda no seu site. Os servidores de email suportados serão conectados automaticamente ao seu site para recuperar o arquivo, o que faz com que o MTA-STS seja ativado. Nesta primeira etapa, você entenderá as opções disponíveis para esse arquivo e escolherá as mais adequadas para ele.

Primeiro, abra um novo arquivo de texto em seu diretório pessoal para que você tenha um lugar para anotar a configuração desejada:

  • nano mta-sts.txt

Primeiro, examinaremos um exemplo e, em seguida, você escreverá seu próprio arquivo de configuração.

A seguir, é apresentado um exemplo de um arquivo de configuração do MTA-STS:

Exemplo de arquivo de configuração do MTA-STS
version: STSv1
mode: enforce
mx: mail1.your-domain
mx: mail2.your-domain
max_age: 604800

Este arquivo de configuração de exemplo especifica que todos os emails entregues para de provedores suportados devem ser entregues por uma conexão TLS válida. Se uma conexão TLS válida não puder ser estabelecida com o servidor de correio (por exemplo, se o certificado expirou ou é autoassinado), o email não será entregue.mail1.your-domainmail2.your-domain

Isso tornará muito mais desafiador para um invasor interceptar e bisbilhotar / modificar seu email em uma situação como um ataque man-in-the-middle. Isso ocorre porque o MTA-STS ativado corretamente permite que o email seja transmitido apenas por uma conexão TLS válida, o que requer um certificado TLS válido. Seria difícil para um invasor adquirir esse certificado, pois isso geralmente requer acesso privilegiado ao seu nome de domínio e / ou site.

Conforme mostrado no exemplo anterior nesta etapa, o arquivo de configuração consiste em vários pares de chave / valor:

  • version:

    • Objetivo : especificar a versão da especificação MTA-STS a ser usada.
    • Valores aceitos : Atualmente, o único valor aceito é STSv1.
    • Exemplo :version: STSv1
  • mode:

    • Objetivo : especifique em que modo o MTA-STS deve ser ativado.
    • Valores aceitos :
      • enforce: Force todos os emails recebidos de provedores suportados a usar TLS válido.
      • testing: Modo somente relatório. o email não será bloqueado, mas os relatórios TLSRPT ainda serão enviados.
      • none: Desative o MTA-STS.
    • Exemplo :mode: enforce
  • mx:

    • Objetivo : especificar quais servidores de email têm permissão para manipular emails do seu domínio. Isso deve corresponder aos servidores especificados em seus mxregistros.
    • Valores aceitos : nome de domínio totalmente qualificado de um servidor de email ou host curinga. Vários mx:valores devem ser usados ​​para especificar vários servidores de correio.
    • Exemplo : ,mx: mail1.your-domainmx: mail2.your-domainmx: *.example.org
  • max_age:

    • Objetivo : especificar o tempo de vida máximo da diretiva MTA-STS, em segundos.
    • Valores aceitos : qualquer número inteiro positivo até 31557600.
    • Exemplo : max_age: 604800(1 semana)

Você também pode visualizar a especificação oficial para os pares de chave / valor na Seção 3.2 do RFC do MTA-STS .

Aviso: a ativação do MTA-STS no enforcemodo inesperadamente pode fazer com que alguns emails não sejam entregues a você. Em vez disso, é recomendável usar mode: testingum max_age:valor baixo no início, para garantir que tudo esteja funcionando corretamente antes de ativar o MTA-STS completamente.

Usando o arquivo de exemplo anterior na etapa, bem como os exemplos anteriores do par de chave / valor, grave o arquivo de política MTA-STS desejado e salve-o no arquivo que você criou no início da etapa.

O arquivo de exemplo a seguir é ideal para testar o MTA-STS, pois não fará com que nenhum e-mail seja bloqueado inesperadamente e tem max_ageapenas um dia, o que significa que, se você decidir desativá-lo, a configuração expirará rapidamente. Observe que alguns provedores de email enviarão apenas relatórios TLSRPT se o valor max_agefor superior a 1 dia, e é por isso que 86401 segundos é uma boa opção (1 dia e 1 segundo).

Exemplo de arquivo de configuração do MTA-STS de teste
version: STSv1
mode: testing
mx: mail1.your-domain
mx: mail2.your-domain
max_age: 86401

Nesta etapa, você criou o arquivo de configuração MTA-STS desejado e o salvou na sua área inicial. Na próxima etapa, você configurará um servidor da web Apache para servir o arquivo no formato correto.

Etapa 2 - Configurando o Apache para servir seu arquivo de políticas MTA-STS

Nesta etapa, você configurará um host virtual Apache para servir o arquivo de configuração do MTA-STS e adicionará um registro DNS para permitir que o site seja acessado a partir de um subdomínio.

Para que o seu arquivo de configuração do MTA-STS a ser descoberto automaticamente pelos servidores de email, ele deve ser servido exatamente no caminho certo: Você deve usar o subdomínio sobre HTTPS e o caminho, caso contrário, sua configuração não funcionará.https://mta-sts.your-domain/.well-known/mta-sts.txtmta-sts/.well-known/mta-sts.txt

Isso pode ser conseguido criando um novo host virtual Apache para o mta-stssubdomínio, que servirá o arquivo de políticas do MTA-STS. Esta etapa baseia-se na configuração básica que você definiu na etapa de pré-requisito Como instalar o servidor Web Apache no Ubuntu 18.04 .

Primeiro, crie um diretório para o seu host virtual:

  • sudo mkdir /var/www/mta-sts

Se você estiver hospedando vários domínios diferentes no servidor da Web, é recomendável usar um host virtual MTA-STS diferente para cada um, por exemplo /var/www/mta-sts-site1/var/www/mta-sts-site2.

Em seguida, você precisa criar o .well-knowndiretório, onde é armazenado o arquivo de configuração do MTA-STS. .well-knowné um diretório padronizado para arquivos 'conhecidos', como arquivos de validação de certificado TLS security.txte muito mais.

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

Agora você pode mover o arquivo de políticas MTA-STS que você criou na Etapa 1 para o diretório do servidor web que você acabou de criar:

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

Você pode verificar se o arquivo foi copiado corretamente, se desejar:

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

Isso exibirá o conteúdo do arquivo que você criou na Etapa 1.

Para que o Apache sirva o arquivo, você precisará configurar o novo host virtual e ativá-lo. O MTA-STS funciona apenas em HTTPS, portanto, você usará a porta 443(HTTPS) exclusivamente, em vez de usar a porta 80(HTTP) também.

Primeiro, crie um novo arquivo de configuração do host virtual:

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

Como no diretório do host virtual, se você estiver hospedando vários domínios diferentes no mesmo servidor da Web, é recomendável usar um nome de host virtual diferente para cada um.

Em seguida, copie a seguinte configuração de amostra no arquivo e preencha as variáveis ​​onde necessário:

~ / etc / apache2 / sites-available / mta-sts.conf
<IfModule mod_ssl.c>
<VirtualHost your-server-ipv4-address:443 [your-server-ipv6-address]:443>
    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 <a href=\"https://your-domain\" rel=\"noopener\">https://your-domain</a> 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
</VirtualHost>
</IfModule>

Essa configuração criará o mta-stshost virtual, que será servido em Ele também redirecionará todas as solicitações, exceto aquelas para o próprio arquivo, para uma página de erro personalizada , com uma explicação amigável sobre para que serve o site de subdomínio. Isso ajuda a garantir que todos os visitantes que encontrarem acidentalmente seu site MTA-STS não sejam confundidos inadvertidamente.mta-sts.your-domainmta-sts.txt403 Forbidden

Atualmente, um certificado TLS autoassinado é usado. Isso não é ideal, pois é necessário um certificado totalmente válido / confiável para o MTA-STS funcionar corretamente. Na etapa 3, você adquirirá um certificado TLS usando o Let's Encrypt.

Em seguida, verifique se os módulos Apache necessários estão ativados:

  • sudo a2enmod rewrite ssl

Depois disso, ative o novo host virtual:

  • sudo a2ensite mta-sts

Em seguida, execute uma verificação de sintaxe dos arquivos de configuração do Apache, para garantir que não haja erros inesperados:

  • sudo apachectl configtest

Quando o teste passa sem erros, você pode reiniciar o Apache para ativar totalmente o novo host virtual:

  • sudo service apache2 restart

Agora que o host virtual do Apache foi instalado e configurado, é necessário criar o (s) registro (s) DNS necessário (s) para permitir que ele seja acessado usando o nome de domínio completo .mta-sts.your-domain

A maneira como isso é feito depende do provedor de hospedagem DNS que você usa. No entanto, se você usar o DigitalOcean como seu provedor de DNS, simplesmente navegue até o seu projeto, seguido de seu domínio.

Por fim, adicione os registros DNS necessários para o mta-stssubdomínio. Se o seu Droplet usa apenas IPv4, crie um Aregistro para mta-sts, apontando para o seu endereço-servidor-ipv4 . Se você também usa o IPv6, crie um AAAAregistro apontando para o seu endereço-servidor-ipv6 .

Uma captura de tela do painel de controle DNS do DigitalOcean, mostrando um exemplo de registro DNS para mta-sts apontando para um endereço IPv4.

Nesta etapa, você criou e configurou um novo host virtual Apache para o subdomínio MTA-STS e adicionou os registros DNS necessários para permitir que ele seja acessado facilmente. Na próxima etapa, você adquirirá um certificado Let's Encrypt criptografado confiável para o seu subdomínio MTA-STS.

Etapa 3 - Adquirir um certificado Vamos criptografar para seu subdomínio MTA-STS

Nesta etapa, você adquirirá um certificado TLS da Let's Encrypt, para permitir que seu site seja veiculado corretamente por HTTPS.mta-sts.your-domain

Para fazer isso, você usará o certbotque você configurou como parte da etapa de pré-requisito Como proteger o Apache com o Let's Encrypt no Ubuntu 18.04 .

Primeiramente, execute certbotpara emitir um certificado para o seu mta-stssubdomínio usando o método de verificação do plugin Apache:

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

Isso emitirá automaticamente um certificado confiável e o instalará no servidor da web Apache. Quando o assistente do Certbot perguntar sobre a configuração de um redirecionamento HTTP -> HTTPS, selecione 'Não', pois isso não é necessário para o MTA-STS.

Para finalizar, teste seu novo host virtual para garantir que ele esteja funcionando corretamente. Use um navegador da Web para visitar ou use uma ferramenta de linha de comando como :https://mta-sts.your-domain/.well-known/mta-sts.txtcurl

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

Isso produzirá o arquivo de política MTA-STS que você criou na Etapa 1:

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

Se ocorrer um erro, verifique se a configuração do host virtual da Etapa 2 está correta e se você adicionou um registro DNS para o mta-stssubdomínio.

Nesta etapa, você emitiu um certificado Let's Encrypt TLS para o seu mta-stssubdomínio e testou se está funcionando. Em seguida, você definirá alguns registros DNS TXT para ativar completamente o MTA-STS e TLSRPT.

Etapa 4 - Configurando os registros DNS necessários para ativar o MTA-STS e TLSRPT

Nesta etapa, você configurará dois registros TXT DNS, que habilitarão totalmente a diretiva MTA-STS que você já criou e também habilitarão o TLS Reporting (TLSRPT).

Esses registros DNS podem ser configurados usando qualquer provedor de hospedagem DNS, mas neste exemplo, o DigitalOcean é usado como provedor.

Primeiro, faça logon no painel de controle do DigitalOcean e navegue até o seu projeto, seguido de um clique no seu domínio.

Você precisa adicionar os dois registros TXT a seguir:

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

id-valueé uma sequência usada para identificar a versão da sua política MTA-STS em vigor. Se você atualizar sua política, precisará também atualizar o idvalor para garantir que a nova versão seja detectada pelos provedores de email. Recomenda-se usar o carimbo de data atual como id, por exemplo 20190811231231(23:12:31 em 11 de agosto de 2019).

reporting-addressé o endereço para onde seus relatórios TLS serão enviados. Pode ser um endereço de email prefixado mailto:ou um URI da web, por exemplo, para uma API que coleta relatórios. O endereço do relatório não precisa ser um endereço your-domainVocê pode usar um domínio completamente diferente, se desejar.

Por exemplo, os dois registros de amostra a seguir são válidos:

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

Ajuste as variáveis ​​conforme necessário e defina esses registros DNS TXT no painel de controle do DigitalOcean (ou qualquer provedor DNS que você esteja usando):

Uma captura de tela do painel de controle do DigitalOcean, mostrando o registro TXT DNS _mta-sts sendo definido.

Uma captura de tela do painel de controle do DigitalOcean, mostrando o registro TXT DNS _smtp._tls que está sendo definido.

Depois que esses registros DNS forem definidos e propagados, o MTA-STS será ativado com a política que você criou na Etapa 1 e começará a receber relatórios TLSRPT no endereço que você especificou.

Nesta etapa, você configurou os registros DNS necessários para que o MTA-STS seja ativado. Em seguida, você receberá e interpretará seu primeiro relatório TLSRPT.

Etapa 5 - Interpretando seu primeiro relatório TLSRPT

Agora que você ativou o MTA-STS e o TLSRPT (TLS Reporting) para o seu domínio, começará a receber relatórios de provedores de email compatíveis. Esses relatórios mostrarão o número de e-mails que foram ou não foram entregues com êxito pelo TLS e os motivos dos erros.

Diferentes provedores de email enviam seus relatórios em momentos diferentes; por exemplo, o Google Mail envia seus relatórios diariamente por volta das 10:00 UTC.

Dependendo de como você configurou o registro DNS TLSRPT na Etapa 5, você receberá seus relatórios por email ou por uma API da web. Este tutorial se concentra no método de email, pois essa é a configuração mais comum.

Se você acabou de concluir o restante deste tutorial, aguarde até receber seu primeiro relatório e poderá continuar.

Seu relatório diário do TLSRPT por e-mail geralmente possui uma linha de assunto semelhante à seguinte:

Report Domain: your-domain Submitter: google.com Report-ID: <2019.08.10T00.00.00Z+your-domain@google.com>

Este email terá um anexo em .gzformato, que é um arquivo compactado Gzip, com um nome de arquivo semelhante ao seguinte:

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

Para o restante deste tutorial, este arquivo será referido como report.json.gz.

Salve esse arquivo na sua máquina local e extraia-o usando a ferramenta que você preferir.

Se você estiver usando um sistema Linux baseado no Debian, poderá executar o gzip -dcomando para descompactar o arquivo:

  • gzip -d report.json.gz

Isso resultará em um arquivo JSON chamado report.json.

Em seguida, você pode visualizar o relatório diretamente como a sequência JSON bruta ou usar seu pré-modificador JSON favorito para colocá-lo em um formato mais legível. Neste exemplo, jqserá usado, mas você também pode usar o Python, json.toolse desejar.

Nota: Se você não tiver o jq instalado, poderá instalá-lo usando apt install jqOu, para outros sistemas operacionais, use as instruções de instalação necessárias da jq.

  • jq . report.json

Isso produzirá algo semelhante ao seguinte:

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
            }
        }
    ]
}

O relatório mostra o provedor que gerou o relatório e o período do relatório, bem como a política MTA-STS que foi aplicada. No entanto, a seção principal em que você estará interessado é summary, especificamente, as contagens de sessões bem-sucedidas e com falha.

Este relatório de amostra mostra que 230 emails foram entregues com êxito por TLS do provedor de email que gerou o relatório e 0 entregas de email falharam ao estabelecer uma conexão TLS adequada.

Caso haja uma falha - por exemplo, se um certificado TLS expirar ou houver um invasor na rede - o modo de falha será documentado no relatório. Alguns exemplos de modos de falha são:

  • starttls-not-supported: Se o servidor de recebimento de email não suportar STARTTLS.
  • certificate-expired: Se um certificado expirou.
  • certificate-not-trusted: Se um certificado autoassinado ou outro certificado não confiável for usado.

Nesta etapa final, você recebeu e interpretou seu primeiro relatório TLSRPT.

Conclusão

Neste artigo, você definiu e configurou os relatórios MTA-STS e TLS para o seu domínio e interpretou o seu primeiro relatório TLSRPT.

Depois que o MTA-STS estiver habilitado e funcionando de forma estável por um tempo, é recomendável ajustar a política, aumentar o max_agevalor e, eventualmente, alternar para o enforcemodo quando tiver certeza de que todos os emails dos provedores suportados estão sendo entregues com êxito por TLS.

Esta resposta lhe foi útil?

Veja também

Como escrever e executar seu primeiro programa no Node.js
Introdução O Node.js é um ambiente de tempo de execução de código aberto popular que pode...
Como Instalar iftop
O Iftop é uma ferramenta de monitoramento de rede para Servidores Linux, através do Iftop você...
Como criar um aplicativo Ruby on Rails
Introdução O Rails é uma estrutura de aplicativos da Web escrita em Ruby . É necessária uma...
Como instalar o Node.js no Debian 10
Introdução O Node.js é uma plataforma JavaScript para programação de uso geral que permite aos...
Introdução ao Kubernetes: dicas do kubectl
Introdução O Kubectl é uma ferramenta de linha de comando projetada para gerenciar objetos e...