Entrega de mensajes duplicados a always_bcc con dovecot y filtro de contenido simple (Postfix)

Entrega de mensajes duplicados a always_bcc con dovecot y filtro de contenido simple (Postfix)

Estoy intentando configurar un servidor de correo postfix de muy bajo tráfico usando:

  • Un filtro de contenido simple (http://www.postfix.org/FILTER_README.html#simple_filter). Es mucho más sencillo que el avanzado y el tráfico es bajo.
  • palomar como agente de entrega. (Debido a las cuotas de maildir y los filtros de tamiz)
  • always_bccconservar copias de cada correo enviado. (Reglas comerciales)

Mis configuraciones relevantes son:

maestro.cf

smtp      inet  n       -       y       -       -       smtpd
        -o content_filter=filter:dummy
pickup    unix  n       -       y       60      1       pickup
cleanup   unix  n       -       y       -       0       cleanup
qmgr      unix  n       -       n       300     1       qmgr
tlsmgr    unix  -       -       y       1000?   1       tlsmgr
rewrite   unix  -       -       y       -       -       trivial-rewrite
bounce    unix  -       -       y       -       0       bounce
defer     unix  -       -       y       -       0       bounce
trace     unix  -       -       y       -       0       bounce
verify    unix  -       -       y       -       1       verify
flush     unix  n       -       y       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
proxywrite unix -       -       n       -       1       proxymap
smtp      unix  -       -       y       -       -       smtp
relay     unix  -       -       y       -       -       smtp
        -o syslog_name=postfix/$service_name
showq     unix  n       -       y       -       -       showq
error     unix  -       -       y       -       -       error
retry     unix  -       -       y       -       -       error
discard   unix  -       -       y       -       -       discard
local     unix  -       n       n       -       -       local
virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       y       -       -       lmtp
anvil     unix  -       -       y       -       1       anvil
scache    unix  -       -       y       -       1       scache
postlog   unix-dgram n  -       n       -       1       postlogd
uucp      unix  -       n       n       -       -       pipe
  flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
filter    unix  -       n       n       -       10      pipe
  flags=Rq user=filter null_sender=
  argv=/var/spool/filter/scripts/filter.sh -f ${sender} -- ${recipient}
dovecot    unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail:mail argv=/usr/lib/dovecot/dovecot-lda -f ${sender} -d ${recipient}

main.cf (solo partes relevantes)

always_bcc = [email protected]
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1

/var/spool/filter/scripts/filter.sh

#!/bin/sh

/usr/bin/cat | /var/spool/filter/scripts/mailfilter | /usr/sbin/sendmail -G -i "$@"

exit $?

  • Todos mis usuarios tienen correos electrónicos en "(Inicial)[correo electrónico protegido]" formato
  • Hay grupos de seguridad que actúan como roles y cada uno tiene correos electrónicos en "[correo electrónico protegido]" formato.
  • Básicamente, un correo electrónico de rol funciona como alias para varios usuarios.

Por lo tanto, puedo reutilizar los mismos roles/grupos que uso para establecer permisos y no utilizar a los usuarios directamente.

Por ejemplo

Hasta ahora todo bien... Pero mi jefe quiere que cada correo que envíe utilice el[correo electrónico protegido](rol) dirección en lugar de[correo electrónico protegido](usuario). es decir, que cada correo enviado utilice el correo electrónico de rol principal, no el correo electrónico del usuario.

/var/spool/filter/scripts/mailfilteres un filtro hecho internamente que simplemente hace eso (cambia las direcciones "de" de "(Inicial).apellido@" a "rol@" verificando un servidor LDAP).

Nunca falla (en caso de cualquier condición de error, simplemente copia la entrada estándar en la salida estándar y no se realiza ninguna modificación, por lo que no se cambia la dirección, pero el correo no se pierde).

El problema es que cuando envío un correo electrónico, entrega dos copias a[correo electrónico protegido]Como se ve en los registros, ni una copia como se esperaba.


Dec 16 16:23:08 correo2 postfix/smtpd[32453]: connect from informatica1.mydomain.example[10.128.159.15]
Dec 16 16:23:08 correo2 postfix/smtpd[32453]: DD925380C87: client=informatica1.mydomain.example[10.128.159.15], sasl_method=LOGIN, [email protected]
Dec 16 16:23:08 correo2 postfix/cleanup[32456]: DD925380C87: message-id=<[email protected]>
Dec 16 16:23:09 correo2 postfix/qmgr[32275]: DD925380C87: from=<[email protected]>, size=2749, nrcpt=2 (queue active)
Dec 16 16:23:09 correo2 postfix/pickup[32274]: AAFEF380C8D: uid=110 from=<[email protected]>
Dec 16 16:23:09 correo2 postfix/pipe[32457]: DD925380C87: to=<[email protected]>, relay=filter, delay=0.81, delays=0.11/0/0/0.7, dsn=2.0.0, status=sent (delivered via filter service)
Dec 16 16:23:09 correo2 postfix/pipe[32457]: DD925380C87: to=<[email protected]>, orig_to=<[email protected]>, relay=filter, delay=0.81, delays=0.11/0/0/0.7, dsn=2.0.0, status=sent (delivered via filter service)
Dec 16 16:23:09 correo2 postfix/qmgr[32275]: DD925380C87: removed
Dec 16 16:23:09 correo2 postfix/cleanup[32456]: AAFEF380C8D: message-id=<[email protected]>
Dec 16 16:23:09 correo2 postfix/qmgr[32275]: AAFEF380C8D: from=<[email protected]>, size=2927, nrcpt=3 (queue active)
Dec 16 16:23:10 correo2 dovecot: lda([email protected])<32488><2DSfML3hnGPofgAA0V72BQ>: msgid=<[email protected]>: saved mail to INBOX
Dec 16 16:23:10 correo2 postfix/pipe[32473]: AAFEF380C8D: to=<[email protected]>, relay=dovecot, delay=1.1, delays=0.79/0/0/0.28, dsn=2.0.0, status=sent (delivered via dovecot service)
Dec 16 16:23:10 correo2 dovecot: lda([email protected])<32490><Au2fML3hnGPqfgAA0V72BQ>: msgid=<[email protected]>: saved mail to INBOX
Dec 16 16:23:10 correo2 postfix/pipe[32471]: AAFEF380C8D: to=<[email protected]>, relay=dovecot, delay=1.1, delays=0.79/0/0/0.34, dsn=2.0.0, status=sent (delivered via dovecot service)
Dec 16 16:23:10 correo2 dovecot: lda([email protected])<32489><BE2gML3hnGPpfgAA0V72BQ>: msgid=<[email protected]>: saved mail to INBOX
Dec 16 16:23:10 correo2 postfix/pipe[32470]: AAFEF380C8D: to=<[email protected]>, relay=dovecot, delay=1.1, delays=0.79/0/0/0.35, dsn=2.0.0, status=sent (delivered via dovecot service)
Dec 16 16:23:10 correo2 postfix/qmgr[32275]: AAFEF380C8D: removed
Dec 16 16:23:11 correo2 postfix/smtpd[32453]: disconnect from informatica1.mydomain.example[10.128.159.15] ehlo=1 auth=1 mail=1 rcpt=1 data=1 quit=1 commands=6

uid=110 es el uid de usuario "filtrado". "De" solo se cambia en los encabezados, dentro del correo electrónico, por lo que no aparece en los registros.

Todo funciona como debería excepto este detalle de doble entrega. No lo he intentado, pero estoy seguro de que si elimino dovecot de la ecuación, todo funciona. Pero pierdo las reglas del tamiz y las cuotas de maildir. Entonces...

¿Alguna idea de cómo puedo solucionarlo?

Respuesta1

Tl;dr: El correo electrónico original llega a Postfix, que agrega siempre_bcc y envía la copia, descarta el correo electrónico según el filtro. Su filtro envía un nuevo mensaje a Postfix que agrega siempre_bcc y envía la copia, luego entrega el correo electrónico.

Lea los últimos tres párrafos.


El primer correo electrónico que llegue a Postfix será el original.DD925380C87, por lo que envía una copia de eso directamente a seccopiessegúnsiempre_bccregla. El segundoAAFEF380C8Des el que traduce el filtro (cambiando el encabezado De a su grupo) y seccopiestambién se envía a, pero dos veces, porque el primer correo electrónico ya tenía el BCC de seccopies, y ahora Postfix cree que necesita enviarlo al BCC y seccopiesasí lo vuelve a conseguir.

Entonces deberías recibir tres copias seccopies, pero2y [3] se identifican como el mismo correo electrónico (AAFEF380C8D):

  1. el primero de y.hernandeza y.hernandez>> siempre_bccseccopies
  2. el segundo de informaticsa a y.hernandez>> siempre_bccseccopies
  3. el tercero desde informaticshasta seccopies >> siempre_bcc seccopies(como BCC de2)

La copia única del original se entrega a seccopies:

**DD925380C87**: to=<[email protected]>, relay=filter, delay=0.81, delays=0.11/0/0/0.7, dsn=2.0.0, status=sent (delivered via filter service)

La línea con uid=110es donde2se crea, y las dos entregas, una porque es TO y.hernandezy otra porque es BCCd to seccopiesestán en estas líneas:

AAFEF380C8D: to=<[email protected]>, relay=dovecot, delay=1.1, delays=0.79/0/0/0.34, dsn=2.0.0, status=sent (delivered via dovecot service)
AAFEF380C8D: to=<[email protected]>, relay=dovecot, delay=1.1, delays=0.79/0/0/0.28, dsn=2.0.0, status=sent (delivered via dovecot service)

Y finalmente, el correo electrónico modificado se entrega al destinatario previsto:

AAFEF380C8D: to=<[email protected]>, relay=dovecot, delay=1.1, delays=0.79/0/0/0.35, dsn=2.0.0, status=sent (delivered via dovecot service)

La deduplicación evitaría que ambosAAFEF380C8Dcorreos electrónicos se entreguen a seccopies, pero no creo que eso detenga elDD925380C87correo electrónico, porque es un correo electrónico separado.

creo que necesitas seguiresteinstrucción, para queel filtro de contenido ve las direcciones de correo originales en lugar del resultado de... CCO automático, luego reinyectará el correo electrónico en Postfix, que luego aplicará siempre_bcc:

/etc/postfix/main.cf:
content_filter = scan:localhost:10025
receive_override_options = no_address_mappings

Desde elrecibir_opciones_de_anulación: cuando se especifica la configuración de recepción_override_options "ANTES del filtro de contenido" en el archivo main.cf, especifique la configuración de recepción_override_options "DESPUÉS del filtro de contenido" en master.cf (y viceversa).

información relacionada