- PR -

qmailのsmtp 認証問題

1
投稿者投稿内容
kreny
会議室デビュー日: 2004/04/19
投稿数: 13
お住まい・勤務地: 福井
投稿日時: 2004-06-07 13:04
皆さん、こんにちは、お世話になります。
qmailの認証問題についてお聞きしたいです。簡単な例を挙げます。

私のドメイン:mydomain.com
私のアカウント:kreny
私のSMTP SERVER: smtp.mydomain.com

Client 側の設定
引用:
Outlook Express
Username :kreny
SMTP SERVER: smtp.mydomain.com
私のサーバの認証必要があるーーチェックしました



運行環境:
引用:
RH9.0+ qmail + vpopmail + qmail-smtpd-auth-0.4.3 + qmailscaner + Spamassassin + clamav-0.70



/etc/tcp.smtp ファイル:
引用:
# Qmail-Scanner at all for mail from 127.0.0.1
127.:allow,RELAYCLIENT="",RBLSMTPD="",QMAILQUEUE="/var/qmail/bin/qmail-queue"
# Use Qmail-Scanner with SpamAssassin on any mail from the rest of the world
:allow,QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl"



rcpthosts ファイル
引用:
mydomain.com



qmail-smtpd のrun ファイル:
引用:
#!/bin/sh
export PATH QMAILQUEUE TH=$PATH:/usr/local/bin:/var/qmail/bin
QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl"
export PATH QMAILQUEUE

QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
MAXSMTPD=`cat /var/qmail/control/concurrencyincoming`
LOCAL=`head -1 /var/qmail/control/me`

if [ -z "$QMAILDUID" -o -z "$NOFILESGID" -o -z "$MAXSMTPD" -o -z "$LOCAL" ]; then
echo QMAILDUID, NOFILESGID, MAXSMTPD, or LOCAL is unset in
echo /var/qmail/supervise/qmail-smtpd/run
exit 1
fi

if [ ! -f /var/qmail/control/rcpthosts ]; then
echo "No /var/qmail/control/rcpthosts!"
echo "Refusing to start SMTP listener because it'll create an open relay"
exit 1
fi

##### add the rblsmtpd by using the BLS: sbl-xbl.spamhaus.org ### use uid and gid of vpopmail
exec /usr/local/bin/softlimit -m 20000000
/usr/local/bin/tcpserver -H -v -R -l "$LOCAL" -x /etc/tcp.smtp.cdb -c "$MAXSMTPD"
-u 89 -g 89 0 smtp /usr/local/bin/rblsmtpd
-r sbl.spamhaus.org /var/qmail/bin/qmail-smtpd
/home/vpopmail/bin/vchkpw /bin/true 2>&1



問題について:「文章を直しました」
上記の通り設定しましたが、自分の smtp.mydomain.com を通じて、@mydomain.com でない宛先(例え@yahoo.co.jp)に送信する場合、SMTP AUTH 認証機能がうまくできまして、送信しました。しかし、@mydomain.com のユーザに送信するときに(例えothers@mydomain.com)、Client 側の“私のサーバの認証必要がある”をチェックしなくでもそのまま送信しました。

言い換えば、
引用:
Outlook の kreny@mydomain.comアカウント −−> smtp.mydomain.com サーバー(smtp認証必要がある) −−> user@yahoo.co.jp または kreny@mydomain.com −−>送信OK!



引用:
Outlook の kreny@mydomain.comアカウント ---> smtp.mydomain.com サーバー(smtp認証必要がなくでも) −−> kreny @ mydomain.com または others@mydomain.com −−>送信OK!


(そのときuser@yahoo.co.jp への送信は正常に拒否されました)

それは、私のサーバがいまopen relayでないという意味ですようね。ですが、@mydoman.com --> @mydomain.com の送信は完全にopen の形になります。その危険性は誰でもクライアント側のSMTP SERVER を smtp.mydomain.com に設定すれば、すべての @domain.com に送信ができます。ここで注意してほしいのは、”smtp.mydomain.com ”を使って(あるいは別のMTAではなく、私のサーバーを通じて)送信することです。最近ウィルスメールが多いですが、このバッグを利用して、@mydomain.comへ大量送信するアタックがありました。「文書を直りました」

確かめるために、http://www.abuse.net/relay.html で自分のサーバーを確認しましたが、その結果は:
引用:
Mail relay testing
Connecting to mail.mydomain.com for anonymous test ...
<<< 220 mydomain.com ESMTP
>>> HELO http://www.abuse.net
<<< 250 mydomain.com
Relay test 1
>>> RSET
<<< 250 flushed
>>> MAIL FROM:<spamtest@abuse.net>
<<< 250 ok
>>> RCPT TO:<securitytest@abuse.net>
<<< 553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1)
Relay test 2
>>> RSET
<<< 250 flushed
>>> MAIL FROM:<spamtest>
<<< 250 ok
>>> RCPT TO:<securitytest@abuse.net>
<<< 553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1)
Relay test 3
>>> RSET
<<< 250 flushed
>>> MAIL FROM:<>
<<< 250 ok
>>> RCPT TO:<securitytest@abuse.net>
<<< 553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1)
Relay test 4
>>> RSET
<<< 250 flushed
>>> MAIL FROM:<spamtest@mydomain.com>
<<< 250 ok
>>> RCPT TO:<securitytest@abuse.net>
<<< 553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1)
Relay test 5
>>> RSET
<<< 250 flushed
>>> MAIL FROM:<spamtest@[61.125.45.28]>
<<< 250 ok
>>> RCPT TO:<securitytest@abuse.net>
<<< 553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1)
Relay test 6
>>> RSET
<<< 250 flushed
>>> MAIL FROM:<spamtest@mydomain.com>
<<< 250 ok
>>> RCPT TO:<securitytest%abuse.net@mydomain.com>
<<< 250 ok

Relay test result
Hmmn, at first glance, host appeared to accept a message for relay.

THIS MAY OR MAY NOT MEAN THAT IT'S AN OPEN RELAY.
Some systems appear to accept relay mail, but then reject messages internally rather than delivering them, but you cannot tell at this point whether the message will be relayed or not.
You cannot tell if it is really an open relay without sending a test message; this anonymous user test DID NOT send a test message.



皆さんのアドバイスをお待ちしております。


_________________
我将扼住命運的咽喉,它絶不能使我屈服...
勉強ノート http://linux.dalouis.com

[ メッセージ編集済み 編集者: kreny 編集日時 2004-06-07 17:27 ]
anights
ぬし
会議室デビュー日: 2003/05/22
投稿数: 277
お住まい・勤務地: 東京
投稿日時: 2004-06-07 16:18
引用:

krenyさんの書き込み (2004-06-07 13:04) より:
確かに私のサーバはいまopen relayではないですが、@mydoman.com --> @mydomain.com の送信は完全にopen の形になります。その危険性は誰でも client側に smtp server を smtp.mydomain.com を設定すれば、*@domain.com への送信ができます。



なにか勘違いをされているようでなりません。
「*@mydomain.com への送信ができます。」とはどういう意味でしょうか? ← 文脈からmydomain.comに直しています
ただ、自ドメイン宛のメールを受け付けているにすぎないと思います。
rcpthostsに書いているのだから当然ですよね?

それもクライアントの設定は(詐称の有無関らず)関係ないと思いますよ。この構成では。

自ドメイン宛のメールを受け付けるのに認証が必要ということは
他のドメインのメールサーバからメールを受け付ける時も
認証が必要ということになるのは理解されていますか?

・Relay test 6について
>RCPT TO:<securitytest%abuse.net@mydomain.com>

このテストは、多段を許して<securitytest@abuse.net>へ
メールを転送するかのテストだったはず。
qmailであれば、"securitytest%abuse.net"をその文字列のまま受け取り
アカウント名として扱います。そのため、ただの自ドメイン宛の
メールですからエラーは出ませんよ。
kreny
会議室デビュー日: 2004/04/19
投稿数: 13
お住まい・勤務地: 福井
投稿日時: 2004-06-07 19:01
引用:

anightsさんの書き込み (2004-06-07 16:18) より:

なにか勘違いをされているようでなりません。
「*@mydomain.com への送信ができます。」とはどういう意味でしょうか? ← 文脈からmydomain.comに直しています ....



丁寧なご返事ありがとうございます。
書いたものの中に文法的な間違いがあると思いますが、誤解させてすみませんでした。訂正しました。お手数ですが、上記の「文書を直りました」のところにもう一度ご覧ください。

引用:
ただ、自ドメイン宛のメールを受け付けているにすぎないと思います。
rcpthostsに書いているのだから当然ですよね?


http://www.lifewithqmail.org/lwq.html#relaying を読みましたが、
引用:
3.2.2. Disabling relaying
If you follow the official directions for installing qmail, relaying will be turned off by default. This is accomplished by populating the file /var/qmail/control/rcpthosts with the fully-qualified domain names listed
in locals and virtualdomains (the local hosts).
The name of the control file, rcpthosts, comes from the SMTP RCPT (recipient) command. In an SMTP session, RCPT is used to specify the addresses of the recipients of a message. rcpthosts, then, lists the valid hostnames that can appear in a RCPT address.

3.2.3. Allowing selective relaying
Most single-user and small workgroup servers can disable relaying completely, but if you have to support a distributed user community, you'll need a way to allow your users, and only your users, to use your system as a relay. This is accomplished by using tcpserver to set the RELAYCLIENT environment variable, which tells qmail-smtpd to override the rcpthosts file.


qmail-smtpd-auth を使わず、上記のようなコントロールができますが(即ち、rcpthostsにmydomain.comだけを書いているので、自ドメイン宛のメールだけを受け付けている)、一旦 qmail-smtpd-auth を使えば(自分の実行した経験よりだけですが、定義ではない。)、rcpthostsの中に自ドメインだけを書いても、qmail-smtpd-authでの認証がOKであれば、ほかのドメイン宛先に送信ができます。(これは今自分のサーバーで運行していますから。)

引用:
このテストは、多段を許して<securitytest@abuse.net>へメールを転送するかのテストだったはず。 qmailであれば、"securitytest%abuse.net"をその文字列のまま受け取りアカウント名として扱います。そのため、ただの自ドメイン宛のメールですからエラーは出ませんよ。


その通りです。"securitytest%abuse.net" を "kreny" と同じように認識されていますから、securitytest%abuse.net@mydomain.com このアカウントに送信するはずですよね。

securitytest%abuse.net@mydomain.com に送信するとき、“外部”と“内部”二つの方法があると思います。(自分で名前をつけました)

“外部”というのは、たとえば私はyahoo.co.jpさんであり、自分のsmtp.yahoo.co.jpを使って、securitytest%abuse.net@mydomain.com に送信します。(この場合は本文の質問に関係ないですから…)

“内部”というのは 私はmydomain.com のkreny@mydomain.com を持つ、smtp.mydomain.com を使って自ドメイン宛のsecuritytest%abuse.net@mydomain.com に送信します。

上記のテスト6は“内部”という方法ですよね。(http://www.abuse.net/relay.htmlで smtp.mydomain.com と記入しましたから、そう思いました。) そのときなぜ qmail-smtpd-auth の機能を働かないというのは本文の質問です。

かなり細かくて、ややこしい文章を書きましたが、ご迷惑をかけてすみません。 またよろしくお願います。

[ メッセージ編集済み 編集者: kreny 編集日時 2004-06-09 02:53 ]
anights
ぬし
会議室デビュー日: 2003/05/22
投稿数: 277
お住まい・勤務地: 東京
投稿日時: 2004-06-09 16:56
引用:

krenyさんの書き込み (2004-06-07 19:01) より:
上記のテスト6は“内部”という方法ですよね。(http://www.abuse.net/relay.htmlで smtp.mydomain.com と記入しましたから、そう思いました。) そのときなぜ qmail-smtpd-auth の機能を働かないというのは本文の質問です。



なぜkreny@mydomain.com -> other@mydomain.comの時にsmtp-authが働かないのか?
という質問なのでしょうか?
それならばMTAの仕様によると思います。RFC2554でいうところのServer Policyかな。
世の中のsmtp-authの実装は、認証を受けたclientにリレー送信を許可するものであって
送信自体を許可するものではないのが一般的です。多分。。。

RFC2554の 6. Error Codesにあるcode 530 の説明を読んで頂くと
Server Policy が「コマンドの要求に対して認証が必要である」と決められていれば
「code 530:認証が必要」 のエラーが発生しますがそのもととなるPolicyは
qmailであればパッチが決定します。

つまりsmtp.mydomain.comが「mydomain.com向けのメールを認証なしで受け取る」というPolicyであることも可能です。その場合、認証は必要ないということになります。
また現状そのようなポリシーになっているのは分かりますか?

もし、すべての送信について認証を行わせたいのであれば、qmail-vidaを使用して
環境変数にFORCEAUTHを使うことで実現できます。
申し訳ないですが他のパッチの仕様については把握していないので
お勧めできるものがありません。


kreny
会議室デビュー日: 2004/04/19
投稿数: 13
お住まい・勤務地: 福井
投稿日時: 2004-06-09 18:00
引用:

anightsさんの書き込み (2004-06-09 16:56) より:
なぜkreny@mydomain.com -> other@mydomain.comの時にsmtp-authが働かないのか?
という質問なのでしょうか?
それならばMTAの仕様によると思います。RFC2554でいうところのServer Policyかな。
世の中のsmtp-authの実装は、認証を受けたclientにリレー送信を許可するものであって
送信自体を許可するものではないのが一般的です。多分。。。



anightsさん、かなり詳しいとことまで書いて頂いて、どうもありがとうございました。
anightsさんのご説明によって、何ヶ月ずっと困ってたことがやっと分かりました。自分は、またMTAの基本的な原理について勉強不足だと痛感しまして、大変勉強になりました。

引用:
また現状そのようなポリシーになっているのは分かりますか?


今の現状は多分mydomain.comへの送信は認証必要がないと思います。

anightsさんのおしゃったことを自分の理解で言い換えると、smtp-auth はリレー送信だけに対する認証であり、ローカルドメインに送信するに対してはまったく関係のない認証である(基本的なメカニズムが違いますから)のはいかがでしょうか。

どうもありがとうございました。

[ メッセージ編集済み 編集者: kreny 編集日時 2004-06-09 19:06 ]
1

スキルアップ/キャリアアップ(JOB@IT)