Linux Install Memo

サーバー管理者によるLinux関連ソフトのインストールメモ

Home » □SMTP AUTH

□SMTP AUTH

参考URL:
http://asg.web.cmu.edu/cyrus/
http://warp.syns.net/2/5/
http://www.kobitosan.net/postfix/install-report-sasl.html
http://www.ht.sfc.keio.ac.jp/%7Egon/imap4/cyrus-install.html

「POP before SMTP」だと、悪名高きアウトルックに振り回されている人
にはとても使いづらいので、アウトルックでも対応している「SMTP AUTH」
にも対応してあげましょう。ちなみにアウトルックは「SMTP AUTH」でも
ログイン認証にしか対応していないという相変わらずの中途半端さなので
注意する事。(コンフィグ時に –enable-login=yes を忘れずに)

それからこの「Cyrus-SASL」のユーザーとパスワードの関係については、
「POP before SMTP」と同じようにサーバーのそれと合せたいので、コン
フィグ時に「–with-pwcheck」もつけないといけません。こうすることで
「pwcheck」というデーモンプログラムが出来上がりますので、これを
サーバー起動時に常駐させておけばOK!

Cyrus-SASL をまずゲット。(参考参照)

tar xvzf package/cyrus-sasl-2.1.22.tar.gz
cd cyrus-sasl-2.1.22/
./configure \
–with-pwcheck \
–with-saslauthd \
–enable-login \
–prefix=/usr \
–disable-digest
make
make install

更に、

mkdir /var/state/saslauthd
chmod 700 /var/state/saslauthd
chown postfix.postdrop /var/state/saslauthd

としておきます。

そうした上で設定ファイル「/usr/lib/sasl2/smtpd.conf」に

> pwcheck_method: saslauthd
> mech_list: login plain

と書けばOK。(ちなみにこの設定ファイルは最初有りません)

で、Postfix の作り直しです。sasl関連のライブラリを組み込みます。

以前のバージョン(Postfix-2.2.x)までは

cd /usr/src/postfix-2.2.x/
make tidy
make makefiles \
? CCARGS=”-DUSE_SASL_AUTH -DHAS_DB -I/usr/include/sasl” \
? AUXLIBS=”-L/usr/lib/sasl2 -lsasl2 -ldb -L/usr/lib”
make

というように、「-DUSE_SASL_AUTH」というオプションだったのが、
Postfix-2.3.x からは、cyrus-sasl を使う場合には

cd /usr/src/postfix-2.4.1/
make tidy
make makefiles \
? CCARGS=”-DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl” \
? AUXLIBS=”-L/usr/lib -lsasl2″
make

というように、「-DUSE_CYRUS_SASL」というオプションが追加されてます。

で、問題なくできたら

/usr/sbin/postfix stop

として今動いている Postfix を一旦止めて、普通にインストールする。
(□postfix の項を参照する事)

インストール後、/etc/postfix/main.cf に下記を追記。

> smtpd_recipient_restrictions =
>???????? permit_mynetworks
>???????? reject_non_fqdn_recipient
>???????? reject_unauth_pipelining
>???????? permit_sasl_authenticated?★
>???????? check_client_access hash:/etc/postfix/dracd
>???????? reject
>
> # with SASL2
> broken_sasl_auth_clients = yes?★
> smtpd_sasl_auth_enable = yes??★

★の行を追加すること。

broken_sasl_auth_clients は Outlook LOGIN 認証を利用するための設定
permit_sasl_authenticated は SMTP_AUTHで認証されたクライアントを許可

です。

で、pwcheck はもう古いので saslauthd を使います。

> # /usr/sbin/saslauthd -v
> saslauthd 2.1.22
> authentication mechanisms: getpwent pam rimap shadow

として、使える手順を確認したりして、特に問題なければ

/usr/sbin/saslauthd -a shadow

として、shadow参照での認証をするようにする。

エラーもなく実行できたら /var/state/saslauthd/ を見てみる。
ちゃんと動いていればサイズが0のファイルが下記のように出来てます。

> # ls -al /var/state/saslauthd/
> total 12
> drwx——??? 2 postfix? postdrop???? 4096 May? 7 16:23 .
> drwxr-xr-x??? 4 root???? root???????? 4096 Jan 31? 2006 ..
> srwxrwxrwx??? 1 root???? root??????????? 0 May? 7 16:23 mux
> -rw——-??? 1 root???? root??????????? 0 May? 7 16:23 mux.accept
> -rw——-??? 1 root???? root??????????? 6 May? 7 16:23 saslauthd.pid

あとは忘れないように、postfix の起動(/etc/rc.d/rc.Mとか)の前
にでも

> # Start SMTP AUTH passwd check server.
> if [ -f /usr/sbin/saslauthd ]; then
>??? echo “Start SMTP AUTH passwd check server : saslauthd”
>??? /usr/sbin/saslauthd -a shadow
> fi
>
> # Postfix
> if [ -x /usr/sbin/postfix ]; then
>??? echo -n ” Postfix : ”
>??? /usr/sbin/postfix start
> fi

と追加しておきましょう。saslauthd はオプションが一杯あるので
一度 –help で見ておくといいでしょう。

さて、動作確認をして見ましょう。

> root@kabu# telnet fwnet.jp smtp
> Trying 210.197.75.225…
> Connected to fwnet.jp.
> Escape character is ‘^]’.
> 220 yebisu.fwnet.or.jp ESMTP Postfix
> EHLO kabu.fwnet.jp?????★こんにちは
> 250-yebisu.fwnet.or.jp
> 250-PIPELINING
> 250-SIZE 10240000
> 250-VRFY
> 250-ETRN
> 250-AUTH LOGIN PLAIN OTP DIGEST-MD5 CRAM-MD5
> 250-AUTH=LOGIN PLAIN OTP DIGEST-MD5 CRAM-MD5
> 250 8BITMIME
> AUTH PLAIN dXNlcm5hbWUAdXNlcm5hbWUAcGFzc3dvcmQ=?★認証してけれ
> 235 Authentication successful

というように、★の行のように入力すると、最後に「認証成功」とでて
くればOKです。

この「AUTH PLAIN …」の部分はこんな風にして作れます。

printf ‘username\0username\0password’ | mmencode

もしくは mmencode がなければ

perl -MMIME::Base64 -e ‘print encode_base64(“username\0username\0password”);’

としても可能。ここで出力された文字列を上記のように使えばOK。
ここではじかれるようなら postfix を終わらせたあとの再起動がきちんと
完了しているかどうかに注意。30分くらいうんうんやってました。(^^;

さて、肝心のアウトルックで出来ましたか!?

あとは参考サイト見て設定して下さい。

★補足:もし username や password の頭文字に数字が含まれている場合
?? (例:username が「0123」password が「1234」の場合)

printf ‘0123\00000123\00001234’ | mmencode

のように「\0」の次に000を付け加える。

後ろの | mmencode を取って実行すると

012301231234 と表示されればOK。

Name of author

Name: admin

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です