
He estado siguiendo los tutoriales de ISPMail en workaround.org (la versión 2.9 Wheezy) y hasta ahora todo ha funcionado bien. Cuando llegué al paso "Probar la entrega de correo electrónico", noté un error sobre la consulta en el registro de salida 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
Me pareció bastante interesante que no encuentra la base de datos, así que revisé CADA archivo que toqué y que involucraba la base de datos (incluidos los archivos postfix cf) y todo está correcto, por lo que estoy desconcertado en este punto, pero curiosamente Parece que el correo electrónico aún llegó al destino correcto en /var/vmail/domain.com/.
¿Debería preocuparme por esto o me estoy perdiendo algo aquí? Como es un mensaje de dovecot, sería la consulta de dovecot-sql.conf.ext que incluyo aquí.
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';
Respuesta1
Como dice en su mail.log, el valor de user_query no está definido. Es por eso que Dovecot recurre a la consulta predeterminada.
Abra su archivo de configuración /etc/dovecot/dovecot-sql.conf.ext y lo más probable es que el valor de user_query esté comentado o vacío. Rellénelo con una consulta adecuada.
Como yo, si estás usando el mismo UID y GID para todas las cuentas de correo (digamos 5000), puedes hacer algo tan simple como
user_query = SELECT ('5000') as 'uid',('5000') as 'gid'
Otra cosa más que noté en su archivo de configuración. Es mejor evitar el uso de PLAIN-MD5 como su default_pass_scheme. Mejor cambie a algo más fuerte como SHA512.
Espero que encuentres útil mi respuesta. ¡Salud!
Respuesta2
use nano o vi (nano guardar = ctrl+o, luego salir = ctrl+x) vi guardar = insertar botón y botón esc luego :wq! enter Se guardará y saldrá.
/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 la sección userdb con el controlador sql:
#userdb {
#driver = sql
#args = /etc/dovecot/dovecot-sql.conf.ext
#}
systemctl restart dovecot
y debería funcionar.
El problema es que el driver userdb está usando sql
y está buscando la tabla users
en la base de datos, pero esta tabla no existe.
Este es un problema de un tutorial popular, del cual encontré muchas variaciones circulando por Internet (¿cuál es original? No lo sé). Este tutorial no explica que las líneas de userdb deben comentarse, solo contiene instrucciones sobre cómo agregar o modificar líneas en los archivos de configuración. El tutorial utiliza MariaDB o MySQL para la tabla de usuarios virtuales. En este caso, solo necesitamos driver = sql
passdb, que conduce a dovecot-sql.conf.ext
, que contiene una consulta adecuada a la base de datos para obtener la contraseña y una forma estática de obtener homedir.
Probé esto en mi servidor con la configuración que creo que debería ser, después de haber leído el tutorial que encontré (creo que usaste el mismo tutorial) y tuve un problema similar. Simplemente verifiqué tres veces o incluso cuadrupliqué la configuración de postfix y dovecot en mi propio servidor y esta solución resolvió el problema. Configuré el palomar y el postfix junto con clamav, spamassassin y postgrey. Todo está funcionando de manera bastante brillante, pero pasé más de 40 horas revisando paso a paso cada línea en los archivos de configuración de dovecot y postfix.
Editado el 22 de marzo de 2019.
He leído un libro donde hay otra explicación para el conductor pam.
En el archivo /etc/dovecot/conf.d/10-auth.conf al final hay una línea:
!include auth-system.conf.ext
En el archivo /etc/dovecot/conf.d/auth-system.conf.ext hay una sección comentada predeterminada que se parece a 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
#}
Si desea utilizar cuentas locales estáticas en lugar de las creadas manualmente en la base de datos (no encontré ninguna forma automática de colocar una cuenta de correo electrónico masiva en MariaDB), su código en /etc/dovecot/conf.d/auth-system. conf.ext debe cambiarse a:
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 es una explicación realmente breve. Dovecot puede usar una base de datos SQL donde crea usuarios, o puede usar PAM para autenticar las cuentas de los usuarios locales en el sistema. Depende únicamente del administrador qué método elegir. En mi opinión, SQL es mucho más seguro que PAM y /etc/shadow, porque si quieres crear un usuario en MySQL/MariaDB puedes elegir SHA como en el siguiente ejemplo:
INSERT INTO Users_tbl (DomainId, password, Email) VALUES (1, ENCRYPT('yourdifficultpasswordphrase', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), '[email protected]');
Y luego:
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 hace el trabajo. Por supuesto, esta es una explicación muy breve, pero espero que explique la diferencia y por qué SQL es la mejor opción.
Respuesta3
Dovecot está buscando una tabla llamada users
mientras parece que tienes datos en virtual_users
la tabla:
Query failed, retrying: Table 'mailserver.users' doesn't exist
Cambie el nombre de la tabla o configure dovecot para usar virtual_users
la tabla.
Respuesta4
Esta no es una respuesta exacta, pero puede ser relevante para su problema para que los nuevos visitantes puedan solucionarlo. ver el enlace a continuación