
He estado siguiendo esta guía para configurar un servidor de correo en mi servidor:http://flurdy.com/docs/postfix/edition5.html La única diferencia es que este tutorial usa una base de datos MySQL y yo usé PostgreSQL.
Pero no puedo iniciar sesión en RoundCube. Este es un mensaje que recibo en el registro de errores de RoundCube:
[31-Dec-2013 16:40:42 +0100]: IMAP Error: Login failed for [email protected] from A.B.C.D. AUTHENTICATE CRAM-MD5: A0001 NO Login failed. in /usr/share/roundcube/program/lib/Roundcube/rcube_imap.php on line 184 (POST /?_task=login&_action=login)
Esto es del registro IMAP:
[31-Dec-2013 16:40:37 +0100]: [CB8A] S: * OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA AUTH=CRAM-MD5 AUTH=CRAM-SHA1 IDLE AUTH=PLAIN ACL ACL2=UNION] Courier-IMAP ready. Copyright 1998-2011 Double Precision, Inc. See COPYING for distribution information.
[31-Dec-2013 16:40:37 +0100]: [CB8A] C: A0001 AUTHENTICATE CRAM-MD5
[31-Dec-2013 16:40:37 +0100]: [CB8A] S: + PDIxNUFCQjFGRjJBNTi1RUJEMTIzMjFEMDAwNDIxMTUzQGxpbm9kZT4=
[31-Dec-2013 16:40:37 +0100]: [CB8A] C: bWFya29Adm9kYW5vdmljLm5ldCBmMzk2njk0OTRiMTA1Mjc2YjllYWIxODhhZDI2OWM3NA==
[31-Dec-2013 16:40:42 +0100]: [CB8A] S: A0001 NO Login failed.
Tengo un usuario en mi tabla de base de datos en Postgres. Aquí está él:
<?xml version="1.0" encoding="utf-8" ?>
<data>
<header>
<column name="id" type="varchar" />
<column name="name" type="varchar" />
<column name="uid" type="int4" />
<column name="gid" type="int4" />
<column name="home" type="varchar" />
<column name="maildir" type="varchar" />
<column name="enabled" type="bool" />
<column name="change_password" type="bool" />
<column name="clear" type="varchar" />
<column name="crypt" type="varchar" />
<column name="quota" type="varchar" />
<column name="procmailrc" type="varchar" />
<column name="spamassassinrc" type="varchar" />
</header>
<records>
<row>
<column name="id">[email protected]</column>
<column name="name">test</column>
<column name="uid">5000</column>
<column name="gid">5000</column>
<column name="home">/var/spool/mail/virtual</column>
<column name="maildir">test/</column>
<column name="enabled">t</column>
<column name="change_password">t</column>
<column name="clear">aaaa</column>
<column name="crypt">$5$c74a6630fAb058a5$Zo95c7qWT.o/Twg4niR/gcNoVq2XVVPl0aw6DoS8ufA</column>
<column name="quota"></column>
<column name="procmailrc"></column>
<column name="spamassassinrc"></column>
</row>
</records>
</data>
Intenté iniciar sesión con test
y [email protected]
y con la contraseña simple aaaa
y la cifrada. Para estar seguro, también generé la contraseña dentro de MySQL (usando la expresión de la guía) y luego copié el resultado en el campo en Postgres. Y sí, MySQL y Postgres están en el mismo servidor. Aquí está la expresión que usé en MySQL:
select encrypt('password', CONCAT('$5$', MD5(RAND())));
Realmente no sé qué más hacer, así que agradecería cualquier ayuda. Si necesita más información, sólo dígalo.
EDITAR:
Logré iniciar sesión en el servidor a través de telnet (cuando solucioné el problema del directorio de correo que faltaba). Pero todavía no puedo conectarme con RoundCube. Aquí está el resultado de mail.log:
Dec 31 20:14:45 localhost imapd-ssl: Connection, ip=[::ffff:127.0.0.1]
Dec 31 20:14:45 localhost authdaemond: received auth request, service=imap, authtype=cram-md5
Dec 31 20:14:45 localhost authdaemond: authpgsql: trying this module
Dec 31 20:14:45 localhost authdaemond: cram: challenge=PDk1N0QxRTI3QTlFREy3MkYwODI3RUE2MDVDREREMTdBQGxpbm9kZT4=, response=bWFya28gY2Q5OTRmNDI2ZtY3NDUzZGM2YmJlYjhmNTI0ZWQ3NWI=
Dec 31 20:14:45 localhost authdaemond: cram: decoded challenge/response, username 'test'
Dec 31 20:14:45 localhost authdaemond: Install of a character set for Postgresql: UTF8
Dec 31 20:14:45 localhost authdaemond: SQL query: SELECT id, crypt, '', uid, gid, home, concat(home,'/',maildir), '', name, '' FROM users WHERE id = '[email protected]' AND (enabled=TRUE)
Dec 31 20:14:45 localhost authdaemond: authpgsql: REJECT - try next module
Dec 31 20:14:45 localhost authdaemond: FAIL, all modules rejected
Dec 31 20:14:45 localhost imapd-ssl: LOGIN FAILED, method=CRAM-MD5, ip=[::ffff:127.0.0.1]
Dec 31 20:14:50 localhost imapd-ssl: Disconnected, ip=[::ffff:127.0.0.1], time=5, starttls=1
Respuesta1
Al enfrentarme al mismo problema, hice algunos análisis de Google-Foo para llegar a la raíz del problema: comogabrielasumió correctamenteen su respuesta, no es culpa de Roundcube, sino de la forma en que se almacena la contraseña y funciona el cifrado.
Algunos conceptos básicos obvios
Cuando hablamos de CRAM-MD5, MD5 o CRYPT, hablamos de cifrado unidireccional: se genera un hash. No podemos hacer eso al revés, derivar la contraseña en texto claro del hash es (aparte de la fuerza bruta) imposible y no realista para ningún procedimiento de inicio de sesión. Entonces, con la contraseña almacenada usando uno de estos hashes, solo podemos validarla cuando la tenemos en texto sin formato, razón por la cual configurar $rcmail_config['imap_auth_type'] = 'PLAIN'
en la configuración de roundcube "resuelve" esto.
Opciones
- Quédese con SIMPLE/INICIAR SESIÓN:
- está bien con Roundcube e IMAP en el mismo servidor, siempre que los usuarios se conecten con HTTPS
- bien con el acceso desde clientes de correo, siempre y cuando la conexión sea segura (IMAPS/POP3S/SMTPS)
- un agujero de seguridad con tráfico no cifrado
- Almacene las contraseñas en texto plano
- Se pueden utilizar todo tipo de mecanismos de autenticación, lo cual es una ventaja.
- tener todas las contraseñas de sus usuarios en texto plano en un archivo/base de datos es absolutamente imposible
- Almacene las contraseñas usando CRAM-MD5
- le ofrece al menos CRAM-MD5, que la mayoría de los clientes admiten
- todavía deja la opción de usar PLAIN/LOGIN
- debe estar respaldado por sus herramientas administrativas
- Es posible que algunos de ellos necesiten volver a herramientas de terceros para el cifrado (por ejemplo, PostfixAdmin usa
/usr/sbin/doveadm pw
), lo que hace que la contraseña de texto claro aparezca brevemente en la lista de procesos cada vez que se invoca.
- Es posible que algunos de ellos necesiten volver a herramientas de terceros para el cifrado (por ejemplo, PostfixAdmin usa
- otras herramientas de terceros (complementos/complementos, etc.) pueden ser un problema
Todavía estoy luchando por saber qué camino tomar, y solo el número 2 está definitivamente descartado (no quiero hacer regalos a posibles piratas informáticos;)
Respuesta2
Creo que el problema es intentar utilizar el mecanismo de autenticación CRAM-MD5 con el campo "cripta" de la base de datos.
En tu registro:
Dec 31 20:14:45 localhost authdaemond: SQL query: SELECT id, **crypt**, '', uid, gid, home, concat(home,'/',maildir), '', name, '' FROM users WHERE id = '[email protected]' AND (enabled=TRUE)
Dec 31 20:14:45 localhost authdaemond: authpgsql: REJECT - try next module
Dec 31 20:14:45 localhost authdaemond: FAIL, all modules rejected
Dec 31 20:14:45 localhost imapd-ssl: LOGIN FAILED, **method=CRAM-MD5**, ip=[::ffff:127.0.0.1]
Eso significa que, en la consulta SQL, obtiene el campo "cripta", el authdaemond no puede leer la contraseña simple, entonces el CRAM-MD5 no funciona. Las contraseñas de texto sin cifrar permiten implementar la autenticación CRAM-MD5.
Arreglar:
- Puede cambiar el mecanismo de autenticación del cliente (roundcube) a SIMPLE o INICIAR SESIÓN. Esto es compatible con el campo de cripta.
- Cambie en el archivo authpgsqlrc. Configure PGSQL_CLEAR_PWFIELD para buscar el campo "borrar" y comente PGSQL_CRYPT_PWFIELD. Entonces, authdaemond realizará una consulta SQL para encontrar la contraseña en texto claro.
Espero que esto funcione para ti.
Respuesta3
Quizás sea la configuración de roundcube:
No estoy al 100%, pero la configuración predeterminada de roundcube usa autenticación "PLAIN", por lo que puedes cambiarla en el archivo de configuración y probar:
// IMAP AUTH type (DIGEST-MD5, CRAM-MD5, LOGIN, PLAIN or null to use
// best server supported one)
// $rcmail_config['imap_auth_type'] = LOGIN;
$rcmail_config['imap_auth_type'] = null;
En las versiones antiguas (0.3.1) de roundcube solo tienes "auth", "plain" o "check", así:
// IMAP auth type. Can be "auth" (CRAM-MD5), "plain" (PLAIN) or "check" to auto detect.
// Optional, defaults to "check"
$rcmail_config['imap_auth_type'] = "auth";
Depende de la versión que esté utilizando.