Configuração do Postfix / Dovecot com usuários virtuais

1

Eu segui este tutorial para configurar o Postfix + Dovecot com usuários virtuais (em um banco de dados mysql): link

Eu posso criar um usuário (adicionar uma linha no banco de dados) e, em seguida, esse usuário pode se conectar a um cliente de email (usando o IMAP). O problema é que o usuário não pode receber e-mails (tentei enviar e-mails de um usuário para outro, então e-mails locais).

Eu criei dois usuários, bla e salut , com o domínio isp6.lab (adicionei os hosts mail.isp6.lab a 127.0.0.1, nenhum problema deste lado para testes locais).

O /var/log/mail.log tem esta aparência:

Oct  5 13:43:28 debianR postfix/lmtp[6346]: 4284485120: to=<[email protected]>, relay=mail.isp6.lab[private/dovecot-lmtp], delay=0.12, delays=0.08/0/0/0.04, dsn=5.1.1, status=bounced (host mail.isp6.lab[private/dovecot-lmtp] said: 550 5.1.1 <[email protected]> User doesn't exist: [email protected] (in reply to RCPT TO command))

No meu /etc/dovecot/conf.d/10-mail.conf, eu tenho essa linha para o mail_location:

mail_location = maildir:/var/mail/vhosts/%d/%n

E no meu /etc/dovecot/conf.d/auth-sql-conf.ext (apenas um exemplo, não o arquivo completo):

userdb {
  driver = static
  args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
}

Quando vou para /var/mail/vhosts/isp6.lab, vejo as pastas dos meus 2 usuários assim:

ls /var/mail/vhosts/isp6.lab
    bla
    salut

Para que meus usuários possam fazer login, eles têm suas pastas de e-mail no sistema, mas, de alguma forma, não podem receber nenhum e-mail porque "não existem".

Sinta-se à vontade para me solicitar outras informações, se necessário, procurei em todos os lugares, mas não consigo encontrar a causa do meu problema.

EDIT: os logs de depuração estão fornecendo mais informações:

Ao enviar um email de bla para salut :

Oct 05 15:12:22 auth: Debug: auth client connected (pid=0)
Oct 05 15:12:22 auth: Debug: client in: AUTH    1       LOGIN   service=smtp    nologin lip=192.168.1.2 rip=192.168.1.3 secured
Oct 05 15:12:22 auth: Debug: client out: CONT   1       VXNlcm5hbWU6
Oct 05 15:12:22 auth: Debug: client in: CONT    1       YmxhQGlzcDYubGFi
Oct 05 15:12:22 auth: Debug: client out: CONT   1       UGFzc3dvcmQ6
Oct 05 15:12:22 auth: Debug: client in: CONT    1       YmxhYmxh
Oct 05 15:12:22 auth-worker(7448): Debug: sql([email protected],192.168.1.3): query: SELECT NULL AS password, 'Y' as nopassword, email AS user FROM accounts WHERE email = '[email protected]' AND pass = password('***********')
Oct 05 15:12:22 auth: Debug: client out: OK     1       [email protected]
Oct 05 15:12:22 lmtp(7467): Debug: none: root=, index=, control=, inbox=, alt=
Oct 05 15:12:22 lmtp(7467): Info: Connect from local
Oct 05 15:12:22 auth: Debug: master in: USER    1       [email protected]  service=lmtp
Oct 05 15:12:22 auth-worker(7448): Debug: sql([email protected]): query: SELECT NULL AS password, 'Y' as nopassword, email AS user FROM accounts WHERE email = '[email protected]' AND pass = password('')
Oct 05 15:12:22 auth-worker(7448): Info: sql([email protected]): unknown user
Oct 05 15:12:22 auth: Debug: master out: NOTFOUND       1
Oct 05 15:12:22 lmtp(7467): Debug: auth input:
Oct 05 15:12:22 lmtp(7467): Info: Disconnect from local: Client quit (in reset)
Oct 05 15:12:22 lmtp(7467): Debug: none: root=, index=, control=, inbox=, alt=
Oct 05 15:12:22 lmtp(7467): Info: Connect from local
Oct 05 15:12:22 auth: Debug: master in: USER    2       [email protected]    service=lmtp
Oct 05 15:12:22 auth-worker(7448): Debug: sql([email protected]): query: SELECT NULL AS password, 'Y' as nopassword, email AS user FROM accounts WHERE email = '[email protected]' AND pass = password('')
Oct 05 15:12:22 auth-worker(7448): Info: sql([email protected]): unknown user
Oct 05 15:12:22 auth: Debug: master out: NOTFOUND       2
Oct 05 15:12:22 lmtp(7467): Debug: auth input:
Oct 05 15:12:22 lmtp(7467): Info: Disconnect from local: Client quit (in reset)

Parece que uma consulta SQL é feita para localizar o usuário, mas sem nenhuma senha (obviamente, o remetente não tem a senha do destinatário), portanto o usuário não foi encontrado. Nenhuma consulta deve ser feita como eu configurei o userdb para ser estático, não deve haver qualquer consulta para encontrar os usuários. Eu acho que poderia resolver temporariamente adicionando um user_query.

PS: minha consulta de senha vem disso (para ser compatível com o MySQL PASSWORD): link

PPS: a segunda solicitação de sql é para a mensagem de retorno, que retorna sem sucesso para informar que o e-mail não pôde ser entregue.

    
por Raphael Laurent 05.10.2014 / 14:23

1 resposta

2

Eu finalmente encontrei a solução. O Postfix está configurado para procurar no banco de dados que o usuário existe para entregar o email, então o Dovecot não deveria ter que fazê-lo ao receber um email do Postfix para entregar.

É assim que deve funcionar, e a razão pela qual nós definimos um user_db estático. Ele perdeu um parâmetro para que o Dovecot não verifique se o usuário existe, porque o Postfix já o faz:

/etc/dovecot/conf.d/auth-sql.conf.ext (apenas parte útil):

userdb {
  driver = static
  args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n allow_all_users=yes
}

A adição do parâmetro allow_all_users=yes resolveu o problema.

    
por 05.10.2014 / 15:40