Dois servidores Exim e redirecionamentos

Dois servidores Exim e redirecionamentos

é uma coisa um pouco confusa que tento resolver, então preciso pedir ajuda.

Nossos usuários estão divididos entre dois grandes prédios, distantes um do outro, por isso montamos dois servidores de correio independentes para que cada servidor sirva a correspondência de seu prédio. O principal objectivo é que, em caso de perda de conectividade, os utilizadores possam enviar mensagens aos seus colegas dentro do seu próprio edifício, mesmo que o correio externo esteja temporariamente indisponível. Cada edifício usa seu próprio domínio de correio. A configuração é trivial e funciona bem.

Para fins de combate ao spam e também para fins administrativos temos a mesma tabela de usuários (inteira) em cada servidor, mas temos cada caixa marcada como "B1" ou "B2" para indicar em qual prédio determinado usuário está localizado. Costumávamos armazenar tabelas de caixas de correio e redirecionamentos em tabelas SQL, então não há problema em distingui-los adicionando a condição "WHERE which_server='B1'" às linhas de configuração do exim.

O que foi inesperado é a duplicação de correio quando se trata de redirecionamentos/aliases. Aqui está o exemplo:

Digamos que o usuáriousuário1emedifício 1usa caixa de correio[e-mail protegido], enquanto usuáriousuário2emedifício 2usa caixa de correio[e-mail protegido]. Não há problema até agora, eles podem enviar mensagens entre si e usuários externos também podem contatá-los por correio.

Vamos agora imaginar que adicionamos alguns redirecionamentos em cada servidor de email. Diga assim:

[e-mail protegido]->[e-mail protegido],[e-mail protegido],[e-mail protegido]

Agora como correio de[e-mail protegido]vai para[e-mail protegido], o servidor de e-mail no servidor1 fará três cópias dele e enviará posteriormente como três mensagens separadas (duas g irão para o servidor de b2.domain.com, uma irá para os servidores do Gmail). Agora, quando essas mensagens chegarem ao servidor do b2.domain.com, ele fará o redirecionamento novamente (usando suas próprias tabelas SQL), duplicando assim as mensagens.

Sinto falta de uma maneira elegante de resolver isso, então você poderia me indicar o caminho certo?

Desde já, obrigado!

Responder1

Você tem um indicador poderoso que não está usando ao analisar a expansão da tabela de aliases: se o e-mail vem do mundo externo ou se vem de outro edifício (um ou mais nomes de host ou IPs). Se o problema for que a expansão do alias em B1 falha de forma duplicada quando é enviada de B2, pule a expansão do alias se a origem for B2. Em uma ACL, isso seria feito com um hosts = !+B2, porém, no seu caso, são os roteadores onde você precisa que essa decisão seja tomada. Para fazer isso, eu definiria na ACL de conexão ou na ACL de correio:

warn hosts = +B2
     set acl_c_other_building = 1

Então, no roteador de aliases, você pode adicionar a condição de que, se for de outro prédio, retorne falso/não:

condition = ${if eq{$acl_c_other_building}{1} {no}{yes}}

Com essa lógica em vigor, presumivelmente os seguintes roteadores são aqueles que lidam com a entrega da caixa de correio e entregarão a mensagem localmente.

Se funcionar conforme o esperado, faça o inverso no outro prédio.

Responder2

Seu principal problema parece ser um ambiente de correio inconsistente. Por um lado, você trata os dois servidores como servidores internos idênticos (mesmas regras de alias), por outro lado, eles são responsáveis ​​​​apenas por um domínio, o que os faz tratar um ao outro como qualquer outro servidor de e-mail remoto, portanto, duplicações de redirecionamento podem acontecer .

Em vez de tentar lidar com essa configuração distribuída no nível de roteamento do MTA, sugiro que você forneça a ambos os servidores a mesma configuração de domínio, o que significa fazer com que ambos os servidores tratem seus domínios como locais e entreguem em caixas de correio locais e, em seguida, tenham essas caixas de correio replicadas entre o servidores, por exemplo, usando dovecotreplicação mestre-mestre

informação relacionada