1つのIPアドレスで2つの別々のドメインをホストしようとしています。 STARTTLSコマンドから、どの証明書が要求されているかを判別し、ドメインに基づいて別のメールサーバーに転送できるようにしたい。
これはRFCからは不可能のようですが、単一のIPアドレスでこのようなことを実現できる方法は他にありますか?
いいえ、SMTPは電子メール通信パス全体を電子メールでトレースするように設計されており、各接続は終了して電子メールを中継します。トランスポートマップ(postfix用)を使用して、MTAホスト名ではなく電子メールアドレスで宛先を制御する必要があります。
ローカルで両方のドメインの電子メールを受信している場合は、電子メールサーバーがそれを処理する必要があります。この単一のIPが内部で他の2つのサーバーに電子メールを転送している場合、トランスポートマップはPostfixサーバーに関して探しているものです。
これがアウトバウンドサーバーリレー(SMTPS)の場合、nginx/haproxyやSNIのように「プロキシ」できないため、このサーバーで両方のドメインの認証を処理する必要があります。
ドキュメントによると 、少なくともTLSAレコードがDNSで公開されている場合、PostfixはSTARTTLS
コマンドの後にTLSハンドシェイクでSNI情報を送信します。
リモートSMTPサーバーで使用可能なTLSAレコードが取得されると、PostfixSMTPクライアントはSSLクライアントのhelloメッセージでSNITLS拡張を送信します。これは、リモートSMTPサーバーがTLSAレコードと一致する証明書を提供するという約束を果たすのに役立つ場合があります。
これで十分かどうかはわかりませんが、SNIをSTARTTLS
とともに使用できること、および使用する必要があることを示しています。一部の送信者がこれを行っていない場合、私はそれらが壊れていると見なします。
さらに、 このIETFドラフト は、SNIを使用することを指定しています。
クライアントは、サーバー証明書のIDチェックでSRVクエリのDNSSEC検証ステータスを使用します。 (TLSA検証ステータスは、サーバー証明書のIDチェックには影響しません。)サーバー名表示拡張機能(TLS SNI)または関連するアプリケーションプロトコルで同等の機能を使用する必要があります。
これにはSNIは必要ありません。ほとんどのMTAは、ドメインに基づくルーティングをサポートしています。たとえば 接尾辞には路線図があります 。次のようなマップを作成します。
foo.com smtp:[mail.foo.com]
bar.com smtp:[mail.bar.com]