web-dev-qa-db-ja.com

リモートimap接続を確立できないのはなぜですか?

リモートのCentOS7 Webサーバーは、インターネット上の他の場所から[email protected]宛てに送信された電子メールを正常に受信できます。同じCentOS7サーバーで実行されているアプリは、JavaMailを使用して、着信メッセージが保存されるdovecotMaildirへのIMAP接続を確立できます。 では、devboxで実行されているThunderbirdがインターネット経由でリモートCentOS 7サーバーにIMAP接続できるようにするには、何を追加する必要がありますか?

これまで、firewalldのパブリックゾーンにimapsを追加しました。また、dovecot.confにprotocols = imap pop3という行が含まれていることも確認しました。 mydomain.comをホスト名、ポート993、SSLを通常のパスワードとして、受信メールにIMAPを使用するようにThunderbirdを構成します。また、ドメインレジストラのWebサイトで、dnsmxエントリがmydomain.comをmxアドレスとして使用していることを確認しました。

[〜#〜]編集[〜#〜]

@Celadaの質問に答えるために、Thunderbirdがログイン情報を確認しようとしたときに、サーバーへの接続に失敗したことを示すダイアログを投稿しました。 imapにポート993、smtpにポート25を指定した場合、およびSSL接続を指定した場合にも同じ情報が得られます。また、.mydomain.comをmydomain.comに変更しても、ログインの失敗がなくなるわけではありません。

次にfirewalldログにアクセスして、結果を投稿します。私の理解では、firewalldは自動的にログに記録されないため、いくつかの豊富なルールを開発する必要があります。適切な構文を特定するには、時間がかかる場合があります。

サーバー構成の問題だと思います。クライアントの問題であるという印象を与えたくなかったので、Thunderbirdダイアログを表示することを躊躇しました。 Thunderbirdをセットアップする前に、サーバー構成を決定/セットアップする必要があると思います。

EDIT#2

@Celadaの提案に従って、telnet localhost 143と入力すると、次の応答が返されました。

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE STARTTLS LOGINDISABLED] Dovecot ready.  

また、telnet localhost 25と入力すると、次の応答が返されます。

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mydomain.com ESMTP Postfix

これらのtelnetの結果は、firewalldがimapとsmtpを間違ったポートにマッピングしていることを示していたので、nano /usr/lib/firewalld/services/imaps.xmlと入力して、ポートを993から143に変更しました。次にnano /usr/lib/firewalld/services/smtp.xmlと入力して、ポートを25に変更しました。

次に、firewall-cmd --reloadと入力して、変更が有効になったことを確認しました。

次に、新しい情報をThunderbirdに入力してテスト接続を再試行しましたが、次のダイアログボックスに失敗メッセージが表示されました。

ドメインレジストラでDNSのMXレコードを確認したところ、スクリーンショットに示すように、正確にmydomain.comであることに注意してください。これがどのように無関係かはわかりません。確認したところ、サーバーのホスト名もmydomain.comです。代わりに正しいメールサーバー名を確認するためにチェックする必要がある他のリソースはありますか?

また、dovecotとpostfixは標準構成でインストールされていることに注意してください。 SSLがデフォルト構成の一部であった可能性がありますが、これらを使用するようにsslを明示的に構成しませんでした。ただし、上のダイアログボックスの設定を変更し、SSLフィールドで指定されたNoneで接続をテストしましたが、同じ失敗メッセージが表示されました。

上記の最新(下)のスクリーンショットの後の/ var/log/maillogのdovecotログインは次のとおりです。

Feb 27 00:52:57 mydomain dovecot: imap-login: Aborted login (no auth attempts in 0 secs): user=<>, rip=my.DEVBOX.ip.addr, lip=my.SERVER.ip.addr, session=<YsH2egsQAABi9AyF>

EDIT#3

@Bandramiのアドバイスに従って、dovecot.confのprotocols = imap pop3protocols = imaps popsに変更しました。次に、/usr/lib/firewalld/services/imaps.xmlがポート993を指定していることを確認しました。firewall-cmd --reloadsystemctl stop dovecot、次にsystemctl start dovecotと入力して、サーバー上の関連プロセスを再起動しました。次に、ポート993とSSL/TLSを指定するようにThunderbirdテストを構成し、Thunderbirdで接続テストを再実行しましたが、Thunderbirdでも同じ結果が得られました。

ただし、鳩小屋のログはもう少し明確で、次のとおりです。

Feb 27 01:18:20 mydomain dovecot: config: Warning: NOTE: You can get a new clean config file with: doveconf -n > dovecot-new.conf
Feb 27 01:18:20 mydomain dovecot: config: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:26: 'imaps' protocol can no longer be specified (use protocols=imap). to disable n$
Feb 27 01:18:38 mydomain dovecot: imap-login: Disconnected (no auth attempts in 18 secs): user=<>, rip=my.SERVER.ip.addr, lip=127.0.0.1, TLS handshaking: SSL_accept() failed: error:14$
Feb 27 01:19:15 mydomain dovecot: master: Warning: Killed with signal 15 (by pid=1 uid=0 code=kill)
Feb 27 01:19:15 mydomain dovecot: anvil: Warning: Killed with signal 15 (by pid=1 uid=0 code=kill)
Feb 27 01:19:15 mydomain dovecot: ssl-params: Warning: Killed with signal 15 (by pid=1 uid=0 code=kill)
Feb 27 01:19:15 mydomain dovecot: config: Warning: Killed with signal 15 (by pid=1 uid=0 code=kill)
Feb 27 01:19:15 mydomain dovecot: auth: Error: read(anvil-auth-penalty) failed: EOF
Feb 27 01:19:15 mydomain dovecot: auth: Error: net_connect_unix(anvil-auth-penalty) failed: Permission denied
Feb 27 01:19:15 mydomain dovecot: auth: Warning: Killed with signal 15 (by pid=1 uid=0 code=kill)
Feb 27 01:19:15 mydomain dovecot: log: Warning: Killed with signal 15 (by pid=1 uid=0 code=kill)
Feb 27 01:19:22 mydomain dovecot: master: Dovecot v2.2.10 starting up for pop3, imap (core dumps disabled)
Feb 27 01:19:44 mydomain dovecot: imap-login: Disconnected (no auth attempts in 15 secs): user=<>, rip=my.SERVER.ip.addr, lip=127.0.0.1, TLS handshaking: SSL_accept() failed: error:14$
Feb 27 01:23:55 mydomain postfix/qmgr[30121]: 2C915811BD1C: from=<[email protected]>, size=5316, nrcpt=1 (queue active)
Feb 27 01:23:58 mydomain postfix/smtp[27144]: 2C915811BD1C: to=<address@domain_that_sends_to_this_addresson_server.com>, relay=none, delay=290245, delays=290241/0.02/3.6/0, dsn=4.4.3, status=deferred (Host or domain$
Feb 27 01:24:41 mydomain dovecot: config: Warning: NOTE: You can get a new clean config file with: doveconf -n > dovecot-new.conf
Feb 27 01:24:41 mydomain dovecot: config: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:26: 'imaps' protocol can no longer be specified (use protocols=imap). to disable n$
Feb 27 01:24:41 mydomain dovecot: config: Warning: NOTE: You can get a new clean config file with: doveconf -n > dovecot-new.conf
Feb 27 01:24:41 mydomain dovecot: config: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:26: 'imaps' protocol can no longer be specified (use protocols=imap). to disable n$
Feb 27 01:24:53 mydomain dovecot: imap-login: Disconnected (no auth attempts in 12 secs): user=<>, rip=my.SERVER.ip.addr, lip=127.0.0.1, TLS handshaking: SSL_accept() failed: error:14$
Feb 27 01:25:05 mydomain dovecot: imap-login: Aborted login (no auth attempts in 1 secs): user=<>, rip=my.DEVBOX.ip.addr, lip=my.SERVER.ip.addr, TLS, session=<Kdrl7QsQxwBi9AyF>
Feb 27 01:27:16 mydomain dovecot: master: Warning: Killed with signal 15 (by pid=1 uid=0 code=kill)
Feb 27 01:27:16 mydomain dovecot: anvil: Warning: Killed with signal 15 (by pid=1 uid=0 code=kill)
Feb 27 01:27:16 mydomain dovecot: log: Warning: Killed with signal 15 (by pid=1 uid=0 code=kill)
Feb 27 01:27:24 mydomain dovecot: master: Dovecot v2.2.10 starting up for pop3, imap (core dumps disabled)
Feb 27 01:27:24 mydomain dovecot: config: Warning: NOTE: You can get a new clean config file with: doveconf -n > dovecot-new.conf
Feb 27 01:27:24 mydomain dovecot: config: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:26: 'imaps' protocol can no longer be specified (use protocols=imap). to disable n$

EDIT#4

@Celadaのさらなる説明に従って、Thunderbirdのテストに使用しているローカルのdevboxにtelnet imap.mydomain.com 143と入力すると、ターミナルは次のように応答しました。

Trying my.SERVER.ip.addr...
Connected to imap.mydomain.com.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE STARTTLS LOGINDISABLED] Dovecot ready.    

次に、devboxターミナルでopenssl s_client -CApath /etc/ssl/certs -starttls imap -port 143 -Host imap.mydomain.comと入力すると、ターミナルは印刷して応答しました ファイル共有サイトへのこのリンクをクリックすると詳細が表示されます

私の完全な dovecot.confは、このリンクをクリックしてファイル共有サイトで読むことができます

EDIT#5

@Celadaの提案に従って、t1 login USERNAME PASSWORDの後に. OK Pre-login capabilities listed, post-login capabilities have more.と入力すると、端末は次のように応答しました。

* CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS SPECIAL-USE BINARY MOVE
t1 OK Logged in

ただし、その後、Thunderbirdのログインテストを繰り返し、Thunderbirdがポート143と「通常のパスワード」を使用するように強制することを確認しました。これを行ったとき、ThunderbirdはSSLオプションとして「自動検出」を強制し、「再テスト」ボタンをクリックすると同じエラーメッセージが表示されました。

"Thunderbird failed to find the settings for your email account."  
3
CodeMed

コメントとチャットを何度か行ったり来たりした後、OPの問題は解決されました。 IMAPサーバーはmydomain.comではなくimap.mydomain.comとして指定する必要がありましたが、何らかの理由でこれは高度なアカウント設定を使用して設定した場合にのみ機能し、アカウント作成ダイアログボックス。

この状況固有の解決策に言及することに加えて、この質問への回答で私が言える最も有用なことは、後でこれを読んでいる他の誰かに役立つことを期待して、トピックに関するいくつかの一般的なトラブルシューティングのヒントをリストすることだと思います。

  • アカウント設定を自動検出するThunderbirdの機能は素晴らしく、ISPがサーバータイプ(POPまたはIMAP)からポート番号、認証プロトコルまですべてを含む長い指示を提供しなければならなかった電子メールアカウント設定の暗い時代を大幅に改善しました。理想的な世界では、ユーザーは自分のメールアドレスとパスワードを指定するだけでよく、サーバー名を推測するだけです(結局、Web経由でGmailにアクセスするために必要なのはそれだけです...)。

    ただし、自動検出機能が機能しない場合は、有用なエラーメッセージがほとんど表示されません。 「Thunderbirdがメールアカウントの設定を見つけられませんでした」は基本的に何の意味もありません。

    ヒント:Thunderbirdの自動検出機能が機能しない場合は、時間を無駄にしないでください。機能するまで、すべてを手動で指定するようにしてください。次に、それが機能するようになったら、自動検出が失敗した理由を見つけて、次のユーザーのために機能するように修正することに集中できます。

  • 可能であれば、IMAPには常にポート143を使用してください。 IMAP over SSL用のポート993もありますが、最近のすべてのクライアントとサーバーは、暗号化されていない接続を暗号化された接続にアップグレードするためにSTARTTLSをサポートしているため、IMAPのさまざまなポートについて心配する必要はもうありません。ポート143の接続は、可能であれば自動的に暗号化されます。

  • (IMAPとは関係ありませんが、とにかく)可能であれば、SMTPには常にポート587を使用してください。 SMTPは常にポート25で実行されていましたが、ISPはスパムのためにポート25をブロックすることがよくあります。ポート587は、MUAとメールサーバー間のSMTP通信用に特別に指定されており、必要に応じてSMTP AUTHとSTARTTLSをサポートすることが期待されており、すでに長年存在しています。他のポートを使用するようにMUAを構成することについて心配する必要はほとんどありません。

  • Dovecotは、暗号化されていない接続と暗号化された接続を異なる方法で処理します。これは、ローカル接続(localhost127.0.0.1、または::1)とリモート接続にも適用される場合があります。最も一般的なタイプの認証は、暗号化されていないリモート接続では安全ではないため、Dovecotはそれらを提供していません。

    したがって、コマンドラインを使用してテストおよびデバッグする場合、実際のMUAを最も厳密にシミュレートするには、リモートでテストし、STARTTLSを使用して接続を暗号化します。そうしないと、認証がtelnetで正常に機能し、MUAで機能しない理由がわからない場合があります。

  • telnet(暗号化されていない接続の場合)またはopenssl s_client(暗号化された接続の場合)を使用してテストします

    MUAに受け入れさせようとしているのと同じホスト名を使用します。 MUAでメールサーバーとして指定されたときにimap.mydomain.comまたはmail.mydomain.com、あるいは単にmydomain.comを機能させたい場合は、コマンドラインから同じホスト名を使用してテストします。また、ホスト名解決エラーが発生した場合は、問題がDNSにあることがわかります。

    openssl s_client -starttls imap -port 143 -CApath /etc/ssl/certs -Host <hostname>
    
  • Dovecotサーバーで構成されたSSL証明書に問題がある場合、Thunderbirdはそれについて警告しますが、それでも接続は許可されます。完全に接続できない場合は、証明書に問題がない可能性があります。

    もちろん、本番環境に移行する準備ができたら、承認された認証局によって署名された証明書を使用し、証明書の名前をMUAで構成されるIMAPサーバー名と一致させる必要があります。

  • テストに役立つIMAPコマンド。 telnet(暗号化されていない)またはopenssl s_client(暗号化されている)で開くIMAPセッションにこれらを入力します

    tag1 LOGOUT
    tag2 LOGIN <username> <password>
    tag3 CAPABILITIES
    tag4 LIST "" "*"
    
3
Celada