Redirecionamento do RoundCube para falha do servidor IMAP local

2

Estou seguindo este guia para configurar um servidor de e-mail no meu servidor: link A única diferença é que este tutorial usa um banco de dados MySQL e eu usei o PostgreSQL.

Mas não consigo fazer login no RoundCube. Esta é uma mensagem que recebo no log de erros do 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)

Isso é do log do 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.

Eu tenho um usuário na minha tabela de banco de dados no Postgres. Aqui está ele:

<?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>

Eu tentei fazer login com test e [email protected] e com a senha simples aaaa e a criptografada. Só por segurança, eu também gerou a senha dentro do MySQL (usando a expressão do guia) e depois copiei o resultado no campo no Postgres. E sim, o MySQL e o Postgres estão no mesmo servidor. Aqui está a expressão que eu usei no MySQL:

select encrypt('password', CONCAT('$5$', MD5(RAND())));

Eu realmente não sei mais o que fazer, então qualquer ajuda seria apreciada. Se você precisar de mais informações, basta dizer isso.

EDITAR:

Consegui fazer o login no servidor via telnet (quando resolvi o problema do diretório de mensagens ausente). Mas ainda não consigo me conectar com o RoundCube. Aqui está a saída do 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
    
por morgoth84 31.12.2013 / 16:55

3 respostas

3

Sendo confrontado com o mesmo problema, eu fiz alguns dos nossos do Google-Foo para chegar à raiz do problema: Como Gabriel assumiu corretas em sua resposta , não é culpa do Roundcube - mas da maneira como a senha é armazenada e a criptografia funciona.

Alguns princípios óbvios

Quando falamos de CRAM-MD5, MD5 ou CRYPT, estamos falando de criptografia unidirecional: Um hash é gerado. Não podemos fazer o contrário, derivar a senha de texto não criptografado do hash é (além de força bruta) impossível e não realista para qualquer procedimento de login. Portanto, com a senha armazenada usando um desses hashes, só podemos validá-la quando ela estiver em texto simples - e é por isso que definir $rcmail_config['imap_auth_type'] = 'PLAIN' na configuração do roundcube "resolve" isso.

Opções

  1. Fique com o PLAIN / LOGIN:
    • bem com Roundcube e IMAP no mesmo servidor, contanto que os usuários se conectem com HTTPS
    • bem com acesso de clientes de e-mail, desde que a conexão esteja segura (IMAPS / POP3S / SMTPS)
    • uma falha de segurança com tráfego não criptografado
  2. Armazenar as senhas em texto simples
    • todos os tipos de mecanismos de autenticação podem ser usados, o que é um pro
    • ter todas as senhas de seus usuários em texto simples em um arquivo / banco de dados é um absoluto não-ir
  3. Armazenar as senhas usando o CRAM-MD5
    • dá a você pelo menos CRAM-MD5, que a maioria dos clientes suporta
    • ainda deixa a opção de usar PLAIN / LOGIN
    • deve ser suportado por suas ferramentas administrativas
      • alguns deles talvez precisem reverter para ferramentas de terceiros para criptografia (por exemplo, o PostfixAdmin usa /usr/sbin/doveadm pw ), o que faz com que a senha de texto não criptografado apareça logo na lista de processos sempre que for invocada
    • outras ferramentas de terceiros (plug-ins / addons etc.) podem ser um problema

Ainda estou lutando com qual caminho seguir - com apenas o # 2 definitivamente descartado (não quero apresentar presentes para hackers em potencial;)

    
por 11.08.2015 / 19:04
1

Eu acho que o problema é tentar usar o mecanismo de autenticação CRAM-MD5 com o campo "crypt" do banco de dados.

No seu log:

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]

Isso significa que, na consulta SQL, você obtém o campo "crypt", o authdaemond não pode ler a senha simples, então o CRAM-MD5 não funciona. Senhas de texto não criptografado permitem que a autenticação CRAM-MD5 seja implementada.

Para corrigir:

  1. Você pode alterar o mecanismo de autenticação do cliente (roundcube) para PLAIN ou LOGIN. Isso é compatível com o campo da cripta.
  2. Altere no arquivo authpgsqlrc. Configure PGSQL_CLEAR_PWFIELD para localizar o campo "clear" e comentar PGSQL_CRYPT_PWFIELD. Então o authdaemond fará uma consulta SQL para encontrar a senha em texto claro.

Espero que este trabalho seja para você.

    
por 24.01.2014 / 12:58
0

Talvez seja a configuração do roundcube:

Eu não sou 100%, mas a configuração padrão do roundcube usa a autenticação "PLAIN", para que você possa alterá-la no arquivo de configuração e testar:

// 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;

Nas versões antigas (0.3.1) do roundcube você só tem "auth", "plain" ou "check", assim:

// 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 da versão que você está usando.

    
por 22.01.2014 / 18:47