Eu hospedo um punhado de domínios em uma única caixa (Linux, Ubuntu 13.x) e estou tentando usar o Postfix 2.10.2-1 para encaminhar mensagens para eles. (Eu usei o sendmail nos últimos 10 anos, então isso é novidade para mim.) Todos os meus MX
registros estão configurados de acordo, então o correio externo está chegando à caixa bem.
Eu segui os vários tutoriais on-line e tenho as seguintes linhas relevantes em minhas configurações:
main.cf
-------
myhostname = foo.a.com
myorigin = /etc/mailname # this just has 'a.com' inside it
mydestination = a.com localhost.localdomain localhost
virtual_alias_domains = b.com c.org
virtual_alias_maps = hash:/etc/postfix/virtual
No momento, só quero que todas as mensagens endereçadas ao postmaster em qualquer um dos domínios acessem a conta do postmaster e todas as mensagens endereçadas a qualquer outra pessoa em qualquer um dos domínios acessem a conta associada.
virtual
-------
[email protected] postmaster
@a.com userA
[email protected] postmaster
@b.com userB
[email protected] postmaster
@c.org userC
Infelizmente, todas as mensagens endereçadas a qualquer pessoa em qualquer um desses domínios estão sendo encaminhadas para usuárioA . Até que eu ativasse o log detalhado, pensei que os domínios virtuais não estavam sendo respeitados. Depois de ativar o registro detalhado, no entanto, vejo isso acontecendo para todos os e-mails recebidos:
mail.log
--------
...
postfix/cleanup: maps_find: virtual_alias_maps: hash:/etc/postfix/virtual(0.lock|fold_fix): @b.com = userB
postfix/cleanup: mail_addr_find: [email protected] -> userB
postfix/cleanup: send attr request = rewrite
postfix/cleanup: send attr rule = local
postfix/cleanup: send attr address = userB
Mas, em seguida, a reescrita trivial é executada novamente (pela oitava vez que processa essa parte específica do email) e decide que o userB não é o verdadeiro destinatário final da conta Unix, mas representa um email endereço em myorigin (ou talvez esteja escolhendo o primeiro elemento em mydestination ... que faria mais sentido).
postfix/trivial-rewrite: master_notify: status 0
postfix/trivial-rewrite: rewrite socket: wanted attribute: request
postfix/trivial-rewrite: input attribute name: request
...
postfix/trivial-rewrite: 'local' 'userB' -> '[email protected]' # <-- d'oh!
postfix/trivial-rewrite: send attr flags = 0
postfix/trivial-rewrite: send attr address = [email protected]
postfix/trivial-rewrite: master_notify: status 1
Então postfix/cleanup
assume
postfix/cleanup: maps_find: virtual_alias_maps: hash:/etc/postfix/virtual(0.lock|fold_fix): @a.com = userA
postfix/cleanup: mail_addr_find: [email protected] -> userA
postfix/cleanup: send attr request = rewrite
postfix/cleanup: send attr rule = local
postfix/cleanup: send attr address = userA
e conclui que userA é o destinatário verdadeiro da conta Unix.
Eu não sei quase nada sobre o Postfix, mas parece que a partir dos logs ele decide apenas sobre o endereço do destinatário final depois de executá-lo, reescrever duas vezes e obter o mesmo resultado duas vezes seguidas. Como evito que ele interprete a conta local userB como um endereço de e-mail userB @ mydestination [0] ? Eu quero que ele pare assim que encontrar o userB local e apenas entregue-o a ele.
Não posso listar @mydestination [0] dentro de / etc / postfix / virtual? Embora isso possa resolver o meu problema atual (porque esses usuários são usuários reais do Unix na caixa, então o email chegaria ao lugar certo), o Postfix ainda pensaria que [email protected] é o destinatário final. Isso parece errado para mim. Deve apenas saber que userB é uma conta Unix e parar por aí.