Tenho seguido os tutoriais do ISPMail em workaround.org (a versão 2.9 Wheezy) e até agora tudo tem funcionado bem. Quando cheguei à etapa "Testando entrega de e-mail", notei um erro sobre a consulta no log de saída de /var/log/mail.log.
May 14 06:48:59 mail postfix/pickup[17704]: EA4AD240A98: uid=0 from=<root>
May 14 06:48:59 mail postfix/cleanup[17776]: EA4AD240A98: message-id=<[email protected]>
May 14 06:48:59 mail postfix/qmgr[17706]: EA4AD240A98: from=<[email protected]>, size=429, nrcpt=1 (queue active)
May 14 06:49:00 mail dovecot: auth-worker(17782): mysql(127.0.0.1): Connected to database mailserver
May 14 06:49:00 mail dovecot: auth-worker(17782): Warning: mysql: Query failed, retrying: Table 'mailserver.users' doesn't exist
May 14 06:49:00 mail dovecot: auth-worker(17782): Error: sql([email protected]): User query failed: Table 'mailserver.users' doesn't exist (using built-in default user_query: SELECT home, uid, gid FROM users WHERE username = '%n' AND domain = '%d')
May 14 06:49:00 mail dovecot: lda([email protected]): msgid=<[email protected]>: saved mail to INBOX
May 14 06:49:00 mail postfix/pipe[17780]: EA4AD240A98: to=<[email protected]>, relay=dovecot, delay=0.09, delays=0.03/0.01/0/0.06, dsn=2.0.0, status=sent (delivered via dovecot service)
May 14 06:49:00 mail postfix/qmgr[17706]: EA4AD240A98: removed
Achei isso bastante interessante porque não estava encontrando o banco de dados, então voltei e verifiquei TODOS os arquivos que toquei que envolviam o banco de dados (incluindo os arquivos postfix cf) e tudo está correto, então estou perplexo neste ponto, mas estranhamente parece que o e-mail ainda chegou ao destino correto em /var/vmail/domain.com/.
Devo me preocupar com isso ou estou faltando alguma coisa aqui? Como é uma mensagem do dovecot, seria a consulta do dovecot-sql.conf.ext que estou incluindo aqui
driver = mysql
connect = host=127.0.0.1 dbname=mailserver user=blocked password=***REMOVED***
default_pass_scheme = PLAIN-MD5
password_query = SELECT email as user, password FROM virtual_users WHERE email='%u';
Responder1
Como diz no seu mail.log, o valor para user_query não está definido. É por isso que o Dovecot está voltando para a consulta padrão.
Abra seu arquivo de configuração /etc/dovecot/dovecot-sql.conf.ext e o valor de user_query provavelmente estará comentado ou vazio. Preencha-o com uma consulta apropriada.
Como eu, se você estiver usando o mesmo UID e GID para todas as contas de e-mail (digamos 5.000), poderá fazer algo tão simples como
user_query = SELECT ('5000') as 'uid',('5000') as 'gid'
Apenas mais uma coisa que notei no seu arquivo de configuração. É melhor evitar usar PLAIN-MD5 como seu default_pass_scheme. Melhor mudar para algo mais forte como SHA512.
Espero que você ache minha resposta útil. Saúde!
Responder2
use nano ou vi (nano save = ctrl+o, então exit = ctrl+x) vi save = botão insert e botão esc então :wq! enter Ele irá salvar e sair.
/etc/dovecot/conf.d/auth-sql.conf.ext
...
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
...
userdb {
driver = static
args = uid=vmail gid=vmail home=/home/vmail/%d/%n/Maildir
}
Comente a seção userdb com o driver sql:
#userdb {
#driver = sql
#args = /etc/dovecot/dovecot-sql.conf.ext
#}
systemctl restart dovecot
e deve funcionar.
O problema é que o driver userdb está usando sql
e está procurando a tabela users
no banco de dados, mas essa tabela não existe.
Esse é um problema de um tutorial popular, do qual encontrei muitas variações circulando na internet (qual é o original? Não sei). Este tutorial não explica que as linhas do userdb devem ser comentadas, apenas contém instruções sobre como adicionar ou modificar linhas nos arquivos de configuração. O tutorial usa MariaDB ou MySQL para tabela de usuários virtuais. Nesse caso, precisamos apenas driver = sql
do passdb, que leva a dovecot-sql.conf.ext
, que contém a consulta adequada ao banco de dados em busca da senha e uma forma estática de obter o homedir.
Testei isso no meu servidor com as configurações que acho que deveriam estar, depois de ler o tutorial que encontrei (acho que você usou o mesmo tutorial) e tive um problema semelhante. Acabei de verificar três vezes ou até quadruplicar minhas configurações de postfix e dovecot em meu próprio servidor e esta solução resolveu o problema. Configurei o dovecot e o postfix junto com clamav, spamassassin e postgrey. Tudo está funcionando muito bem, mas gastei mais de 40 horas para verificar passo a passo cada linha nos arquivos de configuração dovecot e postfix.
Editado em 22 de março de 2019
Eu li um livro onde há outra explicação para o driver pam.
No arquivo /etc/dovecot/conf.d/10-auth.conf no final há uma linha:
!include auth-system.conf.ext
No arquivo /etc/dovecot/conf.d/auth-system.conf.ext há uma seção comentada padrão que se parece com esta.
#passdb {
#driver = pam
# [session=yes] [setcred=yes] [failure_show_msg=yes] [max_requests=<n>]
# [cache_key=<key>] [<service name>]
#args = dovecot
#}
#userdb {
# <doc/wiki/AuthDatabase.Passwd.txt>
#driver = passwd
# [blocking=no]
#args =
#override_fields = home=/home/virtual/%u
#}
Se você quiser usar contas locais estáticas em vez daquelas criadas manualmente no banco de dados (não encontrei nenhuma maneira automatizada de colocar contas de e-mail em massa no MariaDB), seu código em /etc/dovecot/conf.d/auth-system. conf.ext deve ser alterado para:
passdb {
driver = pam
# [session=yes] [setcred=yes] [failure_show_msg=yes] [max_requests=<n>]
# [cache_key=<key>] [<service name>]
#args = dovecot
}
userdb {
# <doc/wiki/AuthDatabase.Passwd.txt>
driver = passwd
# [blocking=no]
#args =
#override_fields = home=/home/virtual/%u
}
Esta é uma explicação muito curta. O Dovecot pode usar banco de dados SQL onde você cria usuários ou pode usar PAM para autenticar contas de usuários locais no sistema. Depende apenas do administrador qual caminho escolher. Na minha opinião SQL é muito mais seguro que PAM e /etc/shadow, pois se você quiser criar um usuário em um MySQL/MariaDB você pode escolher SHA como no exemplo abaixo:
INSERT INTO Users_tbl (DomainId, password, Email) VALUES (1, ENCRYPT('yourdifficultpasswordphrase', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), '[email protected]');
E então:
nano /etc/dovecot/dovecot-sql.conf.ext
driver = mysql
connect = host=localhost dbname=yourdbname user=dbuser
password=yourdifficultpassword
default_pass_scheme = SHA512-CRYPT
password_query = SELECT Email as User, password FROM Users_tbl WHERE
Email='%u';
SHA-512 faz o trabalho. É claro que esta é uma explicação muito curta, mas espero que explique a diferença e por que o SQL é a melhor escolha.
Responder3
Dovecot está procurando uma tabela chamada users
enquanto você parece ter dados na virtual_users
tabela:
Query failed, retrying: Table 'mailserver.users' doesn't exist
Renomeie a tabela ou configure o dovecot para usar virtual_users
a tabela.
Responder4
Esta não é uma resposta exata, mas pode ser relevante para o seu problema, para que novos visitantes possam solucionar o problema. veja o link abaixo