







 |
|
Index

機能強化とPAM認証,Shodowパスワード認証の機構が変わっています。SMTP Authで,sasldbを使い場合の相違点を以下に示します。
| 項目 |
SASL1 |
SASL2 |
備考 |
| コンパイルオプション(RedHat9の環境の場合) |
-I/usr/include -lsasl |
-I/usr/include/sasl -lsasl2 |
|
| データベース |
/etc/sasldb |
/etc/sasldb2 |
|
| パスワード作成コマンド |
saslpasswd |
saslpasswd2 |
基本的なオプションは同じ |
| dbリスト確認コマンド |
sasldblistusers |
sasldblistusers2 |
基本的なオプションは同じ |
| 設定ファイル |
/usr/lib/sasl/smtpd.conf |
/usr/lib/sasl2/smtpd.conf |
|
| 設定パラメータ |
pwcheck_method: sasldb |
pwcheck_method: auxprop |
|
| Postfix側の設定 |
相違点なし |
|
Postfix 2.xの場合,一部パラメータが異なってきます。
|
コマンド |
説明 |
# vi /usr/lib/sasl2/smtpd.conf
(以下の内容)
pwcheck_method:auxprop |
sasldb2を使用する設定 |
# saslpasswd2 -c -u `postconf -h myhostname`
{ユーザ名}
Password: {パスワード入力:これは表示されない}
Again (for verification): {パスワード入力:これは表示されない} |
/etc/sasldbが作成される |
# chgrp postfix /etc/sasldb2
# chmod g+r /etc/sasldb2 |
postfixが,sasldbを読み込めるようにする。
(これは,最初にsasldbを作ったときのみで,通常は不要の処理) |
| (/と/var/spool/postfixが同じボリュームの場合)
# ln /etc/sasldb2 /var/spool/postfix/etc |
シンボリックリンクでは,駄目です。
ハードリンクを行います。
(これは,最初にsasldbを作ったときのみで,通常は不要の処理) |
| (/と/var/spool/postfixが違うボリュームの場合)
# cp -p /etc/sasldb2 /var/spool/postfix/etc |
別ボリュームでハードリンクが行えない場合,コピーします。
この場合,saslpasswdを実行するたびに,コピーする必要があります。 |
|
コマンド |
説明 |
# vi /etc/postfix/main.cf
(以下の内容を追加する) |
|
| main.cfの変更箇所 |
|
|
| # postfix reload |
|
次のテストシェル(tpplain_sasldb2.sh.txt)を実行して,"Test
OK!"と出るなら,SASLが使える状態です。
#!/bin/sh
# tpplain_sasldb2.sh 1.10
##########################################################################
# 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
ENPASS=`perl -MMIME::Base64 -e "print encode_base64(\"$USER\0$USER\0$PASS\");"`
echo $PASS | saslpasswd2 -p -c -u `postconf -h myhostname` $USER
if [ "x$debug" = "xdebug" ] ; then
sasldblistusers2
fi
(
echo "EHLO $MYDOMAIN"
echo "AUTH PLAIN $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.$$
saslpasswd2 -d -u `postconf -h myhostname` $USER
if [ "x$debug" = "xdebug" ] ; then
sasldblistusers2
fi
exit 1 |
実行例はこんな感じです。
|
コマンド |
説明 |
| # sh tpsasl2.sh.txt test@mail.example.org:
userPassword
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.aritia.org ESMTP Postfix (2.0.10)
EHLO localhost.localdomain
250-mail.aritia.org
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN DIGEST-MD5 CRAM-MD5
250-XVERP
250 8BITMIME
AUTH PLAIN dGVzdAB0ZXN0AHRlc3RwYXNz
235 Authentication successful
QUIT
221 Bye
Connection closed by foreign host.
#
235 Authentication successful
Test Ok! Congratulations.
|
サーバの性能にもよりますが,PRE_SLEEP, POSTSLEEPを調整して,SMTPサーバ(Postfix)のメッセージが表示されるようにしてください。
あと,テスト用のユーザとパスワードは,USERとPASS変数で設定します。これは最後に消されます。実在のユーザで有れば,SASL
DBからアカウントが消されるので注意しましょう。
あとは,シェルを読んでいろいろ試してください。
Copyright入れたけど,私的に使う分には何も言えません。商売で使うようなら,クレームするかもしれないけど。(商売って何だろう?) |
テスト用のシェルを以下に置いておきます。ユーザを作成し,最後に削除します。PerlとMIME::Base64のライブラリが必要です。
PERLでサポートしている認証全てを行うスクリプトです。RedHat8.0 では,全てのPerlライブラリがインストールされていますが,他のプラットホームでは,いくつかのライブラリが必要となります。
 | SASL認証テスト
Perlスクリプト (LOGIN , PLAIN, CRAM-MD5, DIGEST-MD5 全ての認証テスト用)
 | このスクリプトは,ユーザを作成しません。スクリプトの中で,以下の変数を設定する必要があります。
 | $USER - ユーザ名 (事前に作成する) |
 | $PASS - パスワード(事前に設定しておく) |
 | (必要に応じて) $SMTPSERVER - Postfix(またはSMTPサーバ)が動作しているサーバ
(スクリプトを実行するサーバと同じ場合,変更する必要はない。) |
|
 | あとは,適当に変更してください。 |
 | 非常に適当なコードです。エラー処理も入れていませんし,自分でも理解できていない部分もあります。 |
 | 以下のライブラリが必要です。
 | MIME::Base64 |
 | Digest::HMAC_MD5 |
 | Digest::MD5 |
|
|
SASL認証テスト
Perlスクリプトを使ってわかったのですが,PAM認証としていても,CRAM-M5認証とDIGEST-MD5認証は,sasldbを参照しにいくようです。まあ,そういう仕様だから便利かというと,運用を混乱させるだけなので,sasldbを使った方がよいでしょう。
こんなのでアタックされました。(Username/Password部分は,デコートしています)
こういうy簡単なパスワードは駄目だよ,という例。
Out: 220 mail.example.org ESMTP Postfix (2.0.13)
In: EHLO laptop
Out: 250-mail.exaple.org
Out: 250-PIPELINING
Out: 250-SIZE 10240000
Out: 250-VRFY
Out: 250-ETRN
Out: 250-AUTH PLAIN LOGIN DIGEST-MD5 CRAM-MD5
Out: 250 8BITMIME
In: AUTH LOGIN
OUT 334 Username:
In webmaster
OUT 334 Password:
In webmaster
Out: 535 Error: authentication failed
In: AUTH LOGIN
OUT 334 Username:
In webmaster
OUT 334 Password:
In webmaster12
Out: 535 Error: authentication failed
In: AUTH LOGIN
OUT 334 Username:
In webmaster
OUT 334 Password:
In webmaster123
Out: 535 Error: authentication failed
In: AUTH LOGIN
OUT 334 Username:
In webmaster
OUT 334 Password:
In "
Out: 535 Error: authentication failed
In: AUTH LOGIN
OUT 334 Username:
In webmaster
OUT 334 Password:
In 1
Out: 535 Error: authentication failed
In: AUTH LOGIN
OUT 334 Username:
In webmaster
OUT 334 Password:
In 111
Out: 535 Error: authentication failed
In: AUTH LOGIN
OUT 334 Username:
In webmaster
OUT 334 Password:
In 123
Out: 535 Error: authentication failed
In: AUTH LOGIN
OUT 334 Username:
In webmaster
OUT 334 Password:
In 1234
Out: 535 Error: authentication failed
In: AUTH LOGIN
OUT 334 Username:
In webmaster
OUT 334 Password:
In 12345
Out: 535 Error: authentication failed
In: AUTH LOGIN
OUT 334 Username:
In webmaster
OUT 334 Password:
In 123456
Out: 535 Error: authentication failed
In: AUTH LOGIN
OUT 334 Username:
In webmaster
OUT 334 Password:
In 1234567
Out: 535 Error: authentication failed
In: AUTH LOGIN
OUT 334 Username:
In webmaster
OUT 334 Password:
In 12345678
Out: 535 Error: authentication failed
In: AUTH LOGIN
OUT 334 Username:
In webmaster
OUT 334 Password:
In 654321
Out: 535 Error: authentication failed
In: AUTH LOGIN
OUT 334 Username:
In webmaster
OUT 334 Password:
In 54321
Out: 535 Error: authentication failed
In: AUTH LOGIN
OUT 334 Username:
In webmaster
OUT 334 Password:
In 00000000
Out: 535 Error: authentication failed
In: AUTH LOGIN
OUT 334 Username:
In webmaster
OUT 334 Password:
In 88888888
Out: 535 Error: authentication failed
In: AUTH LOGIN
OUT 334 Username:
In webmaster
OUT 334 Password:
In admin
Out: 535 Error: authentication failed
In: AUTH LOGIN
OUT 334 Username:
In webmaster
OUT 334 Password:
In root
Out: 535 Error: authentication failed
In: AUTH LOGIN
OUT 334 Username:
In webmaster
OUT 334 Password:
In pass
Out: 535 Error: authentication failed
In: AUTH LOGIN
OUT 334 Username:
In webmaster
OUT 334 Password:
In passwd
Out: 535 Error: authentication failed
Out: 421 Error: too many errors
|

改正歴
| 2003.05.19 |
Postfix2.0.9用に記述した |
| 2003.05.25 |
少しパラメータを変えた。この方が,たいていの場合,良いであろう。 |
| 2003.08.02 |
アタックの例追加 |

|