Entrega de mensagem duplicada para Always_BCC com Dovecot e Simple Content Filter (Postfix)

Entrega de mensagem duplicada para Always_BCC com Dovecot e Simple Content Filter (Postfix)

Estou tentando configurar um servidor de email postfix de tráfego muito baixo usando:

  • Um filtro de conteúdo simples (http://www.postfix.org/FILTER_README.html#simple_filter). É bem mais simples que o avançado e o tráfego é baixo.
  • pombal como agente de entrega. (Por causa das cotas do maildir e dos filtros de peneira)
  • always_bccpara manter cópias de todos os e-mails enviados. (Regras de negócios)

Minhas configurações relevantes são:

mestre.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 (apenas 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 os meus usuários têm e-mails em "(Inicial)[e-mail protegido]"formato
  • Existem grupos de segurança que atuam como funções e cada um possui emails em "[e-mail protegido]"formato.
  • Basicamente, um e-mail de função funciona como um alias para vários usuários.

Assim, posso reutilizar as mesmas funções/grupos que uso para definir permissões, e não usar os usuários diretamente.

Por exemplo

  • meu e-mail de usuário é[e-mail protegido]
  • Sou membro da função ITDepartment ([e-mail protegido])
  • Sou membro de algumas outras funções, mas minha função principal é "Departamento de TI"
  • Por ser membro deste grupo/função, tenho certos privilégios, pois os outros membros e todos os e-mails enviados para[e-mail protegido]chegará a mim e aos outros membros.

Até agora, tudo bem... Mas meu chefe quer que todos os e-mails que eu envio usem o[e-mail protegido]endereço (função) em vez de[e-mail protegido](do utilizador). ou seja, que cada e-mail enviado use o e-mail da função principal, não o e-mail do usuário.

/var/spool/filter/scripts/mailfilteré um filtro interno que apenas faz isso (altera os endereços "de" de "(Inicial).sobrenome@" para "role@" verificando um servidor LDAP).

Ele nunca falha (em caso de qualquer condição de erro, ele apenas copia a entrada padrão na saída padrão e nenhuma modificação é feita, portanto, nenhuma alteração de endereço, mas o e-mail não é perdido).

O problema é que quando envio um e-mail ele entrega duas cópias para[e-mail protegido]conforme visto nos logs, nem uma cópia conforme o esperado.


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 é o uid do usuário "filtro". "De" só é alterado nos cabeçalhos, dentro do email, por isso não aparece nos logs.

Tudo está funcionando como deveria, exceto esse detalhe de entrega dupla. Não tentei, mas tenho certeza que se eu retirar o pombal da equação, tudo funcionará. Mas perco as regras da peneira e as cotas do maildir. Então...

Alguma ideia de como posso consertar isso?

Responder1

dr: O e-mail original chega ao Postfix que adiciona Always_BCC e envia a cópia, descarta o e-mail conforme filtro. Seu filtro envia uma nova mensagem para o Postfix que adiciona Always_BCC e envia a cópia, depois entrega o email.

Leia os três últimos parágrafos.


O primeiro e-mail que chegar ao Postfix será o originalDD925380C87, então ele envia uma cópia diretamente para seccopiesconformesempre_co_coregra. O segundoAAFEF380C8Dé aquele traduzido pelo filtro (mudando o cabeçalho From para o seu grupo) e é enviado para seccopiestambém, mas duas vezes, porque o primeiro e-mail já tinha o BCC de seccopies, e agora o Postfix acha que precisa enviar para ele para o BCC e seccopiesassim ele consegue de novo.

Então você deveria receber três cópias para seccopies, mas2e [3] são identificados como o mesmo e-mail (AAFEF380C8D):

  1. o primeiro de y.hernandezaté y.hernandez>> sempre_bccseccopies
  2. o segundo de informaticspara para y.hernandez>> sempre_bccseccopies
  3. o terceiro de informaticspara seccopies >> sempre_bcc seccopies(como um BCC de2)

A cópia única do original é entregue 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)

A linha com uid=110é onde2é criado, e as duas entregas, uma porque é TO y.hernandeze outra porque é BCCd to, seccopiesestão nestas linhas:

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)

E finalmente, o email modificado é entregue ao destinatário pretendido:

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)

A desduplicação impediria os doisAAFEF380C8De-mails sejam entregues para seccopies, mas não acho que isso impediria oDD925380C87email, porque esse é um email separado.

Eu acho que você precisa seguiresseinstrução, para queo filtro de conteúdo vê os endereços de e-mail originais em vez do resultado de ... Cco automático, ele reinjetará o e-mail no Postfix, que aplicará o Always_BCC:

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

Dereceber_override_options: quando a configuração "BEFORE content filter" recebe_override_options é especificada no arquivo main.cf, especifique a configuração "AFTER content filter" recebe_override_options em master.cf (e vice-versa).

informação relacionada