10.7. SMTP AUTH の設定

通常、SMTP には、POP3 や IMAP4 と異なりユーザーの認証プロセスが存在ないため、外部からのメール転送を不用意に許可してしまうと SPAM メールの送信などで不正に利用される可能性があります。そのため、ある特定のクライアントからの送信を許可するために 項10.6 で紹介した POP before SMTP と呼ばれる手法が広く利用されています。しかし、Turbolinux 10 Server の Postfix は SMTP 自身でユーザー認証を可能にした SMTP AUTH と呼ばれる機能拡張を実装しています。認証の機構には、SASL(Simple Authentication and Security Layer)を利用しており、数多くの認証方式をサポートしています。代表的なものを以下に示します。

表 10-3. SMTP AUTH の主な認証方式

認証方式概要
PLAIN 平文によるユーザー認証方式です。
LOGINPLAIN と同様に平文を用いた認証形式です。標準仕様が存在しないため、各社製品間の互換性があまり考慮されていません。
CRAM-MD5CRAM とは、Challenge-Response Authentication Mechanism の略称です。クライアントは、接続先の SMTP サーバーからあらかじめ示された任意の文字列にパスワードを含めで MD5 アルゴリズムで作成したメッセージを MTA へ送信します、MTA 側でも同様の方法でメッセージを作成し、クライアントから送られてきたメッセージと比較します。そして、それらの文字列が等しければログインを許可します。この認証方法は、ネットワークにパスワード自身が流れることがないため PLAIN や LOGIN より安全性が高くなります。
DIGEST-MD5CRAM-MD5 の欠点である総当たり攻撃などに対処するために、Realm(ドメイン名)や URL の指定、および HMAC(keyed-Hashing for Message Authentication Code)による暗号化をサポートしています。

このように、SMTP AUTH を利用するには、サーバーとクライアントの双方がこれらの暗号方式に対応していなければならないものの、メールの送信の際にユーザーとパスワードによる認証を行い、認証された場合のみメールの送信を許可することが可能になります。以下では、Turbolinux 10 Server の Postfix における SMTP AUTH の設定方法を解説します。

最初に以下のコマンドを実行して、SMTP AUTH による認証を行うユーザーとパスワードを登録します。この例は、ドメイン名 turbolinux.co.jp、ユーザー名 turbo を登録する場合です。通常、ドメイン名は自分のサイトのドメイン名を指定し、このドメイン名はメールクライアントの設定で必要になります。

# saslpasswd2 -u turbolinux.co.jp -c taro
Password:
Again (for verification):

登録済みのユーザーのパスワードを変更するのであれば、-c オプションは必要ありません。また、ユーザーを削除するには -d オプションを指定します。

# saslpasswd2 -u turbolinux.co.jp -d taro

SASL(Simple Authentication and Security Layer)のデータベースが /etc/sasldb2 に作成されます。登録されたユーザー情報を確認するには、以下のコマンドを実行します。

# sasldblistusers2
taro@turbolinux.co.jp: cmusaslsecretOTP
taro@turbolinux.co.jp: userPassword

Postfix が SMTP AUTH で /etc/sasldb2 を利用するには、読み込み可能となっている必要がありますので、以下のようにファイルの所有者を変更します。

# chgrp postfix /etc/sasldb2
# chmod 640 /etc/sasldb2
# ls -l /etc/sasldb2
-rw-r-----  1 root postfix 12687 Sep  4 13:25 /etc/sasldb2

SMTP AUTH を利用するには Postfix の設定も必要です。/etc/postfix/main.cf に以下の行を追加します。

smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated, check_relay_domain,reject

もし、平分によるパスワード認証は拒否するのであれば、以下のパラメータを指定することもできます。

smtpd_sasl_security_options = noplaintext

また、古いバージョンの Microsoft Outlook をメールクライアントに使用する場合は以下のパラメータを追加する必要があるかもしれません。EHLO の応答に対して、"250 AUTH" ではなく "250 AUTH=" が返されることを期待しているため、SMTP AUTH が機能しません。

broken_sasl_auth_clients = yes

Postfix を再起動して設定を反映します。

# /etc/init.d/postfix restart

telnet で SMTP が使用するポート 25 番へアクセスし、SMTP AUTH が有効になったことを確認します。

# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 turbolinux.co.jp ESMTP Postfix
EHLO localhost
250-turbolinux.co.jp
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN OTP NTLM LOGIN GSSAPI DIGEST-MD5 CRAM-MD5 <- この行を確認
250 8BITMIME
quit
Connection closed by foreign host.