TLS(SSL)によるSMTPの暗号化(Debianの場合)

最終更新日:2013年9月5日

Postfix をTLSを使った暗号化ができるように設定

  1. DebinaのPostfixでは標準でTLSのライブラリがリンクされているので設定だけでTLSを使ったメールの暗号化が可能になります。ただし、認証に関してはSASLを使った形にしないとTLS化ができないので、まず最初にSALS関連をインストールします。
$ sudo apt-get install libsasl2 libsasl2-modules sasl2-bin
(debian6では、apt-get install libsasl2-2 libsasl2-modules sasl2-bin )
  1. 次に saslauthd が起動時に自動で開始されるように /etc/default/saslauthd の以下の部分を設定します。
::
::
# Should saslauthd run automatically on startup? (default: no)
START=yes ---デフォルトは no
::
::
MECHANISMS="pam"
以上で saslauthd を起動させる準備ができましたので、
$ sudo /etc/init.d/saslauthd restart
以上でsaslauthd を起動させましょう。
正常に起動できれば、
$ testsaslauthd -u ユーザID -p パスワード
(ex. testsaslauthd -u matsuzaki -p Real-password)
で、Linuxに登録されているユーザにて saslauthd の動作が確認できます。
  1. 次に、/etc/postfix/main.cf を開き以下の箇所を編集します。
    なお、TLS化を実施する前にすでにPostfixの設定が完了しているものとし、SASLの設定部分のみについて説明します。

::
::
# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/mail-server.pem
smtpd_tls_key_file=/etc/ssl/private/nopass_mail-server.key
::
::
# postfix でTLSを利用する
smtpd_use_tls=yes
::
::
# SASL Auth
# broken_sasl_auth_clients = yes
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_authenticated_header = yes

::
::
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
permit_auth_destination,
reject


  1. /etc/postfix/sasl/smtpd.conf を以下の内容で作成します。
pwcheck_method: saslauthd


  1. /etc/postfix/master.conf でsmtpsを有効にするように修正します。
::
::
# smtps inet n - - - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes

smtps inet n - - - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes


  1. Postfixはchroot化された環境で動作するので、そのままではsaslauthd との通信に失敗してしまいます。 その対策として以下を実施します。
$ sudo rm -r /var/run/saslauthd/
$ sudo mkdir -p /var/spool/postfix/var/run/saslauthd
$ sudo ln -s /var/spool/postfix/var/run/saslauthd /var/run
$ sudo chgrp sasl /var/spool/postfix/var/run/saslauthd
$ sudo adduser postfix sasl


  1. 上記作業が完了したら、saslauthd と postfix を再起動します。
$ sudo /etc/init.d/saslauthd restart
$ sudo /etc/init.d/postfix restart
以上までの設定で、SMTPパケットのTLSでの暗号化か可能になりました。 (POPやIMAPに関してはまだ暗号化されていません。 それらについては別の章で説明します。)
SASLによるSMTP認証がうまく動作するかの確認は次のように行います。
まず、はじめにLinuxユーザの認証用ID/PasswordをBASE64化したデータを次の手順で入手します。
# perl -MMIME::Base64 -e 'print encode_base64("ユーザID\0ユーザID\0パスワード");'
(例: perl -MMIME::Base64 -e 'print encode_base64("matsuzaki\0matsuzaki\0pass1234");' )
たとえば結果として 「amltbXkAamltbXkAcaaamC1zZWNyZXQ=」が返ってきたとします。

リモートから telnet にてメールサーバに接続して、次のように確認を実施します。
$ telnet メールサーバのIPアドレス 25
Trying xx.xxx.xx.xxx...
Connected to xxxx.
Escape character is '^]'.
220 xxxx ESMTP Mailserver
ehlo ドメイン名
(ex. ehlo robata.org)
250-xxxxx
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH NTLM LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250-AUTH=NTLM LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250 8BITMIME
AUTH PLAIN amltbXkAamltbXkAcaaamC1zZWNyZXQ=
235 Authentication successful --- 認証成功

Mailwebmaster@robata.org

Copyright© 1998-2013 ROBATA.ORG