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の公式ページで確認してください。
mariadb10.3にバージョンアップしたところメールが送信できなくなりまして、
SASL login authentication failedの原因がpamときがつくまで6時間。
原因はpam.d
smtp -> /etc/alternatives/mta-pam
シンボリックリンクがなくなっていたのが原因。
おかげさまでこの記事がとても参考になまりした。
ありがとうございます。
コメントありがとうございます。
お役に立てたようでなによりです。