Aliases do Postfix e e-mails duplicados, como corrigir?


18

Tenho aliases configurados no postfix, como o seguinte:

all@mydomain.com:    foo@mydomain.com, bar@mydomain.com ...

Quando um email é enviado para all@mydomain.com e qualquer um dos destinatários desse alias é cc: ed, o que é bastante comum (por exemplo: "Responder a todos"), o email é entregue em duplicado. Por exemplo, se um email for enviado para all@mydomain.com e foo@mydomain.com for cc: ed, ele será entregue duas vezes. De acordo com as Perguntas frequentes do Postfix , isso ocorre por design, pois o Postfix envia email em paralelo sem expandir os grupos, o que o torna mais rápido que o sendmail. Agora está tudo bem e elegante, mas é possível configurar o Postfix para realmente remover destinatários duplicados antes de enviar o email?

Encontrei muitas postagens de pessoas em toda a rede com o mesmo problema, mas ainda não encontrei uma resposta. Se isso não for possível no Postfix, é possível fazê-lo em algum lugar do caminho? Eu tentei educar meus usuários, mas acho que é inútil ...

Estou executando o postfix no Mac OS X Server 10.6, amavis é definido como content_filter e dovecot é definido como mailbox_command. Eu tentei configurar o procmail como um content_filter para entrega smtp (conforme a sugestão abaixo), mas não consigo acertar. Por várias razões, não posso substituir a configuração padrão do OS X, o que significa que o postfix, o amavis e o dovecot permanecem. No entanto, posso acrescentar, se assim o desejar.


Eu acho que é realmente apenas não é possível ...
— Antoine Benkemoun

Estou realmente começando a acreditar que você está certo, Antoine.
— Marcus Stade

Bem, isso foi um desperdício de uma recompensa ...
— Marcus Stade

2
você já encontrou uma solução para isso? Estou tendo o mesmo problema.
— Tommy Arnold

Respostas:


4

O Postfix não tem idéia sobre e-mails duplicados devido à maneira como está estruturado. É possível fazer o que você está sugerindo usando o procmail como seu agente de entrega.

Essencialmente, cada mensagem proveniente de um cliente deve ser entregue com um ID da mensagem exclusivo. No caso de ser entregue a várias pessoas, o ID da mensagem deve ser o mesmo; portanto, salvamos os Message-Idcabeçalhos que vimos e descartamos e os futuros que correspondem a essa lista.

Em http://novosial.org/procmail/

:0 Wh: msgid.lock
| formail -D 8192 ~/.procmail/msgid.cache

Se eu entendi o problema corretamente, não é possível resolver no Postfix porque o Postfix envia os e-mails em paralelo, ou seja, envia para foo@mydomain.com ao mesmo tempo em que expande all@mydomain.com e depois novamente envia para foo@meudominio.com. A solução Procmail não introduziria uma condição de corrida em que outro email não relacionado (com um ID de mensagem diferente) seja enviado entre os dois emails em questão e substituindo o cache, fazendo com que os emails duplicados sejam entregue de qualquer maneira?
— Marcus Stade

Estou tentando fazer sua sugestão funcionar, mas não tenho muita certeza de como combinar isso com a entrega dovecot, que é usada pelo OS X 10.5+ por padrão.
— Marcus Stade

Se você estiver usando dovecot como um agente de entrega, você pode usar o procmail como um content_filterque lhe permitirá realizar a mesma tarefa em um nível global
— Philip Reynolds

Eu tenho que confessar que provavelmente estou passando por cima da minha cabeça aqui. Venho me encarando cegamente na página de parâmetros de configuração para postfix e pesquisa até meus dedos sangrarem, mas não consigo descobrir como configurar isso. Quaisquer recursos que você conheça ou cutuque na direção certa serão realmente apreciados!
— Marcus Stade

Acho que meio que entendo como funciona agora, mas já existe um content_filter definido como amavis. Parece ser algum tipo de antivírus. Eu li que é possível encadear content_filters, mas parece pouco intuitivo e a documentação é menos do que estelar. É realmente muito ridículo o quão difícil é eliminar apenas emails duplicados. Design desicions independentemente, isso me parece que deveria estar lá fora da caixa ou pelo menos não exigir esses hacks monstruosos.
— Marcus Stade

3

Existe uma maneira de fazer isso, mas não usando o próprio Postfix.

Se você estiver usando uma implementação razoavelmente recente do Dovecot with Pigeonhole do Sieve , há uma extensão especial que pode ser usada para desduplicação na entrega. No Dovecot anterior à 2.2.18, o nome dessa extensão é "vnd.dovecot.duplicate" e é desativado por padrão. Nas versões mais recentes, a extensão é chamada "duplicada" e já deve estar ativada, mas habilitar explicitamente não será prejuízo.

/etc/dovecot/conf.d/90-sieve.conf:

plugin {
  sieve = ~/.dovecot.sieve
  sieve_dir = ~/sieve

  sieve_before = /mnt/mail/users/global_sieve/deduplicate.sieve
  # sieve_before2 = /mnt/mail/users/global_sieve/antispam.sieve

  sieve_extensions = +vnd.dovecot.duplicate  # for dovecot < 2.2.18
  #sieve_extensions = +duplicate             # for dovecot >= 2.2.18
}

Em seguida, crie o script de peneira para lidar com a desduplicação (você pode ajustar o nome do arquivo como achar melhor).

/mnt/mail/users/global_sieve/deduplicate.sieve:

require "vnd.dovecot.duplicate"; # for dovecot < 2.2.18
# require "duplicate";           # for dovecot >= 2.2.18

if duplicate {
    discard;
    stop;
}

Compile o script usando sievec e verifique se o script é legível pelo usuário dovecot . Mais em documentos Dovecot.

Se você estiver usando o Cyrus, há um recurso de supressão de entrega de mensagens duplicadas que pode ser ativado usando suppress_duplicates = yes.


Muito obrigado por apontar esse mecanismo. Aquele sentimento de "encontrar uma agulha no palheiro".
— lkraav

Descobertas durante a implementação: a duplicateextensão funciona no nível do usuário. Eu estava tentando parar duplicatas em vários usuários para / Cc-d em uma fileintocaixa de correio central . Isso não funciona. Também era necessário definir uma entrada catchfix virtual_alias_mapsall postfix , como, por exemplo @domain.com catchall@domain.com, a verificação duplicada da peneira atingirá catchalla lista duplicada do usuário.
— lkraav

Sim, isso é muito semelhante a "encontrar uma agulha num palheiro" sentindo
— Runner Net


0

Isto é de algumas perguntas antigas do postfix:

O Postfix envia mensagens duplicadas Algumas pessoas reclamam que o Postfix envia mensagens duplicadas. Isso acontece sempre que uma mensagem é enviada para vários endereços que atingem o mesmo usuário. Exemplos de tais cenários são:

  • Uma mensagem é enviada ao usuário e a um alias que lista o usuário. O usuário recebe uma cópia do correio diretamente e uma cópia através do alias.

    • Uma mensagem é enviada para vários aliases que listam o usuário. O usuário recebe uma cópia do email por cada alias.

Algumas pessoas até argumentam que esse é o comportamento "certo". Provavelmente é mais uma questão de expectativa e do que estamos acostumados.

Isso pode ser "corrigido" apenas tornando o Postfix mais lento. Nos exemplos acima, o Postfix precisaria primeiro expandir completamente todas as listas de distribuição antes de iniciar qualquer entrega. Por padrão, o Postfix entrega correspondências para diferentes destinos em paralelo, e a entrega local não é uma exceção. É por isso que o Postfix pode ser mais rápido que o sendmail.

Então, por design, você está vendo esse comportamento. Talvez se você encontrar um filtro de conteúdo capaz de remover IDs de mensagem duplicados, poderá eliminá-lo após o evento de entrega.

O Sendmail não tem esse problema porque expande tudo primeiro e retira as duplicatas.


Sim, eu li isso, talvez eu devesse ter atualizado minha pergunta. Por design ou não, ainda é um problema. Entendo por que está se comportando dessa maneira e entendo que é inútil tentar encontrar uma solução no Postfix. No entanto, tentei encontrar uma solução de filtro de conteúdo usando o Procmail e não consigo entender direito. É muito provável que eu não esteja entendendo os filtros de conteúdo ou o procmail corretamente, ou ambos. Em ambos os casos, eu ainda gostaria de corrigir isso. Infelizmente, a configuração como está não pode ser modificada, apenas adicionada a. Infelizmente, não posso usar o sendmail em vez do postfix.
— Marcus Stade

Atualizei a pergunta com mais algumas informações, mas sinceramente, o link para o FAQ estava lá para começar. Agradeço qualquer sugestão útil embora!
— Marcus Stade

Não sabia que havia um link para o mesmo conteúdo. Trabalhando em segurança de TI, você fica paranóico ao clicar em links aleatórios. Você pode confirmar que as mensagens duplicadas têm os mesmos IDs de mensagem?
— jeffatrackaid

Faz um longo dia, então eu preciso revisar sua postagem original, mas e sobre isso: postfix.org/postconf.5.html#duplicate_filter_limit #
— jeffatrackaid

Posso confirmar que as mensagens duplicadas têm os mesmos IDs de mensagem. Definir o duplicate_filter_limit não ajuda em nada, infelizmente.
— Marcus Stade

0

A solução oficial está aqui. Http://osdir.com/ml/mail.postfix.devel/2007-05/msg00010.html

duplicate_filter_limit (10000) O número máximo de endereços lembrados pelo destinatário duplicam filtros para aliases (5) ou expansão virtual (5), ou para exibições de fila showq (8) (com lançamentos anteriores do Postfix, o limite padrão era 1000).

duplicate_filter_style (strict) A política de filtro de destinatários duplicados: estrita ou pragmática.


11
Isso não parece fazer nada ...
— grufftech

O postfix.1071664.n5.nabble.com/… afirma que isso nunca foi implementado
— Yanko Hernández Álvarez

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.