postfix “Usuário não existe” mas o usuário existe

4

Estou tendo uma situação estranha que não encontrei em outro lugar. Quando eu envio e-mail para o rcook na minha máquina local, estou vendo isso no syslog:

Feb 16 20:27:14 linode postfix/pickup[1305]: 326CC4463F: uid=0 from=<root>
Feb 16 20:27:14 linode postfix/cleanup[1524]: 326CC4463F: message-id=<[email protected]>
Feb 16 20:27:14 linode postfix/qmgr[1306]: 326CC4463F: from=<[email protected]>, size=302, nrcpt=1 (queue active)
Feb 16 20:27:14 linode postfix/lmtp[1531]: 326CC4463F: to=<[email protected]>, orig_to=<rcook>, relay=linode.example.net[private/dovecot-lmtp], delay=0.06, delays=0.04/0.01/0.01/0.01, dsn=5.1.1, status=bounced (host linode.example.net[private/dovecot-lmtp] said: 550 5.1.1 <[email protected]> User doesn't exist: [email protected] (in reply to RCPT TO command))
Feb 16 20:27:14 linode postfix/bounce[1533]: 326CC4463F: sender non-delivery notification: 3C71844643
Feb 16 20:27:14 linode postfix/qmgr[1306]: 326CC4463F: removed

Parece que "rcook" está sendo transformado em "[email protected]" pelo postfix. Estou usando pesquisas mysql para postfix, por meu arquivo main.cf:

#Virtual domains, users, and aliases
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf

Eu tenho que adicionar um usuário, [email protected] ao meu arquivo /etc/postfix/mysql-virtual-mailbox-maps.cf. Em seguida, o cookie recebe o correio em / var / mail / rcook destinado a rcook. Em outras palavras, o envio de e-mails para 'rcook' é transformado em '[email protected]', que depois é devolvido para 'rcook'. Espero que alguém aqui possa esclarecer o que está acontecendo.  Parece que o rcook é uma caixa de correio real:

root@linode (~ ): postmap -q rcook mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf 
1

e

root@linode (~ ): ls /var/mail/rcook
[Airmail]                           dovecot-uidvalidity
* amazon and ebay sales             dovecot-uidvalidity.54e27e23
Apple Mail To Do                    Drafts
etc etc etc lots of mailboxes... 

[email protected] mapeia para rcook:

root@linode (~ ): postmap -q [email protected] mysql:/etc/postfix/mysql-virtual-alias-maps.cf 
rcook

Mas isso falha, a menos que eu adicione uma entrada virtual_users para [email protected]:

date | mail -s 'testing' rcook

Minha pergunta é: por que o rcook é mapeado para [email protected]? Estou pensando que tem algo a ver com o valor $ mydomain no mundo do postfix, mas não sei como isso está sendo definido.

root@linode (~ ): postconf | grep mydomain
append_dot_mydomain = no
mydomain = example.net

Aqui está o meu não-padrão do postfix:

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
inet_interfaces = all
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
mydestination = localhost
myhostname = linode.example.net
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
myorigin = /etc/mailname
readme_directory = no
recipient_delimiter = +
relayhost =
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = private/auth
smtpd_sasl_type = dovecot
smtpd_tls_auth_only = yes
smtpd_tls_cert_file = /etc/dovecot/dovecot.pem
smtpd_tls_key_file = /etc/dovecot/private/dovecot.pem
smtpd_use_tls = yes
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_transport = lmtp:unix:private/dovecot-lmtp

Não há nada que mencione exemplo.net em qualquer lugar em / etc / dovecot /. Oque esta acontecendo aqui? Devo mencionar que, se eu adicionar um usuário [email protected] aos meus virtual_users, tudo estará bem. Eu apenas fico perplexo com o que está acontecendo, e por que esse usuário é necessário, já que é apenas um alias.

Aqui está o que acontece no log quando eu adiciono '[email protected]' ao meu mapeamento virtual_users:

Feb 17 10:35:55 linode postfix/pickup[8804]: 3D785901CA: uid=0 from=<root>
Feb 17 10:35:55 linode postfix/cleanup[9231]: 3D785901CA: message-id=<[email protected]>
Feb 17 10:35:55 linode postfix/qmgr[1619]: 3D785901CA: from=<[email protected]>, size=326, nrcpt=1 (queue active)
Feb 17 10:35:55 linode dovecot: lmtp(9262, [email protected]): IX33DwuK41QuJAAAmhsNrQ: msgid=<[email protected]>: saved mail to INBOX
Feb 17 10:35:55 linode postfix/lmtp[9233]: 3D785901CA: to=<[email protected]>, orig_to=<rcook>, relay=linode.example.net[private/dovecot-lmtp], delay=0.03, delays=0.01/0/0.01/0.01, dsn=2.0.0, status=sent (250 2.0.0 <[email protected]> IX33DwuK41QuJAAAmhsNrQ Saved)
Feb 17 10:35:55 linode postfix/qmgr[1619]: 3D785901CA: removed
    
por Rich 17.02.2015 / 06:01

2 respostas

3

Vamos conhecer o segredo do processo de entrega de e-mail no linux, com o binário sendmail e o postfix.

Quando sua corrida

date | mail -s 'testing' rcook

você diz ao sendmail para enviar e-mail para o rcook, um endereço de destinatário sem partes do domínio para o postfix. Como você tem o parâmetro append_at_myorigin = yes (valor padrão), o postfix adicionará as partes do domínio ao endereço do destinatário. O domínio anexado era controlável pelo parâmetro myorigin . No seu caso, parece que o conteúdo de /etc/mailname era example.net .

Isso explica por que o postfix modificou seu endereço de destinatário para [email protected]. Vamos continuar a história ...

Agora, o postfix deve decidir para onde o email deve ir. Primeiro, o postfix procurará virtual_alias_maps para descobrir se esse e-mail deve ter um alias ou não. Como você definiu [email protected] como alias para o rcook, o postfix irá aliar seu email ao rcook.

Mas espere, o alias alvo não tem partes de domínio, então para onde ele vai? A resposta foi encontrada em esta página man e esta resposta . A explicação curta é o rcook de destino do alias do apêndice do postfix com myorigin (novamente). Então, nosso alias alvo foi transformado em [email protected] .

Mas vai criar um loop, certo? O e-mail foi aliasing para si mesmo?

Felizmente, o postfix foi inteligente o suficiente para evitá-lo. Porque [email protected] satisfez estas condições

  • já foi aliased
  • example.net foi definido em virtual_mailbox_domains

então o postfix procurará [email protected] em virtual_mailbox_maps .

Infelizmente, não o encontra no seu primeiro caso, por isso o postfix irá rejeitá-lo. Quando você adicionar a entrada em virtual_mailbox_maps postfix, ela ficará armazenada com facilidade através dos serviços LvP dovecot.

Referências:

man 5 postconf

    
por 18.02.2015 / 00:54
1

Um último ponto que eu devo mencionar no caso de alguém estar confuso como eu estava, sobre por que o e-mail é colocado no / var / mail / rcook / quando o postfix mudou "rcook" para "[email protected]". Isso acontece porque em /etc/dovecot/conf.d/10-mail.conf eu tenho isto:

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

que remove o nome do domínio. Uma vez que @masegaloeh deu sua excelente resposta, consegui descobrir essa peça final.

    
por 18.02.2015 / 05:43