メールサーバー間通信内容暗号化(Postfix+Dovecot+OpenSSL)

最終更新日: 2017.05.24

<<トップページ <<新着情報 <<逆引き集 <<リンク集 <<サイト内検索 <<メルマガ <<Scientific Linuxで自宅サーバー構築 <<Fedoraで自宅サーバー構築

■概要

メールの送受信を外部から行う場合、ユーザー名やパスワードが盗聴される恐れがあるため、メールサーバー間の通信内容を暗号化する。
なお、暗号化されるのはここで設定するメールサーバーとクライアント間のみであり、メールサーバーと送信先メールサーバー間は暗号化されないため、メール本文が宛先まで完全に暗号化されるわけではない。

メールサーバー構築済であること


■サーバー証明書作成

[root@centos ~]# cd /etc/pki/tls/certs/ ← ディレクトリ移動

[root@centos certs]# make mail.pem ← サーバー証明書作成
umask 77 ; \
PEM1=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
PEM2=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
/usr/bin/openssl req -newkey rsa:1024 -keyout $PEM1 -nodes -x509 -days 365 -out $PEM2 ; \
cat $PEM1 >  mail.pem ; \
echo ""    >> mail.pem ; \
cat $PEM2 >> mail.pem ; \
rm -f $PEM1 $PEM2
Generating a 1024 bit RSA private key
.....++++++
....................++++++
writing new private key to '/tmp/openssl.C28807'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:JP ← 国名応答
State or Province Name (full name) [Berkshire]:Tokyo ← 都道府県名応答
Locality Name (eg, city) [Newbury]:Shinjuku ← 市区町村名応答
Organization Name (eg, company) [My Company Ltd]:centossrv.com ← サイト名応答(なんでもいい)
Organizational Unit Name (eg, section) []: ← 空ENTER
Common Name (eg, your name or your server's hostname) []:mail.centossrv.com ← メールサーバー名応答※
Email Address []:postmaster@centossrv.com ← 管理者メールアドレス応答

[root@centos certs]# cd ← ホームディレクトリへ戻る
※Common Nameに応答するメールサーバー名は、メールソフトで設定するメールサーバー名を応答すること

■Postfix設定

[root@centos ~]# vi /etc/postfix/main.cf ← postfix設定ファイル(main)編集
以下を最終行へ追加
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/pki/tls/certs/mail.pem
smtpd_tls_key_file = /etc/pki/tls/certs/mail.pem
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache

[root@centos ~]# vi /etc/postfix/master.cf ← postfix設定ファイル(master)編集
#submission inet n       -       n       -       -       smtpd ← 行頭に#を追加してコメントアウト(SUBMISSIONポート無効化)
#  -o syslog_name=postfix/submission
#  -o smtpd_tls_security_level=encrypt
# -o smtpd_sasl_auth_enable=yes ← 行頭に#を追加してコメントアウト(SUBMISSIONポートでSMTP認証無効化)

smtps     inet  n       -       n       -       -       smtpd ← 行頭の#を削除してコメント解除(SMTPS有効化)
  -o smtpd_tls_wrappermode=yes ← 行頭の#を削除してコメント解除(SMTPS有効化)
  -o smtpd_sasl_auth_enable=yes ← 行頭の#を削除してコメント解除(SMTPS有効化)

tlsmgr    unix  -       -       n       300     1       tlsmgr ← 行頭の#を削除してコメント解除(SMTPS有効化)

■Postfix再起動

(1)Postfix再起動
[root@centos ~]# systemctl restart postfix ← Postfix再起動※CentOS7の場合
[root@centos ~]# /etc/rc.d/init.d/postfix restart ← Postfix再起動※CentOS6の場合

(2)ポート465番のOPEN
ルーター側の設定でポート465番をOPENする。
※ルーターの設・閧ヘ各ルーターのマニュアルまたはメーカー別ルーターポート開放手順を参照

Portチェックテスト【外部からのPort開放確認】で「ホスト名(FQDN) または グローバルIPアドレス」にサーバー名(例:mail.centossrv.com)、「チェックポート番号」に465と入力、「ご注意・制約事項」を確認チェックして「Portチェック実行」ボタンを押下し、
ホスト:mail.centossrv.com
ポート:465
にアクセスできました
と表示されることを確認。

(3)ポート587番のCLOSE
ルーター側の設定でポート587番をCLOSEする。
※ルーターの設・閧ヘ各ルーターのマニュアルまたはメーカー別ルーターポート開放手順を参照

Portチェックテスト【外部からのPort開放確認】で「ホスト名(FQDN) または グローバルIPアドレス」にサーバー名(例:mail.centossrv.com)、「チェックポート番号」に587と入力、「ご注意・制約事項」を確認チェックして「Portチェック実行」ボタンを押下し、
ホスト:mail.centossrv.com
ポート:587
に到達できませんでした
と表示されることを確認。

■Dovecot設定

[root@centos ~]# vi /etc/dovecot/conf.d/10-ssl.conf ← DovecotSSL設定ファイル編集
# SSL/TLS support: yes, no, required. 
#ssl = yes
ssl = yes ← TLS通信の有効化

# PEM encoded X.509 SSL/TLS certificate and private key. They're opened before
# dropping root privileges, so keep the key file unreadable by anyone but
# root. Included doc/mkcert.sh can be used to easily generate self-signed
# certificate, just make sure to update the domains in dovecot-openssl.cnf
ssl_cert = </etc/pki/tls/certs/mail.pem ← サーバー証明書を指定
ssl_key = </etc/pki/tls/certs/mail.pem ← サーバー証明書を指定

■Dovecot再起動

(1)Dovecot再起動
[root@centos ~]# systemctl restart dovecot ← Dovecot起動※CentOS7の場合
[root@centos ~]# /etc/rc.d/init.d/dovecot restart ← Dovecot再起動※CentOS6の場合

(2)ポート995番(POPの場合)または993番(IMAPの場合)のOPEN
ルーター側の設定でポート995番(POPの場合)または993番(IMAPの場合)をOPENする。
※ルーターの設定は各ルーターのマニュアルまたはメーカー別ルーターポート開放手順を参照

Portチェックテスト【外部からのPort開放確認】で「ホスト名(FQDN) または グローバルIPアドレス」にサーバー名(例:mail.centossrv.com)、「チェックポート番号」に995(POPの場合)または993(IMAPの場合)と入力、「ご注意・制約事項」を確認チェックして「Portチェック実行」ボタンを押下し、
ホスト:mail.centossrv.com
ポート:995(POPの場合)または993(IMAPの場合)
にアクセスできました
と表示されることを確認。

■メールソフト設定(受信メールサーバーをPOPにする場合)

自宅や会社等の複数拠点でメールを使用する場合で、メールボックスを同期しなくてもいい場合(例:会社で受信したメールは自宅で受信できなくてもいい場合)、受信メールサーバーにPOPを使用する。
ここでは、メールソフトとしてThunderbirdを使用する。

Thunderbirdを起動し、メニューの「オプション」⇒「アカウント設定」でメール設定を行う



左側メニューで「サーバー設定」を選択
「接続の保護」で「SSL/TLS」を選択




左側メニューで「送信(SMTP)サーバー」を選択
SMTPサーバーを選択して「編集」




「ポート番号」に「465」を入力
「接続の保護」で「SSL/TLS」を選択
「OK」




「OK」

■メールソフト設定(受信メールサーバーをIMAPにする場合)

自宅や会社等の複数拠点でメールを使用する場合で、メールボックスを同期したい場合(例:会社で受信したメールを自宅でも受信したい場合)、受信メールサーバーにIMAPを使用する。
ここでは、メールソフトとしてThunderbirdを使用する。

Thunderbirdを起動し、メニューの「オプション」⇒「アカウント設定」でメール設定を行う



左側メニューで「サーバー設定」を選択
「接続の保護」で「SSL/TLS」を選択




左側メニューで「送信(SMTP)サーバー」を選択
SMTPサーバーを選択して「編集」




「ポート番号」に「465」を入力
「接続の保護」で「SSL/TLS」を選択
「OK」




「OK」

■サーバー証明書のインポート

ここまででメールサーバー間通信内容の暗号化は行えるが、メールソフトからメールサーバーへアクセスするたびに以下のような警告ウィンドウが表示されて煩わしいので、サーバー証明書をクライアントへインポートすることにより、警告ウィンドウが表示されないようにする。




(1)インポート用サーバー証明書作成
クライアントへのインポート用サーバー証明書を作成する
[root@centos ~]# cd /etc/pki/tls/certs ← ディレクトリ移動

[root@centos certs]# openssl x509 -in mail.pem -outform DER -out mail.der ← インポート用サーバー証明書作成
※mail.derというファイル名でインポート用サーバー証明書が作成されるので、クライアント側へコピーする(コピーする手段は利用者が限られた仲間内の場合はメール送付等でもいいが、利用者が不特定多数の場合はWeb上で公開すればよい⇒当サイトのサーバー証明書

(2)クライアントへサーバー証明書をインポート
サーバー側からコピーしてきたインポート用サーバー証明書(mail.der)をダブルクリックする



「証明書のインストール」




「次へ」




「証明書をすべて次のストアに配置する」を選択して「参照」




「信頼されたルート証明機関」を選択して「OK」




「次へ」




「完了」




「はい」




「OK」




「OK」

■メールサーバー確認

・内部で同一ユーザー同士でメールの送受信
・内部で他ユーザー間でメールの送受信
・内部で外部(プロバイダのメールアドレス等)との送受信
・内部で携帯との送受信※
・外部(会社等)で同一ユーザー同士でメールの送受信
・外部(会社等)で他ユーザー間でメールの送受信
・外部(会社等)で外部(プロバイダのメールアドレス等)との送受信
・外部(会社等)で携帯との送受信※

※携帯はドメイン指定受信等でメールサーバーからのメールが拒否されないようにしておくこと

■サーバー証明書有効期限延長

サーバー証明書の有効期限が切れた場合の有効期限延長手順を以下に示す。
[root@centos ~]# cd /etc/pki/tls/certs/ ← ディレクトリ移動

[root@centos certs]# awk '/BEGIN CERTIFICATE/,/END CERTIFICATE/ {print}' mail.pem > mail.crt ← PEMから証明書を抽出

[root@centos certs]# awk '/BEGIN PRIVATE KEY/,/END PRIVATE KEY/ {print}' mail.pem > mail.key ← PEMから秘密鍵を抽出

[root@centos certs]# openssl x509 -days 365 -signkey mail.key -in mail.crt -out mail.crt.new ← 抽出した秘密鍵・証明書で新たな証明書を有効期限1年で作成
Getting Private key

[root@centos certs]# cp mail.pem mail.pem.bak ← 既存のPEMをバックアップ

[root@centos certs]# cat mail.key mail.crt.new > mail.pem ← 秘密鍵・新証明書で新たなPEMを作成

[root@centos ~]# systemctl restart postfix ← Postfix再起動※CentOS7の場合
[root@centos ~]# /etc/rc.d/init.d/postfix restart ← Postfix再起動※CentOS6の場合

[root@centos ~]# systemctl restart dovecot ← Dovecot起動※CentOS7の場合
[root@centos ~]# /etc/rc.d/init.d/dovecot restart ← Dovecot再起動※CentOS6の場合

「■サーバー証明書のインポート」を参照してクライアント側でサーバー証明書をインポートし直す






▲このページのトップへ戻る

LPIロゴ Copyright© 2005-2017 fallenangels, All rights reserved.
ご自由にリンクしてください(連絡は不要です)
本ページへのご意見・ご要望、誤字・脱字・リンク切れ等のご連絡はこちらからお願いします