Redhat8.0 : PostfixでのSMTP AUTH(SASL)の設定(PAMを使う)

2003.02.22


上へ
qmailって良いの?
Postfixのインストール
SMTP AUTHの設定
PostfixでMaildir
SMTP AUTH(PAM)
Postfix2.0
Postfix2.x SMTP AUTHの設定
Postfix2.x  SASL2の設定
 

注意

PostfixでSMTP AUTHを利用する場合,PAMは,推奨されていません。

/usr/share/doc/postfix-1.1.11/README-Postifx-SASL-RedHat.txt からの引用

Since most of Postfix runs as non-root and access to authentication
via PAM routines or to /etc/shadow requires root, we'll only discuss
 authentication using sasldb;

Postfixは,non-rootユーザで実行され,PAMの認証でもnon-rootでアクセスされる。
一方で,/etc/shadowへのアクセスではrootユーザが要求される。そのため
Redhatでは,sasldbを使う認証を検討した。

PAMの認証では,CRAM-MD5,DIGEST-MD5の認証は使われませんので,セキュリティの面からも,sasldbを使うことが推奨されます。

 

手順

PAMの認証で,何を使うかにもよりますが,シャドーパスワード(/etc/shadow)を使う場合の手順を示します。LDAPやMySQLを使う場合は,PAMの設定ファイルを変更すれば良いでしょう。

シャドーパスワードを使用する場合,/etc/shadowファイルを参照します。このファイルは,パスワードが変更されるたびに,削除と作成を行います。そのため,ハードリンクしてもパスワードが変更されるとリンクが切れていまいます。つまり,CHROOTして使用される/var/spool/postfix配下のファイルと同期が取れなくなります。

同期をとるための仕組みを考えるか,CHROOTしてPostfixを使わないかの選択ですが,ここではCHROOTしない手順を書きます。

  1. SASLの設定を行う。
  2. /etc/shadowを参照できるようにする
  3. postfixのsmtpdをCHROOTしない設定に変更する
  4. postfixの設定ファイル(main.cf)にSASLの設定を加える

RedHat 7.3での確認はしていませんが,同じような手順と思います。

 

SASLの設定を行う(RedHat8.0)

コマンド

説明
# vi /usr/lib/sasl/smtpd.conf
(以下の内容)
pwcheck_method:pam
PAMを使用する設定

これで,ユーザの認証は,Loginとかで使用されるパスワード認証になります。

ユーザを作成(useradd等)し,パスワードを設定しましょう(passwd)

# vi /etc/group

 

追加 srvadmin:x:201:root,postfix
/etc/shadowを参照するため,グループの設定を行います。

ここでは,srvadminというグループを作成しました。rootとpostfixをグループに入れています。

# chgrp srvadmin /etc/shadow
# chmod g+r /etc/shadow
postfixが,/etc/shadowを読み込めるようにする。
 

/etc/shadow の元のパーミッションは以下の通り。(B

-r-------- 1 root root  /etc/shadow

 

Postfixの設定を変える(RedHat8.0)

コマンド

説明
# vi /etc/postfix/master.cf

 

修正前 smtp inet n - y - - smtpd
修正後 smtp inet n - n - - smtpd
CHROOTしない設定にします。

CHROOTの項目を"y"から"n"に変更するだけです。

# vi /etc/postfix/main.cf
(以下の内容を追加する)
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_mynetworks,
permit_sasl_authenticated,
check_relay_domains
broken_sasl_auth_clients = yes
これは,sasldbを使う場合と同じです。
# postfix reload
または,
# postfix stop ; postfix start # リスタート
 
SASLの設定を変更した場合は,リスタートしてください。

確認を行う

ユーザを作成し,次のテストシェル(tplogin_pam.sh.txt)を実行して,"Test OK!"と出るなら,SASLが使える状態です。

CAM-MD5認証はうまくいきませんでした。やはり,sasldbを使う方がお奨めです。

#!/bin/sh 
##########################################################################
# Postfix SASL Test Script
# Copyright (C) 2002, Hiroaki Izumi. All right reserved.
##########################################################################
debug="debug"	# debug option
#debug=""	# no debug
# ------------------------------------------------------------------------
PRE_SLEEP=2
POST_SLEEP=8
SMTPSERVER=localhost
MYDOMAIN=localhost.localdomain
USER=test
PASS=testpass
ENUSER=`perl -MMIME::Base64 -e "print encode_base64(\"$USER\");"`
ENPASS=`perl -MMIME::Base64 -e "print encode_base64(\"$PASS\");"`
CRYPT=`htpasswd -b -d -n test testpass | cut -d: -f2`
useradd -p $CRYPT $USER

(
    echo "EHLO $MYDOMAIN" 
    echo "AUTH LOGIN" 
    echo $ENUSER
    echo $ENPASS
    echo "QUIT" 
) | while read cmd ; do
    sleep $PRE_SLEEP 
    echo $cmd 1>&2 
    echo  $cmd 
    sleep $POST_SLEEP 
done | telnet $SMTPSERVER smtp 2>&1 | tee result.$$
echo "#"

if grep "235 Authentication successful" result.$$ ; then
	echo "Test Ok! Congratulations."
else
	echo "Test NG. Check your setting."
fi

rm -f result.$$
userdel $USER

exit 1
 

 実行例はこんな感じです。

コマンド

説明
# sh tplogin_pam.sh.txt
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.aritia.org ESMTP Postfix (1.1.11)
EHLO localhost.localdomain
250-mail.aritia.org
250-PIPELINING
250-SIZE 20480000
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN DIGEST-MD5 CRAM-MD5
250-AUTH=PLAIN LOGIN DIGEST-MD5 CRAM-MD5
250-XVERP
250 8BITMIME
AUTH LOGIN
334 VXNlcm5hbWU6
dGVzdA==
334 UGFzc3dvcmQ6
dGVzdHBhc3M=
235 Authentication successful
QUIT
221 Bye
Connection closed by foreign host.
#
235 Authentication successful
Test Ok! Congratulations.
ユーザとパスワードは事前に設定してください。

サーバの性能にもよりますが,PRE_SLEEP, POSTSLEEPを調整して,SMTPサーバ(Postfix)のメッセージが表示されるようにしてください。

あと,テスト用のユーザとパスワードは,USERとPASS変数で設定します。シェルの中で作成し,最後に削除しますので,存在するユーザにしないでください。

あとは,シェルを読んでいろいろ試してください。

Copyright入れたけど,私的に使う分には何も言えません。商売で使うようなら,クレームするかもしれないけど。(商売って何だろう?)

 

 

CHROOTして使う場合

以下のファイルを/var/spool/postfix配下に置けば,CHROOTしたsmtpdでも使えます。この場合,/etc/passwdと/etc/shadowをどう同期させるかが問題になります。

LDAP認証やMySQLを使う認証の場合,/etc/pam.d/smtpを書き換える必要があります。その認証の場合,/etc/shadowは参照しないので,PAMも もっと使いやすいかもしれません。

bullet/etc/pam.d/smtp
bullet/etc/pam.d/system-auth
bullet/etc/pam.d/other
bullet/lib/security/*
bullet/usr/lib/libcrack.so*
bullet/lib/libpam.so*
bullet/lib/libpam_mics.so*
bullet/lib/libpamc.so*
bullet/etc/security/*
bullet/etc/passwd
bullet/etc/shadow

参考

ちなみに,PAMの代わりに,/etc/shadowを使う場合も同じ手順です。shadowパスワードでの認証では,"pwcheck_method: shadow"と設定するだけです。PAMが使えるのではあまり意味がありません。たぶん,passwdも同じ手順でしょう。

テスト用のシェルを用意しました。sasldbを使う手順の方に,少し説明をしています。

 

horizontal rule