RoundCube のローカル IMAP サーバーへのログインが失敗する

RoundCube のローカル IMAP サーバーへのログインが失敗する

私は自分のサーバーにメール サーバーを設定するために、このガイドに従っています:ポストフィックス5 唯一の違いは、このチュートリアルでは MySQL データベースを使用し、私は PostgreSQL を使用していることです。

しかし、RoundCube にログインできません。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)

これは 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.

Postgres の DB テーブルにユーザーが 1 人います。そのユーザーは次のとおりです。

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

と の両方でログインを試みました。testまた[email protected]、プレーンaaaaパスワードと暗号化パスワードの両方でログインしてみました。念のため、MySQL 内でパスワードも生成し (ガイドの式を使用)、その結果を Postgres のフィールドにコピーしました。そして、はい、MySQL と Postgres は同じサーバー上にあります。MySQL で使用した式は次のとおりです。

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

他に何をすればいいのか本当に分からないので、どんな助けでもいただければ幸いです。さらに情報が必要な場合は、その旨をお伝えください。

編集:

telnet 経由でサーバーにログインできました (メール ディレクトリが見つからない問題を修正した後)。しかし、まだ RoundCube に接続できません。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

答え1

まったく同じ問題に直面したので、私はGoogle-Fooを数回試して問題の根本を突き止めました。ガブリエル正しいと想定される彼の答えの中でこれは Roundcube のせいではなく、パスワードの保存方法と暗号化の動作方法のせいです。

明らかな基本事項はほとんどない

CRAM-MD5、MD5、または CRYPT について話す場合、一方向暗号化について話していることになります。つまり、ハッシュが生成されます。逆のことはできません。ハッシュからクリアテキスト パスワードを導き出すことは (ブルート フォース攻撃を除いて) 不可能であり、ログイン手順で現実的ではありません。したがって、これらのハッシュのいずれかを使用して保存されたパスワードでは、プレーンテキストの場合にのみ検証できます。これが、$rcmail_config['imap_auth_type'] = 'PLAIN'roundcube 構成で設定することでこの問題が「解決」される理由です。

オプション

  1. PLAIN/LOGIN を使い続ける:
    • ユーザーがHTTPSで接続する限り、同じサーバー上でRoundcubeとIMAPを使用しても問題ありません。
    • 接続が保護されている限り、メールクライアントからのアクセスは問題ありません (IMAPS/POP3S/SMTPS)
    • 暗号化されていないトラフィックによるセキュリティホール
  2. パスワードをプレーンテキストで保存する
    • あらゆる種類の認証メカニズムが使用できるのが利点です
    • すべてのユーザーのパスワードをファイル/データベースにプレーンテキストで保存することは絶対に避けるべきです。
  3. CRAM-MD5を使用してパスワードを保存する
    • 少なくともCRAM-MD5が提供されます。これはほとんどのクライアントがサポートしています。
    • PLAIN/LOGINを使用するオプションはまだ残っています
    • 管理ツールでサポートされている必要があります
      • それらの中には、暗号化のためにサードパーティのツール(PostfixAdminなど/usr/sbin/doveadm pw)に戻す必要があるものもあり、呼び出されるたびにクリアテキストのパスワードがプロセスリストにすぐに表示されます。
    • 他のサードパーティツール(プラグイン/アドオンなど)が問題になる可能性がある

どの道を進むべきかまだ悩んでいます。確実に除外されているのは 2 番だけです (潜在的なハッカーにプレゼントをあげたくありません ;)

答え2

問題は、DB の「crypt」フィールドで CRAM-MD5 認証メカニズムを使用しようとしていることだと思います。

ログ内:

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]

つまり、SQL クエリで「crypt」フィールドを取得すると、authdaemond はプレーン パスワードを読み取ることができず、CRAM-MD5 は機能しません。クリアテキスト パスワードを使用すると、CRAM-MD5 認証を実装できます。

修正するには:

  1. クライアント (roundcube) の認証メカニズムを PLAIN または LOGIN に変更できます。これは crypt フィールドと互換性があります。
  2. authpgsqlrc ファイルを変更します。PGSQL_CLEAR_PWFIELD を設定して「クリア」フィールドを見つけ、PGSQL_CRYPT_PWFIELD をコメントします。これにより、authdaemond は SQL クエリを実行してクリア テキスト パスワードを見つけます。

これがお役に立つことを願います。

答え3

おそらくroundcubeの設定は次のようになります:

100% ではありませんが、roundcube のデフォルト設定では「PLAIN」認証が使用されるため、設定ファイルで変更してテストすることができます。

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

roundcube の古いバージョン (0.3.1) では、次のように「auth」、「plain」、または「check」のみを使用できます。

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

使用しているバージョンによって異なります。

関連情報