willemb2
(Willemb2)
2019 年 9 月 26 日午後 4:53
1
自宅のローカルミニPC(Ubuntu 16.04 LTS)でテスト環境(現在 2.4.0.beta4)を運用しています。素晴らしい30 分インストールガイド を使用してインストールしました。FQDN も設定されています。ISP のメールボックスから SMTP ポート 587 を使用して平文認証でメールを送信するのは、1 年以上問題なく動作していました。
最近、しばらく「新バージョンが利用可能」などのメール通知が届いていないことに気づきました。管理画面の [メール > スキップ] を確認すると、すべてのメールが以下のようなエラーでスキップされていることがわかります。
550-Bad HELO: localhost.localdomain does not exist - Please see RFC 2821
メールボックスの履歴を遡ると、この問題は 2.4.0.beta2 から発生していた可能性もあります。ただし、ほぼ同時期(2019 年 7 月末頃)に ISP のポリシーが変更された可能性もあります。どこから手をつければよいかわかりません。この localhost.localdomain はどこから来るのでしょうか?インストール中は app.yml を編集しただけで、DISCOURSE_HOSTNAME には正しく FQDN が表示されています。
その localhost.localdomain は、お使いの ISP から提供されているもののようです。Mailgun で試してみてもよろしいでしょうか?
willemb2
(Willemb2)
2019 年 9 月 26 日午後 8:10
3
Mailgunとは聞いたことがありません。mailgun.com 、つまり「トランザクショナルメール API サービス」のことでしょうか?私の知識レベルを申し上げますと、API が何だか大まかに理解している程度で、実際に使う方法までは分かりません。ただ、別の ISP の別のメールボックスへ SMTP を使って送信してみることは試してみられます。明日ここで報告します。
Mailgun に登録すると、SMTP 認証情報が提供されます。登録時の案内に従えば、きっとご自身で設定できるはずです。
willemb2
(Willemb2)
2019 年 9 月 27 日午後 7:45
5
@itsbhanusharma 、@jtbayly ありがとうございます!Mailgun を通じてテストメッセージを送信することができました。問題は、私の ISP の SMTP サーバーにある新しいポリシーでした。Mailgun を引き続き使用するかもしれません。
willemb2
(Willemb2)
2019 年 9 月 30 日午後 2:25
6
さらに調査を行いました。なぜなら、本番用のフォーラムでMailgunを使用できないからです。
Mailgun経由で受信したメールのヘッダーには、まだ以下のような記述があります:
Received: from localhost.localdomain
HELOはSMTPダイアログの最初のコマンドです(出典 )。
本来は以下のような形式であるべきです:
HELO discourse.mydomain.tld
一部のSMTPサーバー(Postfixなど)では、クライアントのIPアドレスとこれを照合するオプションが用意されています。localhost.localdomainはSMTPサーバーのIPアドレスに解決され、おそらくそのホストファイルに登録されています。ISPがスパム対策の一環としてこれを有効にしているようです。
Mailgunではこのチェックを実行しないため動作しますが、それでも「不適切なHELO」という事実は変わりません。
比較のため、同じシステム上でメールクライアント(Sylpheed)を使ってメールを送信してみました。これは動作し、ISPのメールボックスでも問題ありませんでした。その際、以下のようなHELOが使用されているようです:
HELO HL80L
HL80Lは私のローカルネットワーク名です。完全修飾ドメイン名(FQDN)ではありませんが、少なくともISPのサーバーにとっては明らかな偽物とは見なされないようです。
したがって、これは改善が必要な事項かもしれません。ただし免責事項:私はSMTPの専門家ではありません。
willemb2
(Willemb2)
2019 年 9 月 30 日午後 3:43
7
追伸:ISP のメールボックスを介して、リレーとして MTA を間に挟むことで、再び動作するようにしました。これは NAS 上の Postfix ベースのアプリです。これは HELO mydomain.tld を使用しています。
gerhard
(Gerhard Schlager)
2019 年 10 月 1 日午前 4:47
8
Debian 10 への移行または Rails 6 へのアップグレード中に何か問題が発生したか確認します。それまでの間、app.yml で DISCOURSE_SMTP_DOMAIN を設定すれば動作するはずです。SMTP ドメインが明示的に設定されていない場合は、DISCOURSE_HOSTNAME の値をデフォルトとするのが良さそうですね。
willemb2
(Willemb2)
2019 年 10 月 1 日午後 2:13
10
@gerhard さん、ありがとうございます!app.yml には DISCOURSE_SMTP_DOMAIN が存在しませんでしたが、深呼吸をして追加しました。すると、確かにこれで解決しました。ISP のメールボックスを再度使えるようになりました。受信側では、ヘッダーに以下のような記載が見つかります:
Received: from XXXXXXX.cable.dynamic.v4.ziggo.nl ([XX.XX.XX.X] helo=mydomain.tld)
by smtp7.mnd.mail.iss.as9143.net with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
(Exim 4.90_1)
その間に、RFC 2821 およびその後継である RFC 5321 第 4.1.4 節 の両方で、以下のように定められていることを学びました:
SMTP サーバーは、EHLO コマンドのドメイン名引数が実際にクライアントの IP アドレスに対応しているか検証してもよい。ただし、検証に失敗した場合でも、サーバーはその理由だけでメッセージの受信を拒否してはならない。検証試行で得られた情報は、ログ記録および追跡目的のために使用される。なお、この禁止事項はパラメータとその IP アドレスとの一致にのみ適用される。受信接続またはメールメッセージの拒否に関するより詳細な議論については、第 7.9 節を参照のこと。
しかし、Postfix や Exim など多くの MTA には、依然としてその動作を行うためのオプション設定が存在しているようです。おそらく、管理者たちはスパム対策の戦いの中でこの機能を有効にしているのでしょう。