トップ  > サーバ設定:運用  > 各アプリケーションのインストール  > メールサーバ間通信内容暗号化(OpenSSL+sendmail+Dovecot)

メールサーバ間通信内容暗号化(OpenSSL+sendmail+Dovecot)  (最終更新日:2011/08/04)

メールの送受信を外部から行う場合、ユーザ名やパスワードが盗聴される恐れがあるため、メールサーバ間の通信内容を暗号化する。

なお、暗号化されるのはここで設定するメールサーバとクライアント間のみであり、メールサーバと送信先メールサーバ間は暗号化されない為、完全に暗号化されないことに注意。

メールサーバ構築(sendmail+Dovecot)が導入されていること。

ここで取り扱う証明書は自己署名証明書、俗に言う「オレオレ証明書」になる為実際に公開する場合は注意が必要です。

サーバ証明書作成

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

[root@sv certs]# make mail.pem ← サーバ証明書作成
umask 77 ; \
        PEM1=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
        PEM2=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
        /usr/bin/openssl req -utf8 -newkey rsa:2048 -keyout $PEM1 -nodes -x509 -days 3650 -out $PEM2 -set_serial 0 ; \
        cat $PEM1 >  mail.pem ; \
        echo ""    >> mail.pem ; \
        cat $PEM2 >> mail.pem ; \
        rm -f $PEM1 $PEM2
Generating a 2048 bit RSA private key
................+++
...................................+++
writing new private key to '/tmp/openssl.w9HyOv'
-----
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) [XX]:JP ← 国名入力(2文字の国名コード)
State or Province Name (full name) []:Tokyo ← 都道府県名入力
Locality Name (eg, city) [Default City]:Minato ← 市区町村名応答
Organization Name (eg, company) [Default Company Ltd]:rx-93dff.net ← 所属機関名(何でも良い)
Organizational Unit Name (eg, section) []: ← 所属(未入力でも良い)
Common Name (eg, your name or your server's hostname) []:mail.rx-93dff.net ← Webサーバ名入力メールソフトで設定するメールサーバ名を入力する
Email Address []:postmaster@example.net ← 管理者メールアドレス応答

[root@sv certs]# cd ← カレントディレクトリへ戻る

sendmail設定

[root@sv ~]# vi /etc/mail/sendmail.mc ← sendmail.mc編集

dnl #
dnl # Rudimentary information on creating certificates for sendmail TLS:
dnl #     cd /usr/share/ssl/certs; make sendmail.pem
dnl # Complete usage:
dnl #     make -C /usr/share/ssl/certs usage
dnl #
dnl define(`confCACERT_PATH', `/etc/pki/tls/certs')dnl
↓
define(`confCACERT_PATH',`/etc/pki/tls/certs')dnl ← サーバ証明書の所在指定

dnl define(`confCACERT', `/etc/pki/tls/certs/ca-bundle.crt')dnl
↓
define(`confCACERT',`/etc/pki/tls/certs/mail.pem')dnl ← サーバ証明書の所在指定

dnl define(`confSERVER_CERT', `/etc/pki/tls/certs/sendmail.pem')dnl
↓
define(`confSERVER_CERT',`/etc/pki/tls/certs/mail.pem')dnl ← サーバ証明書の所在指定

dnl define(`confSERVER_KEY', `/etc/pki/tls/certs/sendmail.pem')dnl
↓
define(`confSERVER_KEY',`/etc/pki/tls/certs/mail.pem')dnl ← サーバ証明書の所在指定

dnl #
dnl # The following causes sendmail to additionally listen to port 465, but
dnl # starting immediately in TLS mode upon connecting. Port 25 or 587 followed
dnl # by STARTTLS is preferred, but roaming clients using Outlook Express can't
dnl # do STARTTLS on ports other than 25. Mozilla Mail can ONLY use STARTTLS
dnl # and doesn't support the deprecated smtps; Evolution <1.1.1 uses smtps
dnl # when SSL is enabled-- STARTTLS support is available in version 1.1.1.
dnl #
dnl # For this to work your OpenSSL certificates must be configured.
dnl #
dnl DAEMON_OPTIONS(`Port=smtps, Name=TLSMTA, M=s')dnl
↓
DAEMON_OPTIONS(`Port=smtps, Name=TLSMTA, M=s')dnl ← SMTPS over TLSの有効化

[root@sv ~]# m4 /usr/share/sendmail-cf/m4/cf.m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf ← sendmail.mcよりsendmail.cf作成

sendmail再起動

1.sendmail再起動
[root@sv ~]# /etc/rc.d/init.d/sendmail restart ← sendmail再起動
sm-client を停止中:                                        [  OK  ]
sendmail を停止中:                                         [  OK  ]
sendmail を起動中:                                         [  OK  ]
sm-client を起動中:                                        [  OK  ]
2.ポート465番の開放

ルータ及びファイアウォールでポート465番を開放します。(ルータの設定はルータのマニュアルを参照。)

ファイアウォールをサイト通りに設定している場合は以下の追加作業。

[root@sv ~]# vi iptables.sh
#----------------------------------------------------------#
# 各種サービスを公開する場合の設定(ここから)               #
#----------------------------------------------------------#

# 外部からのTCP465番ポート(SMTPS)へのアクセスを日本からのみ許可
# ※SMTPSサーバを公開する場合のみ
#iptables -A INPUT -p tcp --dport 465 -j ACCEPT_COUNTRY
↓
iptables -A INPUT -p tcp --dport 465 -j ACCEPT_COUNTRY ← 「#」を削除しコメント解除

[root@sv ~]# ./iptables.sh ← ファイアウォール設定反映

ポートチェック【外部からポート開放確認】で「host名」にサーバ名(rx-93dff.net)、「port番号」に465を入力して「ポートチェック」をクリックし「アクセスできました」になること確認。

Dovecot設定

[root@sv ~]# vi /etc/dovecot/conf.d/10-ssl.conf ← dovecot設定ファイル10-ssl.conf編集
# SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>
#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/dovecot/certs/dovecot.pem
↓
ssl_cert = </etc/pki/tls/certs/mail.pem ← サーバ証明書の所在指定

ssl_key = </etc/pki/dovecot/private/dovecot.pem
↓
ssl_key = </etc/pki/tls/certs/mail.pem ← サーバ証明書の所在指定

Dovecot再起動

1.Dovecot再起動
[root@sv ~]# /etc/rc.d/init.d/dovecot restart ← dovecot再起動
Dovecot Imap を停止中:                                     [  OK  ]
Dovecot Imap を起動中:                                     [  OK  ]
2.ポート995(POPS),993(IMAPS)番の開放

ルータ及びファイアウォールでポート995,993番を開放します。(ルータの設定はルータのマニュアルを参照。)

ファイアウォールをサイト通りに設定している場合は以下の追加作業。

[root@sv ~]# vi iptables.sh
#----------------------------------------------------------#
# 各種サービスを公開する場合の設定(ここから)               #
#----------------------------------------------------------#

# 外部からのTCP995番ポート(POP3S)へのアクセスを日本からのみ許可
# ※POP3Sサーバを公開する場合のみ
#iptables -A INPUT -p tcp --dport 995 -j ACCEPT_COUNTRY
↓
iptables -A INPUT -p tcp --dport 995 -j ACCEPT_COUNTRY ← 「#」を削除しコメント解除

# 外部からのTCP993番ポート(IMAPS)へのアクセスを日本からのみ許可
# ※IMAPSサーバを公開する場合のみ
#iptables -A INPUT -p tcp --dport 993 -j ACCEPT_COUNTRY
↓
iptables -A INPUT -p tcp --dport 993 -j ACCEPT_COUNTRY ← 「#」を削除しコメント解除

ポートチェック【外部からポート開放確認】で「host名」にサーバ名(rx-93dff.net)、「port番号」に995,993力して「ポートチェック」をクリックし「アクセスできました」になること確認。

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

ここまででメールサーバ間の暗号化通信は可能ですが、メールソフトによりサーバへアクセスするたびに証明書の警告ウィンドウが表示される場合がある、クライアントへ証明をインポートすることで対処します。

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

[root@sv certs]# openssl x509 -in mail.pem -outform DER -out mail.der ← インポート用サーバー証明書作成

[root@sv certs]# cd ← カレントディレクトリへ戻る

/usr/share/ssl/certs/にmail.derというファイルができるので、USBメモリなどにコピーしクライアント側でインポートします。

メールサーバ動作確認

クライアントでメールの設定後以下の内容をテストします。

  1. 内部で同一ユーザ同士でメールの送受信
  2. 内部で他ユーザ間でメールの送受信
  3. 内部で外部(プロバイダのメールアドレス等)との送受信
  4. 内部で携帯との送受信※
  5. 外部で同一ユーザ同士でメールの送受信
  6. 外部で他ユーザ間でメールの送受信
  7. 外部で外部(プロバイダのメールアドレス等)との送受信
  8. 外部で携帯との送受信※

※携帯はドメイン指定受信でメールが拒否されないようにしておきます。