SMTP SubmissionポートでSTARTTLS or SSL/TLS を使うための設定
SSL(/TLS) を使うので、ここでは、opensslを使います。
まず、opensslがインストールされていないようなら、インストールしましょう。
$ dpkg -l|grep openssl
ii openssl 0.9.8o-4squeeze13 Secure Socket Layer (SSL) binary and related cryptographic tools
$
|
上記では、インストール済みですが、何も出力されないようなら、opensslをインストールしましょう。
$ apt-get -y install openssl
...
|
SSL用の証明書を作成する。
ここでは、プライベート認証局にて署名されたサーバー証明書を使いたいと思います。
サーバー証明書の作成は、プライベート認証局の証明書、サーバー証明書、クライアント証明書の作成方法について を参照してください。
(ここでは例として、サーバー証明書作成時の Common Name に mail.exmaple.com を指定して作成します。)
ここでは、サーバー証明書、秘密鍵ファイルがそれぞれ以下のファイル名で作成されたものとして、以降、記述します。
- プライベート認証局証明書 → /etc/pki/CA/cacert.pem
- サーバー証明書 → /etc/pki/CA/certs/mail.example.com.crt
- サーバー秘密鍵 → /etc/pki/CA/private/mail.example.com.key
ここで作成した証明書は、もちろんメールにも使用できますし、ウェブ(SSL)にも使用できます。
ただ、ウェブ(SSL)の場合は、自己署名でしかないので、警告メッセージが表示されることに注意してください。
社内で利用する分には、十分だと思いますが、ショッピングサイトなどの信用が必要なサイトには、ちゃんとした認証局(CA)に対応した証明書が必要だと思います。
Postfix(main.cf) を設定する。
最後に、SSLを使用する宣言と証明書( mail.example.com.crt,mail.example.com.key )のパスを設定します。
/etc/postfix/main.cf を編集します。
( 後半部分は、参考までに Postfix で Submissionポート(サブミッション・ポート)& SMTP-AUTH(認証)を使ってみる での設定を記載しています。もちろん、このSMTP-AUTH認証の設定箇所も必要になります。 )
/etc/postfix/main.cf
...
# -----------------------------------------------
# TLS関連の設定
# -----------------------------------------------
# TSLを有効にします
smtpd_use_tls = yes
# 証明書のファイルを指定します
smtpd_tls_cert_file = /etc/pki/CA/certs/mail.example.com.crt
# 秘密鍵のファイルを指定します
smtpd_tls_key_file = /etc/pki/CA/private/mail.example.com.key
# -----------------------------------------------
...
# -----------------------------------------------
# SMTP-AUTH認証 の設定
# -----------------------------------------------
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
#smtpd_sasl_local_domain = $myhostname
#smtpd_sasl_application_name = smtpd # replace to smtpd_sasl_path
#smtpd_sasl_path = smtpd
#broken_sasl_auth_clients = yes
smtpd_recipient_restrictions=
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination
# -----------------------------------------------
|
STARTTLS をsubmissionポートで使用する場合は、submissionポートでTLSを使うように設定する必要があります。
また、SSL/TLS でTSLを使用したい場合は、smtps のポート(デフォルト:587)を 開く必要があります。
/etc/postfix/master.cf を編集します。
デフォルトでは、コメントアウトしてあるものを生かすだけだと思いますが、一応、記載しておきます。
/etc/postfix/master.cf
...
submission inet n - - - - smtpd
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
smtps inet n - - - - smtpd
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
|
smtpd_tls_security_level
Postfix SMTPサーバでのSMTP TLSセキュリティレベル
- may : 日和見TLS (STARTTLSサポートをクライアントに通知はしますが、クライアントがTLS暗号化を使うことは要求しません。)
- encrypt :強制TLS暗号化 (SMTPクライアントにSTARTTLSサポートを通知し、クライアントが TLS暗号化を使うことを要求します。)
※STARTTLS を submission で使う場合は、必ず、ここを設定する必要があります。
smtpd_tls_wrappermode
yes : Postfix SMTPサーバをSTARTTLSコマンドを使うのではなく、非標準の “ラッパー” モードで走らせます。
smtpd_sasl_auth_enable
yes : Postfix SMTPサーバの SASL 認証を有効にします。
smtpd_client_restrictions
SMTPサーバがクライアントからSMTP接続の要求を受けた際に適用する、オプションのアクセス制限。デフォルトでは全ての接続要求を許可します。
- permit_sasl_authenticated :クライアントが RFC 2554 (AUTH) プロトコルで認証に成功した場合に要求を許可します。
- reject : 上記以外は、全ての要求を拒否します。
milter_macro_daemon_name
Milter (メールフィルタ) アプリケーションでの {daemon_name} マクロの値。
最後にpostfixを再起動します。
$ /etc/init.d/postfix restart
Stopping Postfix Mail Transport Agent: postfix.
Starting Postfix Mail Transport Agent: postfix.
|
メールクライアントからメールを送信してみる。
最後に確認作業です。この確認には、メールクライアントソフトを使って確認するのが間違いが少ないでしょう。
ここでは、フリーメールクライアントソフトのThunderBirdを使ってみます。
メニューの[ ツール ] – [ アカウント設定 ]でアカウント設定画面を開きます。
アカウント設定画面から、送信(SMTP)サーバー を選択し、テストに用いるサーバーを一覧から選択し、[ 編集 ] ボタンをクリックします。
- 説明:
ここでは、例としてtestを入力しています。何でも可。
- サーバー名:
ここでは、例としてmail.example.comを入力しています。正しいメールサーバー名あるいはIPアドレスを設定します。
- ポート番号:
ここでは、Submissionポートを使うので、
– STARTTLSの場合、587を設定します。
– SSL/TLSの場合、465を設定します。
- 接続方法:
ここでは、
それぞれ、STARTTLS あるいは、SSL/TLS のいずれかを選択します。
- 認証方式:
ここでは、通常のパスワード認識を選択します。
- ユーザ名:
ここでは、例としてhoge@example.comを入力しています。Postfix で Submissionポート(サブミッション・ポート)& SMTP-AUTH(認証)を使ってみる で記載したSASLで指定したユーザ名 (あるいは、PAM認証ならOSユーザ名)になります。
編集を終えたら、OKボタンをクリックして変更内容を保存したら、適当な外部サーバー宛(例えばYahoo!のフリーメールなど)のメールを送信してみましょう。
メールが送信されればOKです。
初回は、以下のようなメッセージが表示され、送信できないかもしれません。
このメッセージと同時に以下のような画面が表示されていると思います。
このメッセージは、「証明書は、勝手に自前で作成した証明書なので、信用性がありません。」という趣旨のものです。
とりあえず、
セキュリティ例外をクリックすると以降、メール送信できるようになります。
更に、その上のチェックボックスにチェックを入れておけば、それ以降、この画面は表示されません。
または、あらかじめ
プライベート認証局の証明書(ここでの例は、/etc/pki/CA/
cacert.pem )をあらかじめメールクライアントツールにインストールしておけば、上記のようなメッセージは表示されません。
以下は、ThunderBirdでの例です。先のプライベート認証局の証明書をダウンロード済として解説します。
- メニュー [ツール] – [オプション] をクリックします。
- オプション画面上の[詳細]をクリック、[証明書]タブを選択します。
[証明書を表示]ボタンをクリックします。
- 証明書マネージャ画面上の[認証局証明書]タブを選択します。
[インポート]ボタンをクリックし、先にダウンロードしたプライベート認証局の証明書を指定しインポートすればOKです。
どうだったでしょうか? STARTTLS or SSL/TLS は使えましたか?
Postfix で Submissionポート(サブミッション・ポート)& SMTP-AUTH(認証)を使ってみる が理解できていれば、案外簡単だったんじゃないでしょうか?
証明書は、一回やってみると案外簡単です。コマンドが多いので、ちょっと敬遠しがちですが、これも慣れだと思います。流れを理解しているとRedhat系のスクリプトも簡単に変更できるようになると思います。
また、先にも書きましたが、
メールは、ある程度、決まったユーザが利用するので、自前の証明書でもOKですが、
ウェブサイトで用いるSSL用の証明書は、自前のものを使うとウェブブラウザに警告メッセージが表示されてしまうので、考える必要があると思います。
SSLも、本当はもっと奥が深いです。ここでは、CA認証局の設定など取り扱わなかったところもあります。
あくまでメールだけなら、これでOKです。会社などで外からアクセスする場合は、これぐらいのセキュリティ設定はやっておきたいところですね。
何かの参考になればうれしく思います。
2017年5月8日, 5:00 PM
網羅的にpostfix, dovecot, プライベートCA認証局確立方法などが説明されていて、大変助かりました。ありがとうございます!