Solaris のシステム管理 (ネットワークサービス)

sendmail の version 8.13 で TLS を使用して SMTP を実行するためのサポート

SMTP サーバーとそのクライアント間の通信は通常、どちらの側でも制御されたり信頼されたりしません。このようにセキュリティーが存在しないことにより、第三者は、サーバーとクライアントの間の通信を監視し、変更することさえ可能です。Solaris 10 1/06 以降のリリースでは、SMTP は sendmail の version 8.13 で Transport Layer Security (TLS) を使用して、この問題を解決できます。これにより SMTP サーバーおよびクライアントに対するサービスが拡張され、次の機能が実現されます。


注 –

TLS の実装は Secure Sockets Layer (SSL) プロトコルに基づいています。


STARTTLS は、TLS を使用して、セキュリティー保護された SMTP 接続を開始する SMTP キーワードです。このセキュリティー保護された接続は、2 台のサーバーの間、またはサーバーとクライアントの間で行われます。セキュリティー保護された接続は、次のように定義されます。

クライアントが STARTTLS コマンドを発行すると、サーバーは次のいずれかを使用して応答します。

220 応答では、クライアントが TLS ネゴシエーションを開始する必要があります。501 応答は、クライアントが STARTTLS コマンドを正しく発行しなかったことを示します。STARTTLS はパラメータなしで発行されます。454 応答では、クライアントがルールセットの値を適用して、接続を受け入れるか維持するかどうかを決定する必要があります。

インターネットの SMTP インフラストラクチャーを維持するため、公的に使用されるサーバーは TLS ネゴシエーションを要求してはならないことに注意してください。ただし、私的に使用されるサーバーは、クライアントが TLS ネゴシエーションを実行するよう要求しても構いません。このような場合、サーバーは次のような応答を返します。


530 Must issue a STARTTLS command first

530 応答は、 STARTTLS コマンドを発行して接続を確立するようクライアントに指示します。

認証とプライバシーのレベルが不十分である場合、サーバーまたはクライアントは接続を拒否できます。また、多くの SMTP 接続はセキュリティー保護されていないため、サーバーとクライアントはセキュリティー保護されていない接続を維持する場合があります。接続を維持するか拒否するかどうかは、サーバーとクライアントの構成により決まります。

TLS を使用して SMTP を実行するためのサポートは、デフォルトでは有効になっていません。TLS が有効になるのは、SMTP クライアントが STARTTLS コマンドを発行した場合です。SMTP クライアントがこのコマンドを発行する前に、sendmail が TLS を使用できるようにする証明書を設定する必要があります。「TLS を使用するよう SMTP を構成する」を参照してください。この手順には、新しい構成ファイルのオプションの定義と、sendmail.cf ファイルの再構築が含まれることに注意してください。

TLS を使用して SMTP を実行するための構成ファイルのオプション

次の表で、TLS を使用して SMTP を実行するために使用される構成ファイルのオプションを説明します。これらのオプションを宣言する場合は、次の構文のどれかを使用します。

表 14–13 TLS を使用して SMTP を実行するための構成ファイルのオプション

オプション 

説明 

CACertFile

m4 名 : confCACERT

引数 : filename

デフォルト値 : 未定義 

1 つの CA 証明書を含むファイルを指定します。 

CACertPath

m4 名 : confCACERT_PATH

引数 : path

デフォルト値 : 未定義 

複数の CA の証明書が含まれるディレクトリへのパスを指定します。 

ClientCertFile

m4 名 : confCLIENT_CERT

引数 : filename

デフォルト値 : 未定義 

クライアントの証明書が含まれるファイルを指定します。sendmail がクライアントとして動作する場合にこの証明書が使用されることに注意してください。

ClientKeyFile

m4 名 : confCLIENT_KEY

引数 : filename

デフォルト値 : 未定義 

クライアントの証明書に属する秘密鍵が含まれるファイルを指定します。 

CRLFile

m4 名 : confCRL

引数 : filename

デフォルト値 : 未定義 

X.509v3 認証に使用される、証明書の失効ステータスが含まれるファイルを指定します。 

DHParameters

m4 名 : confDH_PARAMETERS

引数 : filename

デフォルト値 : 未定義 

Diffie-Hellman (DH) パラメータが含まれるファイルを指定します。 

RandFile

m4 名 : confRAND_FILE

引数 : file:filename または egd:UNIX socket

デフォルト値 : 未定義 

file: 接頭辞を使用してランダムデータが含まれるファイルを指定するか、egd: 接頭辞を使用して UNIX ソケットを指定します。Solaris OS は乱数生成デバイスをサポートしているため、このオプションを指定する必要はありません。random(7D) のマニュアルページを参照してください。

ServerCertFile

m4 名 : confSERVER_CERT

引数 : filename

デフォルト値 : 未定義 

サーバーの証明書が含まれるファイルを指定します。sendmail がサーバーとして動作する場合にこの証明書が使用されます。

Timeout.starttls

m4 名 : confTO_STARTTLS

引数 : amount of time

デフォルト値 : 1h

STARTTLS コマンドに対する応答を SMTP クライアントが待機する時間を設定します。

TLSSrvOptions

m4 名 : confTLS_SRV_OPTIONS

引数 : V

デフォルト値 : 未定義 

サーバーがクライアントから証明書を要求するかどうかを決定します。このオプションが V に設定されている場合、クライアント検証は行われません。

sendmail で SMTP による TLS の使用をサポートできるようにするには、次のオプションを定義してください。

そのほかのオプションは必須ではありません。

TLS を使用して SMTP を実行するためのマクロ

次の表で、STARTTLS コマンドにより使用されるマクロを説明します。

表 14–14 TLS を使用して SMTP を実行するためのマクロ

マクロ 

説明 

${cert_issuer}

証明書の発行元である認証局 (CA) の識別名 (DN) を保持します。 

${cert_subject}

cert subject と呼ばれる証明書の DN を保持します。

${cn_issuer}

cert issuer である CA の共通名 (CN) を保持します。

${cn_subject}

cert subject と呼ばれる証明書の CN を保持します。

${tls_version}

接続に使用される TLS のバージョンを保持します。 

${cipher}

接続に使用される (cipher suite と呼ばれる) 暗号アルゴリズムのセットを保持します。

${cipher_bits}

接続に使用される対称暗号化アルゴリズムのキーの長さをビット単位で保持します。 

${verify}

提示された証明書の検証結果を保持します。取りうる値は次のとおり 

  • OK – 検証成功。

  • NO – 証明書は提示されません。

  • NOT – 証明書は要求されません。

  • FAIL – 証明書は提示されたが検証不可。

  • NONE STARTTLS は実行されません。

  • TEMP – 一時エラーが発生。

  • PROTOCOL – SMTP エラーが発生。

  • SOFTWARE STARTTLS ハンドシェークが失敗。

${server_name}

現在の出力 SMTP 接続のサーバー名を保持します。 

${server_addr}

現在の出力 SMTP 接続のサーバーのアドレスを保持します。 

TLS を使用して SMTP を実行するためのルールセット

次の表で、TLS を使用する SMTP 接続を、受け入れるか、継続するか、拒否するかを決定するルールセットを説明します。

表 14–15 TLS を使用して SMTP を実行するためのルールセット

ルールセット 

説明 

tls_server

クライアントとして動作する場合、sendmail はこのルールセットを使用して、サーバーが現在 TLS によってサポートされているかどうかを判別します。

tls_client

サーバーとして動作する場合、sendmail はこのルールセットを使用して、クライアントが現在 TLS によってサポートされているかどうかを判別します。

tls_rcpt

このルールセットは、受取人の MTA の検証を必要とします。この受取人の制限により、DNS スプーフィングなどの攻撃が不可能になります。 

TLS_connection

このルールセットは、アクセスマップの RHS により指定された要件を、現在の TLS 接続の実際のパラメータに照合して確認します。 

try_tls

sendmail はこのルールセットを使用して、別の MTA への接続時に STARTTLS を使用できるかを判別します。MTA が適切に STARTTLS を実装できない場合、STARTTLS は使用されません。

詳細は、http://www.sendmail.org/m4/starttls.html を参照してください。

TLS を使用した SMTP の実行に関連するセキュリティーの検討事項

インターネットで動作するメールプログラムを定義する標準メールプロトコルとしては、SMTP はエンドツーエンドのメカニズムではありません。このプロトコルの制限により、SMTP を介した TLS のセキュリティーにはメールユーザーエージェントは含まれていません。メールユーザーエージェントは、ユーザーと (sendmail などの) メール転送エージェントの間のインタフェースとして動作します。

また、メールは複数のサーバーを経由してルーティングされる場合があります。SMTP のセキュリティーを完全にするには、SMTP 接続のチェーン全体に TLS のサポートが必要です。

最終的には、サーバーの各ペア、またはクライアントとサーバーのペアの間でネゴシエーションされる認証と機密性のレベルを考慮すべきです。詳細は、『Solaris のシステム管理 (セキュリティサービス)』「認証サービス」を参照してください。