PostfixのSMTP認証で利用するCyrus SASLライブラリについて


投稿日:2012年11月12日
  • 14
  • 24



MacやWindowsなど、プラットフォームの異なるユーザー認証をサポートするSASL認証

これまでSMTP認証について解説する中で、Linuxのシステムで利用する「UNIX認証」、各ソフトで共通して利用する「PAM認証」。と解説を続けましたが、今回は「SASL(サスル)認証」です。
Postfixではこの「SASL認証」を利用してSMTP認証するため、理解しておく必要があります。


SASL認証について

PostfixではSMTP認証に「SASL(サスル:Simple Authentication and Security Layer)」というライブラリを利用します。「SASL」にはいくつか種類があり、Postfixでは「Cyrus SASL(サイラス サスル)ライブラリ」を利用します。

PostfixはLinux以外のプラットフォームもサポートしているため、それぞれの認証方法に対応すればソフトが肥大化するばかりです。そのためマルチプラットフォームの「Cyrus SASLライブラリ」を導入しています。

「Cyrus SASLライブラリ」でサポートしている認証機構

認証方法 サポートするシステム
dce AIX
getpwent All platforms
kerberos4 All platforms
kerberos5 All platforms
pam Linux, Solaris
rimap All platforms
shadow AIX, Irix, Linux, Solaris
sasldb All platforms
ldap All platforms that support OpenLDAP 2.0 or higher
sia Digital UNIX

サポートするシステムには記載されていませんが、同じUNIX系のMac OS XはもちろんWindows版のライブラリもあります。このようにプラットフォームによる認証機構の違いも「Cyrus SASLライブラリ」に任せることができます。

SASLの動作状況を確認

まずデフォルトの状態でスーパーユーザーでログイン。
※コマンドラインの見方
コマンド」「引数、その他」「コメント」「#(rootユーザ)」「$(一般ユーザ)」

# su - ← 別のユーザーからログインし直す場合は環境変数を引き継がないように「-」を忘れずに
# start saslauthd ← saslauthd起動
# saslauthd -v ← 利用可能な認証方法を調べます
authentication mechanisms: getpwent kerberos5 pam rimap shadow ldap

pamやshadowなど利用したいものが表示されていない場合は以下のコマンドで追加します。

# saslauthd -a pam
# saslauthd -a shadow

自動起動を有効

サーバのブート時に自動で起動するようにします。

確認
# su -
# chkconfig --list saslauthd
saslauthd       0:off   1:off   2:off   3:off   4:off   5:off   6:off
3がoffなので、自動起動を有効に変更する
# chkconfig saslauthd on

さらに詳しく知りたい方は「Cyrus SASL library公式ページ」へどうぞ。


SASL認証の利用方法

CentOS Linux 5.8ではCyrus SASLの1と2が用意されています。それぞれ設定ファイルは「/usr/lib64/sasl2(32bitの場合は/usr/lib/sasl2)」もしくは「/usr/lib64/sasl」にあります。通常「sasl2」を利用するので、このページでは「SASL2」の設定について解説します。

Postfixでは設定ファイル「/etc/postfix/main.cf」でSASL認証を有効にすることでSMTP認証に利用できるようになります。
Postfixが利用するSASLの設定ファイルは「/usr/lib64/sasl2/」の中にある「smtpd.conf」というファイルです。

Postfixの設定ファイルである「/etc/postfix/main.cf」はPostfixの解説で詳しく説明します。このページではPostfixが利用するSASL認証の設定ファイル「/usr/lib64/sasl2/smtpd.conf」について詳しく解説します。


SASL認証の設定ファイル「smtpd.conf」の書式

smtpd.conf」で指定するパラメータ。

「pwcheck_method:」認証方法に関する設定。

auxprop SASL独自のパスワードデータベースsasldbを用意して認証に利用する方法
saslauthd UNIXユーザー認証共通でPAMやshadowを利用する方法
Courier-IMAP authdaemond Courier-IMAPサーバの認証機構を利用する方法
pwcheck pwcheckデーモンを走らせ、shadowで認証する方法。古いため非推奨
write your own 自分でデータベースを作ってもよい

「mech_list:」認証方式に関する設定

PLAIN 平文でユーザ名・パスワードを送信するためSSLの利用が前提
LOGIN PLAINと同じ平文。各社の互換性が無く独自の形式でクライアント側の環境によって対応できないこともある
CRAM-MD5 MD5によるメッセージダイジェストで認証する。パスワード自体は送信しないため安全
DIGEST-MD5 CRAM-MD5の弱点をカバーしてセキュリティをさらに向上させた形式

SASLライブラリを利用してPostfixでSMTP認証をする方法

実際にPostfixでSASL認証を有効にする方法を解説します。Postfixの解説が終わってないので、解説が前後してしまいますが、とりあえず全体の流れだけ掴んで、Postfix設定時に参考にしてみてください。

UNIX認証「/etc/shadow」「PAM」「LDAP」などを利用する方法

1.「/usr/lib64/sasl2/smtpd.conf」に以下を追加

pwcheck_method: saslauthd
mech_list: plain login

2.「/etc/sysconfig/saslauthd」を編集。今回はPAM認証を利用するので、6行目あたり「MECH=pam」のコメントアウトを外して有効にします。(MECH=shadowをコメントアウトすればシャドウパスワードでユーザー認証できます)

# vi /etc/sysconfig/saslauthd
(省略)
# Mechanism to use when checking passwords.  Run "saslauthd -v" to get a list
# of which mechanism your installation was compiled with the ablity to use.
MECH=pam
# MECH=shadow

3.PAM認証を利用するため「/etc/pam.d/smtp」を利用可能な状態に編集(ない場合は作成してください)。UNIX認証を有効にするためモジュール「pam_unix.so」を指定。(PAM認証は再起動しなくても、変更するだけで有効になります)

vi /etc/pam.d/smtp
#%PAM-1.0
auth    required        pam_unix.so     nullok
account required        pam_unix.so

4.「saslauthd」を再起動して変更を有効にします。

# /etc/init.d/saslauthd restart

5.Postfixの設定ファイル「/etc/postfix/main.cf」でSASL認証を有効にします。ファイルの最後に以下の設定を追加してください。

vi /etc/postfix/main.cf
(省略)
# saslを有効に
smtpd_sasl_auth_enable = yes

# 匿名ユーザーのログイン禁止
smtpd_sasl_security_options = noanonymous

6.Postfixを再起動して設定を有効にする

# /etc/init.d/postfix restart

以上でPostfixのSMTP認証にSASLライブラリを利用して、PAM認証で設定したUNIXユーザーのID・パスワードでログインできるようになりました。この方法はパスワードを平文でやり取りするため、SSLで暗号化した通信で利用してください。


SMTP認証にSASL独自のパスワードデータベースを利用する方法

独自データベースは管理に手間がかかりますが、パスワードの暗号化もサポートしているため安全性は高まります。
注意点としては利用者のメールソフトがSMTP認証の暗号化に対応している必要があります。

1.「/usr/lib64/sasl2/smtpd.conf」に以下を追加。こちらは、より安全性の高い「cram-md5とdigest-md5」が利用できます。

pwcheck_method: auxprop
mech_list: cram-md5 digest-md5 plain login

2.Postfixの設定ファイル「/etc/postfix/main.cf」に以下を追加。
smtpd_sasl_local_domain」はSASL独自のデータベースに記載するドメインと合わせる必要があります。この設定は「/etc/sasldb2」と「/etc/shadow」を、異なるパスワードで管理する場合に重要になります。

vi /etc/postfix/main.cf
(省略)
# saslを有効に
smtpd_sasl_auth_enable = yes

# 匿名ユーザーのログイン禁止
smtpd_sasl_security_options = noanonymous

# 下の例ではmain.cfの上のほうで設定したmydomainの値を指定
smtpd_sasl_local_domain = $mydomain

# 下のようにドメインを直接入力してもいい。
# smtpd_sasl_local_domain = example.com

3.SASL独自のデータベースに新規ユーザーを追加
example.com」というドメインのSMTPサーバに接続許可する「hogeuser」を作成する場合。

# su - ←「-」を忘れずに
# saslpasswd2 -c -u example.com hogeuser
Password: ←パスワードを入力
Again (for verification): ←再度同じパスワードを入力

正常にユーザーが追加されると「/etc/sasldb2」にデータベースが作成されます。

ユーザーの確認するコマンド

# sasldblistusers2

ユーザーの削除するコマンド

# saslpasswd2 -d -u example.com hogeuser

4.続けて新規ユーザーを追加すると作成される「/etc/sasldb2」をPostfixで開けるようにグループに追加。合わせてパーミッションを変更。

# chgrp postfix /etc/sasldb2
# chmod 640 /etc/sasldb2

5.PostfixとSASLの変更を有効にするため再起動

# /etc/init.d/postfix restart
# /etc/init.d/saslauthd restart

これでSASL独自のパスワードデータベースを利用したSMTP認証ができました。


UNIXユーザー認証を利用する方法と、SASL独自のパスワードデータベースを利用する方法を解説しました。他にもpwcheckというデーモンを走らせて認証する方法(非推奨)、リレーメールサーバとして利用する場合にホスト毎にユーザー名・パスワードを指定する方法なども用意されています。

PostfixとSASLの連携について詳しくはPostfixの公式ページで確認してください。

次回は「OpenSSLの基本と、メールサーバに暗号化通信を導入する際の流れを確認」です。



現在のページを共有する



現在のページに関連する記事


おすすめの記事


コメントを残す

コメントは認証制のため、すぐには反映されません。

プログラミングに関する質問は「日本語でプログラミングの悩みを解決するQ&Aサイト sukegra」をご利用ください。