トラブルシューティング
Stalwart-mail+Discourse: POP3 EOF reached (again) からの議論の続きです。
@programmerjake も Discourse ⇔ Stalwart-mail を調査しているので、SMTPS で TLS エラーが発生しているか確認したいのですが。
2024-07-01T17:37:49.718793Z DEBUG common::listener: Failed to accept TLS connection: tls handshake eof context="tls" event="error" instance="smtps" protocol=Smtp remote.ip="128.140.68.114"
2024-07-01T17:37:49.899171Z DEBUG common::listener: Failed to accept TLS connection: tls handshake eof context="tls" event="error" instance="smtps" protocol=Smtp remote.ip="128.140.68.114"
Discourse 側では、エラーポップアップが表示されます。
ERROR - Net::ReadTimeout with #<TCPSocket:(closed)>
これは Ruby の OpenSSL ライブラリが TLSv1.3 をサポートしていないことに関連しているようですが、TLSv1.2 で動作するはずなので、少し無理があるように思えます。
動作するインストール
Stalwart-mail >= v0.8.3
これで、このリリースにより Stalwart-mail は Discourse とのメールの送受信をサポートするようになりました。
Stalwart-mail は、Postfix + Spamassassin + Dovecot + etc. で長年慣れ親しんできた設定の煩雑さなしに、すべてのメールニーズをカバーする単一バイナリのメールサービスです。ここでは、インストールを設定すると、ACME と LetsEncrypt による完全な TLS 自動化、SPF、DMARC、DKIM、ARC、DANE サポート(ドメインからのレポートおよびドメインへのレポートを含む)を標準で利用でき、TLSA やその他の DNS レコードもすぐに利用できます。簡単なメールクライアント設定のための自動設定と自動検出、共有フォルダ(「グループ」経由)、エイリアス、プロセス内のさまざまな段階でのすべての着信および発信メッセージに対する ManageSieve フィルター、Web 管理、2FA および TOTP サポート、OAUTH など、さらに多くの機能が利用できます。もうメールを外部化する必要はありません!
- SMTP 用にポート 587 の
submission リスナーを使用します。
- 暗黙的な TLS を無効にする(つまり、STARTTLS を使用する)
- クライアント順序の無視が無効になっていることを確認します(デフォルトまたはリスナーの TLS オプションのオーバーライド)。
- 暗黙的な TLS を使用してポート 995 の POP3 リスナーを有効にします。
Discourse
通常どおり、Submission(STARTTLS を使用)には 587、POP3s(SSL/TLS を使用)には 995 を使用するようにメールを設定します。
「いいね!」 1
nathank
(Nathan Kershaw)
2
Mailgunなどの代替となるオープンソースのものですか?それらのサービスは低容量だとかなり高価なので、それは非常に魅力的になり始めています。
独自の(仮想)マシンが必要ということですね。Discourseと同じマシンで簡単に実行できれば素晴らしいでしょう。
Stalwart Mailのインスタンスが複数のDiscourseインスタンスにサービスを提供できるかご存知ですか?
「いいね!」 1
はい、複数のドメインを簡単にサポートできます。
まずドメインを追加すると、MX(メール交換)を設定するためのDNSレコードが提供されます。すべてのドメインで同じMXが使用されます。
Stalwart-mailをDiscourseと同じマシンで実行するのは簡単はずです。どちらもTLSポート443を必要とするため、そのポートでプロキシを使用して両方のサービスに送信することになります。しかし、Discourseごとにインスタンスを1つ持つことはあまり意味がありません。2つを分離する方が、メールインフラストラクチャを簡単にスケールアップし、Discourseだけでなくより多くのニーズに対応できるため、より良いでしょう。
参考までに、CPX21(RAM 4 GB、vCPU 3 x86 AMD、ストレージ 80 GB)のHetzner VPSで、約30アカウント、12以上のドメイン、フルログオンでStalwart-mailを実行していましたが、RAMは564 MB、ストレージは7 GB(ほとんどがOS)でした。Stalwart-mailは184 MBの常駐RAM(全RAMの5%未満、仮想メモリ1.2 GB)を主張しています。
「いいね!」 1
現在、STARTTLSを使用してポート587を使用していますが、今テストしたところエラーは発生しませんでした…
また、Stalwart-mailのログでもTLSv1.3を使用しており、エラーは発生していないようです…少し変わった設定をテストしています(ローカルACMEサーバーを実行するためにpebbleを使用し、.testドメイン名を使用していますが、これは何かを壊したり修正したりするには十分ではないでしょう…)
ポート587リスナーで「TLSオプションをオーバーライドする」は使用していません…
「いいね!」 1
ここ数ヶ月、Stalwart-mail を Discourse と組み合わせて排他的に使用してきましたが、見事に機能しています。Submission (ポート 587、STARTTLS 付き) と Submissions (ポート 465、TLS 付き) の両方を使用できます。特別な設定やセットアップは必要ありません。
ただし、ドメインの DNS レコードの設定は 2 段階のプロセスであることに注意してください。
- まず、Directory にドメイン名を追加します。これにより、DNS ゾーンファイルに追加するリソースレコードが取得されます。
- DNS が更新されたら、そのドメインの TLS プロバイダーを作成します。次のホスト名を追加する必要があります:
mail、autoconfig、autodiscover、および mta-tls (ドメインを付加したもの、例: mail.example.org)。
- しばらくすると (数秒から数分)、内部 ACME プロバイダーが変更を検出し、TLS 証明書を取得します。この時点で、ドメイン構成はレコードを更新します: 新しい ID を持つ
_mta-tls RR と、すべての _tlsa レコードを選択し、ゾーンファイルに追加すれば完了です。
Stalwart-mail には、非常に強力なスパムフィルターと統合された fail2ban 機能 (認証に失敗した IP アドレスや不正な URI を要求した IP アドレスを禁止する) が付属しています。