Outlook ExpressやThunderbirdなどのメーラーを利用してメールの送受信を行う場合、メーラー(クライアント)とメールサーバ間の通信は生データ(クリアテキスト)で行われている。よって、このままではユーザ名やパスワードが盗聴される恐れがある。
ここではSSLを利用してSMTPサーバ(Postfix)及びPOP/IMAPサーバ(Dovecot)とメーラー間の通信を暗号化する方法を紹介する。
まずはSSL通信用のサーバー証明書及び秘密鍵を作成する。この操作はrootユーザで行う。
- サーバー用秘密鍵の作成
# openssl genrsa -des3 1024 > /etc/postfix/server.key
Generating RSA private key, 1024 bit long modulus
.++++++
................................................++++++
e is 65537 (0x10001)
Enter pass phrase: 任意のパスワードを入力
Verifying - Enter pass phrase: もう一度任意のパスワードを入力- 秘密鍵からパスフレーズを削除
# openssl rsa -in /etc/postfix/server.key -out /etc/postfix/server.key
Enter pass phrase for /etc/postfix/server.key: 先ほどのパスワードを入力
writing RSA key- サーバー用公開鍵の作成
# openssl req -new -key /etc/postfix/server.key -out /etc/postfix/server.csr
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]:Aichi
Locality Name (eg, city) [Newbury]:Nagoya
Organization Name (eg, company) [My Company Ltd]:Ando Komuten
Organizational Unit Name (eg, section) []:Customer Center
Common Name (eg, your name or your server's hostname) []:smtp.andokomuten.jp
Email Address []:postmaster@andokomuten.jp
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: ←何も入力しないでEnter
An optional company name []: ←何も入力しないでEnter
- サーバー証明書作成
# openssl x509 -in /etc/postfix/server.csr -out /etc/postfix/server.pem -req -signkey /etc/postfix/server.key -days 365
Signature ok
subject=/C=JP/ST=Aichi/L=Nagoya/O=Ando Komuten/OU=Customer Center/CN=smtp.andokomuten.jp/emailAddress=postmaster@andokomuten.jp
Getting Private key- Outlook / Outlook Express インポート用サーバー証明書作成
# openssl x509 -in /etc/postfix/server.pem -outform DER -out mailserver.der
作成したファイル「mailserver.der」をフロッピーなどで保存しておく。- パーミッションの変更
# chmod 400 /etc/postfix/server.*
※smtpサーバ、popサーバ共に同じ証明書を利用する。smtpサーバとpopサーバをホスト名で区別する場合、それぞれのホスト用の証明書を作る必要がある。
Postfixの設定ファイルを変更し、メーラー〜SMTPサーバー間通信を暗号化する。
- /etc/postfix/main.cfを編集:以下の文を最終行に追加する。
smtpd_tls_cert_file = /etc/postfix/server.pem
smtpd_tls_key_file = /etc/postfix/server.key
smtpd_use_tls = yes
smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_scache- /etc/postfix/master.cfを編集:以下の2行に付いている#を削除する。
smtps inet n - n - - smtpd
-o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes- Postfixの再起動
# /etc/rc.d/init.d/postfix restart
Dovecotの設定ファイルを変更し、メーラー〜POP/IMAPサーバー間通信を暗号化する。サーバー証明書や秘密鍵は8-1で作成したものを流用する。
- /etc/dovecot.confを編集:以下の該当部分を修正する。
protocols = pop3 pop3s ←pop3を残しておくと、SSL無しでも認証できる
ssl_disable = no ←行頭の#を削除
ssl_cert_file = /etc/postfix/server.pem
ssl_key_file = /etc/postfix/server.key- Dovecotの再起動
# /etc/rc.d/init.d/dovecot restart
POP/IMAP/SMTPの暗号化通信が行えるよう、ファイア・ウォールの設定を変更する。
- /etc/sysconfig/iptables をviで開き、以下の行を追加する。
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 465 -j ACCEPT ←SMTP
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 993 -j ACCEPT ←IMAP
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 995 -j ACCEPT ←POP- 変更を有効にする。
# /etc/rc.d/init.d/iptables restart
クライアント側からOutlook Expressを使って暗号化通信をテストする。Outlook Expressを開いてアカウントのプロパティページを表示し、「詳細設定」タブ内を次のように変更する。
- 「このサーバーはセキュリティで保護された接続(SSL)が必要」を、送信メール(SMTP)、受信メール(POPまたはIMAP)ともにチェックをつける。
- 送信メール(SMTP)のポート番号を465に変更(デフォルトは25)。
- 受信メール(POPまたはIMAP)のポート番号を995(IMAPなら993)に変更(自動で変更される)。
設定変更後、メールの送受信が行えるかどうか確認する。サーバー証明書が自家製(?)なので、次のような警告ウィンドウが表示される。
この警告ウィンドウは、Outlook Expressを開くたびに出てきてしまう。出ないようにするには、8-1の5.でフロッピーに保存した、クライアント用のサーバー証明書(mailserver.der)をインストールすればよい。
クライアント用サーバー証明書をインストールするには、mailserver.derをダブルクリックすればよい。次の画面が表示されるので、そのままインストールすればよい。インストール後、再度Outlook Expressを開くと、警告ウィンドウが表示されないはずである。