Capítulo 18 Transporte de e-mail & defesa Admin: #pMtaFilters

Milters (protocolo milter do Sendmail) e hooks de MTA (HTTP por etapa SMTP)

Filtros existentes se conectam diretamente ao diálogo SMTP: milters falam o protocolo milter do Sendmail versão 6 (Rspamd via seu milter proxy, ClamAV-milter, OpenDKIM, produtos de DLP); MTA hooks são serviços HTTP simples que recebem um documento JSON por fase (CONNECT, EHLO, MAIL FROM, RCPT TO, DATA) e retornam uma decisão. Ambos atuam no e-mail de entrada (porta 25) e, opcionalmente, na submissão (465/587). Configure-os em Milters & MTA hooks (#pMtaFilters), cada entrada com um botão de teste.

Dica operacional & nota de arquitetura

Escolha a ação padrão de forma consciente: "accept" (fail open) mantém o fluxo de e-mails quando um filtro está fora do ar, "tempfail" (como milter_default_action = tempfail no Postfix) faz os remetentes tentarem novamente mais tarde até o filtro voltar. Para scanners de vírus, tempfail é mais seguro; para serviços de pontuação, accept. A quarentena coloca e-mails de entrada na pasta Spam; no envio (submission), a mensagem é rejeitada com 550.

Resposta de MTA hook (compatível com Stalwart)

Requisição: context (stage, client, sasl, tls, server, queue, protocol), envelope (from, to) e, no DATA, message (headers, contents, size). Assinatura no cabeçalho X-Nextxch-Signature: sha256=HMAC sobre o corpo.

Referência / configuração
POST https://dlp.internal/hook   (X-Nextxch-Hook-Stage: data)

{
  "action": "accept",
  "modifications": [
    { "type": "addHeader", "name": "X-DLP-Status", "value": "clean" },
    { "type": "changeHeader", "index": 1, "name": "Subject", "value": "[external] Offer" },
    { "type": "deleteHeader", "index": 1, "name": "X-Internal-Route" }
  ]
}

{ "action": "reject", "response": { "status": 550, "enhancedStatus": "5.7.1", "message": "Confidential data detected" } }
{ "action": "tempfail", "response": { "status": 451, "message": "Please try again later" } }
{ "action": "quarantine" }      { "action": "discard" }

Configurações, valores padrão e boas práticas

Configuração / local Descrição Valor padrão Boa prática para produção
Milter-Adresse Socket TCP ou Unix do milter: inet:host:port, inet:port@host (notação Sendmail), host:port ou unix:/path. - Rspamd: inet:127.0.0.1:11332 (proxy worker com milter = yes). ClamAV-milter: unix:/run/clamav/clamav-milter.ctl ou inet:127.0.0.1:7357.
Phasen und Aktionen (Milter) Negociação de opções v6, macros (j, {client_addr}, i, {auth_authen}, {mail_addr}, {rcpt_addr}), connect, helo, mail, rcpt, data, header, eoh, body, eom. Respostas: accept, continue, reject, tempfail, discard, código de resposta, quarantine. Modificações: adicionar, inserir e alterar cabeçalhos, substituir o corpo, adicionar/remover destinatários, alterar o remetente. alle angeboten Fases que o milter desativa (SMFIP_NO*) não são enviadas; fases sem resposta (SMFIP_NR_*) não são aguardadas.
Zeitlimits Conexão, por comando e para conteúdo/fim da mensagem, definidos separadamente; respostas de progresso estendem o timeout de conteúdo. 5 s / 10 s / 60 s Aumente o timeout de conteúdo para 120 a 300 s para scanners de vírus com anexos grandes.
MTA-Hook Phasen und Sicherheit Por hook: connect, ehlo, mail, rcpt, data. Cabeçalho de autenticação opcional (por exemplo, Authorization: Bearer ...) e assinatura HMAC-SHA256; ambos são armazenados criptografados e nunca exibidos. data Ative somente os estágios necessários: cada chamada acrescenta o tempo de resposta do hook ao diálogo SMTP. O hook deve responder em menos de um segundo.
Reihenfolge Milters e hooks são executados conforme o campo order; a primeira rejeição encerra a cadeia. No DATA, cada filtro vê a mensagem com as alterações dos anteriores. Milter 100, Hooks 200 Coloque verificações rápidas e baratas (por exemplo, reputação) antes das caras (verificação de vírus).