MTA-STS para Postfix

O MTA-STS é o padrão RFC8461 proposto que saiu do status de rascunho e foi publicado oficialmente em 26 de setembro de 2018. Esse padrão oferece um mecanismo para detectar a possibilidade de usar TLS completo entre servidores de correio, com criptografia de dados e autenticação de servidor. Ou seja, esse padrão protege quase completamente contra interferências no tráfego de mensagens entre servidores.

Simplificado, a essência do padrão é a seguinte:

  1. Os serviços de email de suporte publicam uma política (1 registro TXT e 1 recurso HTTPS para cada domínio).
  2. Os serviços de email ao enviar emails para outros domínios detectam a diretiva de domínio do destinatário.
  3. Os serviços de email se conectam ao servidor de email do domínio do destinatário, aplicando restrições TLS definidas pela política detectada, se houver.

Existem bons artigos ( por exemplo ) que falam sobre o próprio padrão e por que ele é necessário, comparando o MTA-STS com outras iniciativas semelhantes e até mostrando como escrever e publicar uma política. Mas descobrir como ir além do primeiro passo não era tão simples.

Começar de novo


Antes de implementar o MTA-STS, você precisa arrumar os certificados do servidor de email. Caso contrário, os servidores de email que levarem em conta sua política de STS rejeitarão a conexão com seu servidor. As seguintes condições devem ser atendidas:

  • O certificado do servidor é emitido por uma autoridade de certificação reconhecida (Vamos Criptografar é bom).
  • A cadeia de certificados enviada pelo servidor inclui todos os certificados necessários das autoridades de certificação intermediárias.
  • O certificado possui um campo Nome alternativo do assunto com o nome DNS do seu servidor MX.

Você pode verificar o servidor configurado com o certificado com o seguinte comando:

[ "$(LANG=C openssl s_client -connect MX.EXAMPLE.COM:25 -starttls smtp -verify_hostname MX.EXAMPLE.COM < /dev/null 2>&1 | fgrep 'error')" = "" ] && echo OK || echo FAIL 

onde MX.EXAMPLE.COM é o nome de domínio do seu servidor MX. Para total conformidade com o padrão, é aconselhável verificar se o nome de domínio desejado está presente não apenas no Nome Comum do certificado, mas pelo menos no Nome Alternativo do Assunto.

Postagem de política


Para designar seu domínio como compatível com uma conexão segura, é necessário publicar a política do MTA-STS. Para fazer isso, execute as seguintes etapas simples na ordem especificada (exemplos são fornecidos para o domínio example.com).

1. Coloque em

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

arquivo de texto do formulário:

 versão: STSv1
 mode: reforçar
 mx: mail.example.com
 mx: * .example.net
 mx: backupmx.example.com
 max_age: 604800

O arquivo deve ser fornecido com o Tipo de conteúdo: texto / sem formatação. Redirecionamentos não são permitidos. Os feeds de linha devem ser LF ou CRLF. Linhas vazias não são permitidas. A última linha pode terminar com um avanço de linha ou pode não terminar com ele - as duas opções são permitidas. Não é permitido espaço vazio antes dos dois pontos e no início da linha. O espaço vazio após os dois pontos é permitido em qualquer quantidade. Os espaços em branco (espaços, tabulações etc.) no final de cada linha são ignorados.

Valores do campo:

versão : versão em formato. Deve sempre ser igual a "STSv1".
mode : modo de política. Opções possíveis: nenhuma, teste, imposição. O modo de imposição corresponde ao funcionamento normal do padrão - para exigir o certificado correto e uma conexão TLS estável ao se conectar ao servidor. O modo de teste exige que você tente usar uma conexão segura, mas, em caso de erro, envie um email com notificação do administrador por meio do mecanismo TLSRPT. Nenhum modo corresponde à situação como se a política não tivesse sido publicada. Este modo é útil para desabilitar corretamente uma política.
mx : um ou mais campos contendo os nomes de todos os servidores de domínio MX permitidos. Como você pode ver no exemplo, os modelos são permitidos, mas apenas como um domínio de nível inferior.
max_age : o tempo em segundos em que a política pode ser armazenada em cache e durante o qual os remetentes podem continuar a usá-la se a política não estiver mais disponível. Devido a esse recurso do padrão, desabilitar o STS é mais rápido, publicando uma nova política com o modo nenhum.

2. Crie um registro TXT _mta-sts.example.com com o conteúdo do formulário:

  v = STSv1;  id = 20160831085700Z; 

O espaço em branco ao redor de um ponto-e-vírgula pode ser arbitrariamente organizado em qualquer quantidade. Em outros lugares, espaço em branco não é permitido. O último ponto e vírgula pode estar presente ou ausente.

Valores do campo:

v : versão em formato. Sempre deve ser o primeiro campo, sempre deve ser igual a STSv1.
id : identificador exclusivo da política publicada. Pode ser uma sequência com um comprimento de 1 a 32 caracteres, consistindo em letras de registros e números. Alterar o valor do ID é um sinal para os remetentes de que a política foi atualizada. Portanto, é necessário atualizar a política publicando primeiro um novo arquivo de políticas e alterando a identificação no registro TXT.

A partir de agora, os servidores de email que suportam o MTA-STS enviarão apenas emails para o seu domínio por meio de uma conexão segura autenticada por certificado. É aí que a maioria dos manuais termina, mas a parte mais interessante a seguir é obter a política do MTA-STS em seu próprio servidor ao enviar e-mails.

Mais interessante


A principal dificuldade é que esse padrão não é suportado por servidores de correio, incluindo o Postfix. No entanto, essa ninharia desagradável não deve nos impedir.

Encontrar uma solução me levou ao arquivo da lista de discussão postfix-users, discutindo o momento desse padrão. Em uma postagem, Witsa Venema, autor do Postfix, aponta a direção preferida para implementar essa funcionalidade - usar um servidor externo para procurar políticas TLS. Propõe-se usar a diretiva de configuração do formulário:

  smtp_policy_maps = socketmap: inet: host: porta: nome 

Eu implementei esse servidor para obter a diretiva MTA-STS.

Código Fonte
Pacote no PyPI

O aplicativo não possui algumas das funções prescritas pelo RFC8461, como: recuperação proativa de políticas, relatórios e limitação da frequência de solicitações de políticas. No entanto, a principal função - detectar a política TLS e armazená-la em cache - é executada.

O aplicativo requer Python 3.5.3+. A instalação e configuração deste daemon podem ser feitas usando as seguintes etapas.

Instalação do pacote


Basta executar o comando:

 pip3 install postfix-mta-sts-resolver 

Métodos de instalação alternativos são escritos aqui .

Criando um arquivo de configuração


Se você estiver satisfeito com as configurações padrão, o comando será suficiente

 touch /etc/postfix/mta-sts-daemon.yml 

Caso contrário, a configuração pode ser retirada do exemplo e adaptada às suas necessidades.

O parâmetro mais importante, na minha opinião, é o parâmetro strict_testing. Se estiver definido como true (false por padrão), o aplicativo retornará uma política segura, mesmo para domínios com uma política no modo de teste. Esse comportamento é contrário ao padrão, mas é aconselhável por motivos práticos: se o proprietário do domínio publicou a política do STS mesmo no modo de teste, ele provavelmente está pronto para isso. Ou seja, hoje o e-mail do gmail.com será enviado por uma conexão confiável.

Organização de inicialização


No caso de systemd, basta colocar um arquivo de unidade simples em /etc/systemd/system/mta-sts-daemon.service

Depois disso, resta reler a configuração do systemd, ativar a execução automática do daemon e iniciá-la:

 systemctl daemon-reload systemctl enable mta-sts-daemon.service systemctl start mta-sts-daemon.service 

Verificação de integridade


Supondo que a porta padrão seja usada, o comando

 /usr/sbin/postmap -q dismail.de socketmap:inet:127.0.0.1:8461:postfix 

deve trazer

  correspondência segura = mx1.dismail.de 

Conectar ao Postfix


Adicione uma linha ao main.cf:

 smtp_policy_maps = socketmap:inet:127.0.0.1:8461:postfix 

Reinicie o Postfix:

 systemctl reload postfix.service 

Se tudo for feito corretamente, em seguida, para conexões STS no log /var/log/mail.info

  Conexão TLS confiável estabelecida 

registros começam a aparecer

  Conexão TLS verificada estabelecida 


Conclusão


Se você chegar a esse lugar, provavelmente significa:

  • Você lê o artigo sem uma única imagem.
  • Dia após dia, a probabilidade de interceptação de email em seu domínio diminuirá, à medida que outros serviços de email implementarem o novo padrão.

Source: https://habr.com/ru/post/pt424961/


All Articles