XMailでSSLを使う
メールのセキュリティ
ApacheでのSSL接続がひとまず完了したので、次にメールサーバー(XMail)のSSLを設定していきます。
メールの送信にはSMTPというプロトコル、受信にはPOP3というプロトコルが一般的に利用されていますが、どちらも通信内容は暗号化されません。 メールの通信データを暗号化するために、ホームページのHTTPSと同様にSSLを使用したものが、SMTPSとPOP3Sです。
メールでSSLを使用する方法は2種類あります。 ひとつは、SSL通信用のポート番号を設ける方法。 もうひとつは、通常のポート番号で接続し、暗号化通信を開始するコマンドを実行する方法です。
- SSL通信用のポート番号を使って暗号化
- 通常、SMTPのポート番号は25、POP3は110です。 これとは別に、SSLによる暗号化通信専用のポート番号を設けて、初めからデータを暗号化します。 SSL通信用のポート番号を使う場合、SMTPは465、POP3は995を使います。
- 通常のポート番号を使って暗号化
- 通信に使うポートはそのままにして、途中から暗号化通信を行う方法です。 この方法では、SMTPやPOP3で接続した後に「STARTTLS」というコマンドを実行することで暗号化通信を開始することをサーバーに伝えます。 STARTTLSを実行したあとは、すべての通信内容が暗号化されます。
どちらの方法も、サーバー側とクライアント側の対応が必要です。 クライアント側では、それぞれのプロトコルで暗号化を行う設定にすれば、ポート番号は自動的に変更されるようになっています。 サーバー側では、HTTPSと同じように、暗号鍵と電子証明書をメールサーバーに設置することで、暗号化通信を行う環境を準備します。
間違いやすいメールセキュリティのお話
メールのセキュリティについては、ESMTPやAPOPなどのキーワードや、25,110,465,995などいくつものポート番号が出てくるので混同しやすいところです。 送信と受信のプロトコルが異なること、認証方法が複数あることなどがその原因です。 ポイントは「メール認証」と「暗号化」はまったく別の話、ということです。 ここで一度整理しておきます。
- SMTP
- SMTP(25番ポート)は、メールを送信するためのプロトコル
- メールクライアントからメールサーバーへの送信だけでなく、メールサーバー同士の送信(メールリレー)にも使われる
- ユーザー認証は行われない
- 通信データは暗号化されない
- ESMTP
- 拡張型SMTP(25番ポート)
- SMTPにユーザー認証等のコマンドを追加して拡張したもの
- ユーザー認証に使用する認証情報はPOP3と同じものを使う場合が多い
- 通信データは暗号化されない
- POP before SMTP / SMTP after POP
- スパムメールやウィルスメールの送信を規制するために、メール送信をPOP3で認証した後の数分間だけに制限した施策
- メールクライアントでの設定変更が必要ないことから広く普及したが、「受信」よりも「送信」を先に行うクライアントの場合、メールを送信できないという症状が発生した(受信を先に行うか、送受信を素早く2回以上行えば送信できる)
- 基本的に、SMTP認証を利用していれば、この送信制限の対象外となる
- OP25B
- スパムメールやウィルスメールの送信を規制するために、各インターネットプロバイダが25番ポートでメールを送信できないようにした施策
- メールの送信にはサブミッションポート(587番ポート)を利用する
- メールクライアントでポート番号の変更が必要
- 通常、ユーザーの認証を必須としている
- 通信データは暗号化されない
- SMTPS
- SMTPをSSLにより暗号化する
- SSL通信用ポート(465番ポート)を使う方法と、STARTTLSコマンドにより暗号化通信を開始する方法がある
- SSL通信用ポートを使用する場合は、すべての通信が暗号化される
- ユーザー認証は必須ではない
- POP3
- POP3(ポート番号110)は、メールを受信するためのプロトコル
- ユーザー認証が必要
- 通信データは暗号化されない
- APOP
- POP3の認証情報を保護するために拡張されたコマンド
- パスワードをハッシュ関数によって非可逆に暗号化し、認証情報を保護することが目的
- パスワード以外のメール本文などは暗号化されないため、メール内容を保護することはできない
- POP3S
- POP3をSSLにより暗号化する
- SSL通信用ポート(995番ポート)を使う方法と、STARTTLSコマンドにより暗号化通信を開始する方法がある
- SSL通信用ポートを使用する場合は、すべての通信が暗号化される
- STARTTLS
- SMTPやPOP3の拡張コマンドとして実装された、暗号化通信を行うためのコマンド
- 通信ポートはSMTP(25番ポート)、POP3(110番ポート)のままで利用できる
- SMTPのサブミッションポート(587番ポート)でも利用できる
- メールクライアントで暗号化通信を利用する設定が必要
- STARTTLSコマンド以降の通信が暗号化される
- 最近は、メールリレーでSTARTTLSを使用し、中継経路も暗号化するメールサーバーがある
メールサーバーを構築する上では、上記のいずれの方法を採用するか、を決めなければなりません。 分かりやすくポート番号別に見ていきます。
25番ポート
メールの送信に使用するポートです。 メールリレーによって、外部のメールサーバーから送られるメールを受け取るために、25番ポートは必須です。 また、OP25Bによる25番ポートの制限はプロバイダによるものなので、サーバー側が25番ポートをふさぐ必要はありません。 ただし、サーバーが踏み台にされないように、SMTP認証を行わないとメールリレーを許可しない設定にしなければなりません。(XMailでは標準で対応)
最近は、メールのリレーでSTARTTLSを利用してくれるメールサーバーもありますから、STARTTLS対応にします。
110番ポート
メールの受信に使用するポートです。 外出先からメールを受け取るとき、SSL通信用のポートを使うPOP3Sに制限するのであれば必要ありません。 また、110番ポートはインターネットからアタックをかけられやすいポートなので、特に必要なければふさいでしまってよいでしょう。
465番ポート
SMTPのすべてを暗号化するために使用するポートです。 25番ポートがSTARTTLSに対応していれば暗号化されるので必須ではありませんが、その場合はサブミッションポート(587番)を用意しないと外出先からメールの送信ができない場合があります。
留意点として、465番ポートは、SMTPにSTARTTLSが採用された時点で無効となり、現在は異なるプロトコル(URL Rendesvous Directory for SSM)の番号に割り当てられています。 まぁ、このあたりで問題がなければ開けておいてよいでしょう。 使用する場合は待ち受けのポート番号が衝突しないか、を確認するようにしてください。
今回は、465番を使用し、さらにサブミッションポートも開放します。
587番ポート
OP25Bによって外出先から25番ポートを使用できない場合に、サブミッションポートとして使用するポートです。 465番ポートを使わない場合は必須です。
前述したように、465番と587番の両方を使用します。
995番ポート
暗号化通信によるメールの受信に使用するポートです。 110番ポートを使用しない場合は必須です。
今回は110番ポートをふさぐので、995番を使用します。
POP before SMTP
SMTP認証を必須とするのであれば必要ありません。 メールクライアントが「受信」よりも「送信」を優先すると、メールを送信できない場合があるので、今回は使用しません。
APOP
POP3はSSLで暗号化されるので必須ではありません。 パスワードの暗号化に使うハッシュ関数(MD5)に脆弱性が発見され、使用中止の勧告が出されていますが、POP3Sによって通信が暗号化されていればその影響はありません。 今回はXMailで使えるかどうか、だけ確認します。
秘密鍵と電子証明書の設置
前置きが長くなってしまいましたが、ここからXMailの設定です。
まず、SMTPSとPOP3Sを動作させるため、秘密鍵と電子証明書を設置します。 XMailでは、MailRootディレクトリにserver.key(秘密鍵)とserver.cert(電子証明書)を配置することで、SSLが使用できるようになります。 いずれも、ApacheのSSL設定で使用したものがあるので、それを利用します。 両方のファイルは、ホームのsslディレクトリに作成してあるので、それぞれ名前を変えてコピーします。
# cp ssl/wiz-code.private.key /var/MailRoot/server.key # cp ssl/wiz-code.private.cert /var/MailRoot/server.cert
次に、XMailが自己署名証明書を受け入れられるように、server.tabを編集します。 自己署名証明書の受け入れは「SSLAllowSelfSigned」変数に「1」を設定します。 項目がなければ追記します。
# vi /var/MailRoot/server.tab
"SSLAllowSelfSigned"[TAB]"1"
XMailのSSLは既定で「有効」になっており、特に指示を与えなければ無効にはなりません。 この段階で、SMTPSとPOP3Sが利用できるようになっているはずです。 XMailを再起動して確認してみましょう。
# service xmail stop # service xmail start
XMailはsystemctlコマンドに対応していないので、serviceコマンドで再起動(終了と起動)を指示しました。 /etc/init.d/xmailへ直接指示してもおそらく動作は同じだと思います。
SSL接続の確認
XMailがちゃんとSSLで動作するか確認します。 SSL通信を自力で行うのは多分不可能なので、メールクライアントを使います。
アプリケーションインストーラで「インターネット」カテゴリの「メール」にThunderbirdがあったので、これを使いましょう。
インストール中...。
インストール完了。 起動します。
ちなみに、Thunderbirdは使ったことありません。 いつも通り、下調べせず"勘"で設定していきます。
とりあえず、メールアカウントの設定に進む。
ユーザー名、メールアドレス、パスワードを記入。
プロバイダを検索?? いやいや、プライベートドメインだから見つからないでしょ、と思ったらメールサーバーへのアクセス試行で設定値を推測したようですね。 賢いな…。
いずれも、STARTTLSで暗号化通信が利用できるようです。
電子証明書のセキュリティ警告が表示されました。 自己署名証明書なので、これは当然の結果です。 「例外を許可」して、設定完了かな。
テストメールを送信してみましょう。
セキュリティ警告が出て送信できませんでした。 こちらも例外を許可します。
あら。 SMTPの設定がダメっぽい?
SMTP認証のユーザー名をメールアドレスに変更。 XMailはマルチドメイン対応なので、ユーザー名はメールアドレスと同じにする必要があります。
てか、ThunderbirdのSMTPはポート番号の既定値がサブミッションポート(587番)なんだ。 サブミッションポートはまだ用意していないので、ここは25のままでOK。
同じ理由で、POP3のユーザー名も変更しておきます。 パスワードの入力欄がないけど、接続するときに再設定するのかな?
やっぱり出てきた。 パスワードを入力します。
送信成功。 続けて受信します。
受信の時もパスワード入力を求められましたが、ちゃんと受信できました。
ここまでの検証結果。 SMTP(25)とPOP3(110)のSTARTTLSによるSSL暗号化はいずれも成功です。
次に、SSL通信ポートによる暗号化をチェックします。
アカウント設定で、POP3の「接続の保護」をSTARTTLSからSSL/TLSに変更します。 ポート番号も自動的に995に変更されます。
SMTPも同様に変更します。 こちらは、ポート番号が自動的に変わらなかったので、既定値として表示される「465」に書き換えました。
新しいメールを作成して、送受信を行ったところ、それぞれで電子証明書のセキュリティ警告が出ました。 電子証明書の例外設定はポートごとに管理されているようです。 例外を許可し、送信・受信とも成功しました。
SMTPSとPOP3SのSSL通信ポートによる暗号化も問題ないですね。
サブミッションポート
最後に、サブミッションポートの接続を確認します。 SMTPの設定をSTARTTLSに戻し、ポート番号を587に書き換えます。
メール送信でエラーが出ました。 といっても、これは予想通りです。 XMailは、サブミッションポートを待ち受けしません。
サブミッションポートを使うには、XMailでSMTPサーバーの待ち受けポートを増やす必要があります。 ちなみに、25番ポートを変更するわけにはいきません。 外部メールサーバーからのメールを受信できなくなりますので、25番ポートに加えて、587番ポートをSMTPの待ち受けに追加します。
待ち受けポートの追加は、server.tabなどの設定ファイルではなく、XMailの起動オプションで指定します。
/etc/init.d/xmail の起動スクリプトにコマンドライン用の変数があるので、ここに「-SI (IPアドレス):(ポート番号)」の書式でコマンドラインを追加します。 このとき、25番ポートと587番ポートの両方を待ち受けにするように記述します。 587番ポートだけだと、25番ポートが待ち受けされません。
XMailを再起動し、サブミッションポートで送信。 今度は成功しました。
また、SMTPのポート番号を25番に戻してもちゃんと送信できるか確認し、こちらもOK。
XMailのSSL設定まとめ
SMTPは25番ポートと587番ポート(サブミッションポート)で稼働し、ともにSTARTTLS対応。
SMTPSは465番ポートで稼働。
POP3は110番ポートで稼働し、STARTTLS対応。(ただし、110番ポートはファイアウォールでは開かない)
POP3Sは995番ポートで稼働。
以上で、XMailサーバーの設定は完了です。
この章のまとめ
- XMailのSSLは秘密鍵と電子証明書を配置すれば有効になる
- XMailでサブミッションポートを使う場合は、起動オプションで指定する
- serviceコマンド:sysvで登録したサービスを稼働・停止・再起動する