Oracle® Solaris 11.2 での sendmail サービスの管理

印刷ビューの終了

更新: 2014 年 7 月
 
 

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

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

  • インターネットでの機密性の高い認証された通信

  • 盗聴や攻撃からの保護


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

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

  • 発信元電子メールアドレスと宛先電子メールアドレスが暗号化される。

  • 電子メールメッセージの内容が暗号化される。

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

  • 220 Ready to start TLS

  • 501 Syntax error (no parameters allowed)

  • 454 TLS not available due to temporary reason

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 を実行するために使用される構成ファイルのオプションを説明します。これらのオプションを宣言する場合は、次の構文のどれかを使用します。

  • O OptionName=argument # 構成ファイル用

  • -O OptionName=argument # コマンド行用

  • define(`m4Name',argument) # m4 構成用

表 3-11  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 ソケットを指定します。Oracle 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 の使用をサポートできるようにするには、次のオプションを定義してください。

  • –CACertPath

  • –CACertFile

  • –ServerCertFile

  • –ClientKeyFile

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

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

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

表 3-12  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 接続を、受け入れるか、継続するか、拒否するかを決定するルールセットを説明します。

表 3-13  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.htmlhttp://www.sendmail.org/m4/starttls.html を参照してください。

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

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

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

最終的には、サーバーの各ペア、またはクライアントとサーバーのペアの間でネゴシエーションされる認証と機密性のレベルを考慮すべきです。詳細は、Oracle Solaris 11.2 での Secure Shell アクセスの管理 の第 1 章Secure Shell の使用 (タスク)を参照してください。