¿Cómo agregar un encabezado único para cualquier correo entrante con Postfix?

¿Cómo agregar un encabezado único para cualquier correo entrante con Postfix?

Tengo Postfix ejecutándose con varios procesos smtpd configurados en master.cf de esta manera:

# Internet facing one
1.2.3.4:25      inet  n       -       y       -       -       smtpd
  -o ...   # internet-only overrides

# Internal facing one
10.0.0.1:10026      inet  n       -       y       -       -       smtpd
  -o ...   # internal-only overrides

Ahora, me gustaría agregar un único encabezado, con nombre y valor estáticos, aentrantecorreo dependiendo del smtpd en el que se recibió.

Ejemplo:

X-Gert-Postfix-Received-From: the evil internet

Mis opciones consideradas:

  1. Añade elheader_checksopción y utilice la PREPENDacción en el archivo.

    Casi ahí, pero:

    • Requiere coincidir con un encabezado existente y luego agregará uno más en coincidencias posteriores.
    • No siempre tengo un determinado encabezado presente, tal vez incluso Fromfalte uno, por ejemplo.
    • En caso de que ya exista , creo que header_checksno hay una manera fácil de apilar dos archivos.header_check
  2. Cree una aplicación personalizada que utiliceprotocolo miltery conéctelo a Postfix con smtpd_milters.

    Por supuesto, esto funcionará. Puedo inspeccionar el correo en mi propia aplicación y luego inyectar el encabezado allí. Parece demasiada ingeniería para una tarea simple como agregar un encabezado. Además, requiere mantenimiento adicional con la necesidad de ejecutar otra aplicación demonio, bastante código repetitivo, etc.

  3. Como se sugiere en un comentario, use check_recipient_access(Q relacionado).

    Mismas desventajas que header_checks(ver 1).

Siento que me falta algo simple. Alguien tiene una mejor idea?

Respuesta1

En caso de que tenga header_checks existentes, creo que no hay una manera fácil de apilar dos archivos header_check.

En realidad, existe una manera de tener múltiples archivos header_checks independientes por demonio.

cada-oLa opción en su master.cf anula un valor predeterminado o cualquier parámetro de configuración de postfix en main.cf. Para tener un header_checks diferente por demonio (digamos/etc/postfix/header_checks1y/etc/postfix/header_checks2), tienes que anular cada unocomprobaciones de encabezadoparámetro:

# Internet facing one
1.2.3.4:25      inet  n       -       y       -       -       smtpd
-o header_checks = regexp:/etc/postfix/header_checks1

# Internal facing one
10.0.0.1:10026      inet  n       -       y       -       -       smtpd
-o header_checks = regexp:/etc/postfix/header_checks2

De esta manera tendrás total independenciacomprobaciones de encabezadoarchivos por demonio smtpd. Desde allí puede agregar reglas que antepongan la etiqueta de la que estaba hablando.

Respuesta2

Para solucionar las limitaciones de smtpd_*_restrictions:

Un mensaje, incluso uno con un remitente "nulo", tiene exactamente un remitente de sobre. Así que úsalo check_sender_accessen lugar de check_recipient_access. El tipo de búsqueda utilizado puede static:deberse a que no nos importan los detalles de la ruta de retorno. Agréguelo a su lista de smtpd_sender_restrictions antes de que cualquier verificación genere ACCEPTresultados (postfix no consultará búsquedas adicionales más allá).

# in main.cf
common_sender_restrictions =
  reject_non_fqdn_sender
  reject_unknown_sender_domain
  ..
internet_sender_restrictions =
  $common_sender_restrictions
  check_sender_access static:{PREPEND X-Gert-Postfix-Received-From: the evil internet}

# in master.cf
192.0.2.0:25        inet  n       -       y       -       -       smtpd
 -o smtpd_sender_restrictions=$internet_sender_restrictions
10.0.0.1:10026      inet  n       -       y       -       -       smtpd
 -o smtpd_sender_restrictions=$common_sender_restrictions

información relacionada