Explique o formato user @ domain do valor do parâmetro postfix $ virtual_mailbox_maps

2

Estou tentando configurar um servidor de email usando esse artigo . Basicamente usando postfix & dovecot.

Eu tenho uma configuração de teste que funciona, mas não entendo algumas (muitas) coisas e estou tentando corrigir isso antes de migrar.

Das muitas coisas, isso é o mais confuso: eu não entendo como o segunda parte do parâmetro de $ virtual_mailbox_maps funciona.

Eu tenho o seguinte em main.cf:

virtual_mailbox_maps = hash:/etc/postfix/virtual-mailbox-users

Meu / etc / postfix / virtual-mailbox-users parece com

[email protected]    [email protected]
[email protected]    [email protected]
etc, etc.

Primeiro, onde posso encontrar a documentação do segundo parâmetro [email protected] formato, a maioria dos formatos tem a forma de um arquivo ou diretório (como em / a / b / c).

Se eu substituir o segundo parâmetro por outra coisa, por exemplo,

[email protected]    /tmp/foo

posso enviar e-mail para [email protected], mas não de, o que leva a:

Minha segunda pergunta: o SMTP está usando o $ virtual_mailbox_maps? (E porque, desde já tem o endereço de e-mail como parâmetro chave?). O uso dovecot $ virtual_mailbox_maps?

(Eu tenho muito mais perguntas, mas isso pode me ajudar a desvendar alguns. Por exemplo, posso ter todas as mensagens para user@domain*.com entregues em uma das caixas de correio, digamos [email protected]?)

(Desculpe a natureza declarativa do título, meu original começou com 'Como' mas foi rejeitado.)

Eu fiz uma experiência em que substituí a entrada $ virtual_mailbox_maps por, por exemplo, [email protected] OK , e a entrega funcionou, mas o envio de e-mail falhou (com Endereço do remetente rejeitado: não pertencente ao usuário ). Então, o lado direito (valor) é importante. Esta é a minha primeira pergunta. (Eu li os vários documentos que descrevem o formato, etc., mas não consigo encontrar nada que fale especificamente sobre a interação com o SMTP.

Adendo : Obrigado ao @masegaloeh por rastrear isso. A configuração relevante é a seguinte, e 'googling' smtpd_sender_login_maps explica o resto.

root@generic:/etc/postfix# postconf -n| grep smtpd_sender
smtpd_sender_login_maps = $virtual_mailbox_maps
smtpd_sender_restrictions = reject_unknown_sender_domain, reject_sender_login_mismatch
    
por copper.hat 24.06.2015 / 06:57

1 resposta

4

Quando o postfix recebe e-mails recebidos, basicamente ele pode ser dividido em três processos:

  1. Receber e-mail fazendo transações SMTP com o servidor de e-mail do remetente e aplicar restrições de SMTP, por exemplo: verifique se o destinatário existe
  2. Armazene o email enviando-o para um dos agentes de entrega (dovecot, local, virtual)

Com base em dois processos acima, o parâmetro virtual_mailbox_maps tem (pelo menos) duas funções:

  1. Como validação de destinatário, quando postfix que recebe e-mail para o postfix pode rejeitar o destinatário não-existente. Essas verificações foram realizadas quando reject_unauth_destination chamado.
  2. O parâmetro em que o agente de entrega virtual virtual (8) procura a localização da caixa de correio. O parâmetro $virtual_mailbox_base é incondicionalmente incluído neste caminho, portanto, o caminho absoluto do armazenamento de maildir é $virtual_mailbox_base$virtual_mailbox_maps .

A segunda função só será usada se você configurou o postfix para enviar email para virtual delivery agent. Com base no tutorial que você postou acima, o postfix usará dovecot delivery agent em vez de virtual .

virtual_transport = dovecot

Como o dovecot-lda que envia o e-mail, o virtual_mailbox_maps não era usado neste estágio (como armazenar e-mails) . Em vez da configuração do postfix, o dovecot usará este parâmetro

mail_location = maildir:/var/mail/vmail/%d/%n/mail:LAYOUT=fs

determina onde armazenar o email.

Where is it documented that the format of the $virtual_mailbox_maps file is "address address" and that the second must match the first in order for SMTP to work (note: This is based on my empirical observations)?

O parâmetro virtual_mailbox_maps deve ser constituído por uma ou mais tabelas de pesquisa . . Todas as tabelas de consulta do Postfix armazenam informações como pares (chave, valor). É por isso que o arquivo virtual_mailbox_maps consiste em duas colunas: o lado esquerdo é para chave e o direito é para valor.

A maioria das tabelas de pesquisa do Postfix são usadas para procurar informações. Por exemplo, o agente de entrega virtual usa virtual_mailbox_maps para procurar o caminho da caixa de correio do destinatário. Portanto, o lado direito da sua tabela de hash deve especificar o caminho.

Com algumas tabelas, no entanto, o O Postfix precisa saber apenas se a chave de pesquisa existir . Qualquer valor de resultado de pesquisa não vazio pode ser usado aqui: o resultado da pesquisa não é usado. Por exemplo, o smtpd usa virtual_mailbox_maps para verificar se o destinatário existe.

Então, na verdade, você pode colocar qualquer entrada no lado direito de virtual_mailbox_maps , pois o postfix não a usará. Não há formato como "endereço de endereço" neste caso.

When I replaced the $virtual_mailbox_maps entry by, for example, [email protected] OK, and delivery worked, but sending email failed (with Sender address rejected: not owned by user)

Isso porque você tem esse parâmetro em main.cf

smtpd_sender_restrictions = reject_unknown_sender_domain,
    reject_sender_login_mismatch
smtpd_sender_login_maps = $virtual_mailbox_maps

Quando tiver reject_sender_login_mismatch e smtpd_sender_login_maps , o postfix verificará se seu nome de usuário SASL mapeou para o remetente fornecido quando você envia o e-mail. Portanto, o formato de smtpd_sender_login_maps = $virtual_mailbox_maps deve consistir em:

[email protected]   [email protected]

No seu caso, [email protected] = [email protected], é por isso que você precisa colocar "endereço" no seu $virtual_mailbox_maps .

É claro que você pode fornecer smtpd_sender_login_maps com tabela diferente com virtual_mailbox_maps . Mas o autor do artigo decidiu unificá-los. Talvez o motivo seja que você só precisa alterar um arquivo para adicionar / remover o destinatário válido

    
por 24.06.2015 / 16:01