Capítulo 18 Transporte y defensa del correo Admin: #pMtaFilters

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

Los filtros existentes se conectan directamente al diálogo SMTP: los milters hablan el protocolo milter de Sendmail versión 6 (Rspamd a través de su proxy milter, ClamAV-milter, OpenDKIM, productos DLP); los hooks MTA son servicios HTTP sencillos que reciben un documento JSON por fase (CONNECT, EHLO, MAIL FROM, RCPT TO, DATA) y devuelven una decisión. Ambos se ejecutan para el correo entrante (puerto 25) y, opcionalmente, para el envío (465/587). Configúrelos en Milters & MTA hooks (#pMtaFilters), cada entrada con un botón de prueba.

Consejo operativo y nota de arquitectura

Elija la acción predeterminada de forma deliberada: "accept" (fail open) mantiene el flujo de correo cuando un filtro no está disponible, "tempfail" (como Postfix milter_default_action = tempfail) hace que los remitentes reintenten más tarde hasta que el filtro vuelva a estar disponible. Para escáneres de virus, tempfail es más seguro; para servicios de puntuación, accept. La cuarentena coloca el correo entrante en la carpeta Spam; en el envío (submission), el mensaje se rechaza con 550.

Respuesta del hook MTA (compatible con Stalwart)

Solicitud: context (stage, client, sasl, tls, server, queue, protocol), envelope (from, to) y, en DATA, message (headers, contents, size). Firma en la cabecera X-Nextxch-Signature: sha256=HMAC sobre el cuerpo.

Referencia / configuración
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" }

Configuración, valores predeterminados y buenas prácticas

Ajuste / ubicación Descripción Valor predeterminado Buena práctica de producción
Milter-Adresse Socket TCP o Unix del milter: inet:host:port, inet:port@host (notación de Sendmail), host:port o unix:/path. - Rspamd: inet:127.0.0.1:11332 (worker proxy con milter = yes). ClamAV-milter: unix:/run/clamav/clamav-milter.ctl o inet:127.0.0.1:7357.
Phasen und Aktionen (Milter) Negociación de opciones v6, macros (j, {client_addr}, i, {auth_authen}, {mail_addr}, {rcpt_addr}), connect, helo, mail, rcpt, data, header, eoh, body, eom. Respuestas: accept, continue, reject, tempfail, discard, reply code, quarantine. Modificaciones: añadir, insertar y cambiar cabeceras, sustituir el cuerpo, añadir/eliminar destinatarios, cambiar el remitente. alle angeboten Las fases que el milter desactiva (SMFIP_NO*) no se envían; en las fases sin respuesta (SMFIP_NR_*) no se espera respuesta.
Zeitlimits Conexión, por comando y para contenido/fin del mensaje, configurables por separado; las respuestas de progreso amplían el tiempo de espera de contenido. 5 s / 10 s / 60 s Aumente el tiempo de espera de contenido a entre 120 y 300 s para escáneres de virus con archivos adjuntos grandes.
MTA-Hook Phasen und Sicherheit Por hook: connect, ehlo, mail, rcpt, data. Encabezado de autenticación opcional (p. ej., Authorization: Bearer ...) y firma HMAC-SHA256; ambos se almacenan cifrados y nunca se muestran. data Active solo las fases que necesite: cada llamada añade el tiempo de respuesta del hook al diálogo SMTP. El hook debería responder en menos de un segundo.
Reihenfolge Los milters y hooks se ejecutan según su campo order; el primer rechazo termina la cadena. En DATA, cada filtro ve el mensaje con los cambios de los anteriores. Milter 100, Hooks 200 Coloque las comprobaciones rápidas y baratas (p. ej., reputación) antes de las costosas (análisis antivirus).