Alias do postfix - tudo não funciona como esperado

1

Eu tenho um problema com minha configuração do postfix. Eu queria configurar um endereço de e-mail abrangente para um domínio. Eu tenho minhas caixas de correio virtuais e aliases salvos em um banco de dados postgresql. As consultas definidas nos arquivos vdomains.cf, vmailbox.cf e valias.cf são, respectivamente:

query = SELECT 1 FROM domains WHERE domain = '%s'

query = SELECT CONCAT(domains.domain, '/', mailboxes.address, '/') AS maildir FROM mailboxes LEFT JOIN domains ON mailboxes.domain = domains.id WHERE mailbox='%s'

query = SELECT dst FROM virtual_aliases WHERE src = '%s'

Esses arquivos estão vinculados a main.cf por este bloco

virtual_mailbox_domains = pgsql:/etc/postfix/vdomains.cf
virtual_alias_maps = pgsql:/etc/postfix/valias.cf
virtual_mailbox_base = /srv/mail
virtual_mailbox_maps = pgsql:/etc/postfix/vmailbox.cf
virtual_uid_maps = pgsql:/etc/postfix/vuidmaps.cf
virtual_gid_maps = pgsql:/etc/postfix/vdomainmaps.cf
virtual_transport = lmtp:unix:private/dovecot-lmtp

Isso funciona perfeitamente para destinatários conhecidos e o servidor rejeita todos os destinatários desconhecidos. O aliasing também funciona se eu definir um endereço no mapeamento da tabela de alias para outro endereço existente na tabela de caixa de correio.

O problema é que a tabela de alias é resolvida antes da tabela de caixa de correio, o que cria um grande problema quando eu quero alias um e-mail pega-tudo assim:

src          dst
@domain.com  [email protected]

Isso é resolvido antes da caixa de correio real e, portanto, todos os e-mails, incluindo aqueles destinados a usuários existentes, são encaminhados para o endereço [email protected].

De acordo com várias respostas aqui na pilha ou em outros sites, essa configuração deve funcionar e provavelmente serve para algumas pessoas, então acredito que estou fazendo algo errado.

Última coisa - minha configuração é Debian Jessie com o Postfix 2.11.3.

Qualquer ajuda é muito apreciada, obrigado antecipadamente

    
por j0hny 13.12.2016 / 09:35

1 resposta

0

Eu finalmente encontrei uma solução. Provavelmente não é o melhor, mas não consegui encontrar um mais correto, tendo lido toda a documentação relevante de postfix e vários outros posts. Esta questão não sendo respondida é outro indicador de que uma solução "correta" pode não existir.

Minha solução é bem simples. Descobri que, se você especificar todos os endereços existentes na tabela virtual de aliases da seguinte forma:

[email protected]    [email protected]
[email protected]   [email protected]

(basicamente a mesma fonte e destino)

funciona como esperado pela intenção original. (essa foi uma sugestão que encontrei em outra pergunta sobre o mesmo assunto). Bem, colocar essas informações na tabela virtual_aliases está claramente errado (duplicação de informações, ...), então eu criei uma solução mais elegante:

CREATE OR REPLACE VIEW v_virtual_aliases AS 
 SELECT mailboxes.mailbox AS src,
    mailboxes.mailbox AS dst
   FROM mailboxes
UNION ALL
 SELECT virtual_aliases.src,
    virtual_aliases.dst
   FROM virtual_aliases;

O que isto faz é simplesmente criar uma visão com todas as informações da tabela virtual_aliases combinada com todas as caixas de correio existentes da tabela de caixas de correio reais. Dessa forma, nenhum dado é duplicado e o aliasing funciona conforme o esperado - somente para endereços que não possuem uma entrada na tabela de caixas de correio. Dada essa consulta, o desempenho não deve ser um problema, mesmo para bancos de dados grandes.

Eu atualizei o arquivo valias.cf de acordo:

query = SELECT dst FROM virtual_aliases WHERE src = '%s'

Agora tudo funciona conforme o esperado pela pergunta original.

    
por 26.12.2016 / 12:28