- PR -

Qmail + Vpopmail が正しく動作しない

投稿者投稿内容
虎エモン
常連さん
会議室デビュー日: 2005/01/01
投稿数: 33
投稿日時: 2005-09-30 00:00
(数スレ前の”もんぷち”さまの書き込みと状況が非常に似ているようですが、
当方メール送信等等のトラブルも同時に起こっており、新しくスレを立てさせて頂きました、もし問題あるようでしたら、ご指摘お願いします。)


現在qmailをインストールしてますが、
正しく動作してくれず、大変困っております。
諸事情により期限があるもので、パニックに陥ってしまってます。
どなたかアドバイスお願いいたします。

現在qmail+vpopmailをインストールし、
以下の起動スクリプトを用いてプロセスを起動させております。

###起動スクリプト###
#!/bin/sh
#


PATH=/var/qmail/bin:/usr/local/bin:/bin:/usr/bin

HOSTNAME=galaxy
QMAILDUID=251
QMAILDGID=251

[ -f /var/qmail/rc ] || exit 0

case "$1" in
start)
echo "Starting qmail."
csh -cf '/var/qmail/rc &'



#FOR SMTP
tcpserver -H -R -l $HOSTNAME -v \
-x /home/vpopmail/etc/tcp.smtp.cdb -u $QMAILDUID -g $QMAILDGID 0 smtp \
/var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd 3 &

#For POP3
#envdir /etc/relay-ctrl relay-ctrl-chdir \
tcpserver -H -R -l $HOSTNAME -v 0 pop3 \
/var/qmail/bin/qmail-popup $HOSTNAME \
/home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir 2>&1 | /var/qmail/bin/splogger pop3d 3 &



touch /var/lock/qmail
;;

stop)
# Stop daemons.
echo "Shutting down qmail."
PID=`/bin/ps -aefw | grep qmail | awk '{print $2}'`
if [ ! -z "$PID" ] ; then
/bin/kill ${PID} 1> /dev/null 2>&1
fi
rm -f /var/lock/qmail
;;

*)
echo "Usage: S88qmail {start|stop}"
exit 1

esac

exit 0
#########


この起動スクリプトを用いて、現在起こっている状況を以下に書きます。

@外部(インターネット)からのメールは正しくMaildirのNewに入る。


AMaildirのnewディレクトリに外部からのメールは正しく溜まるが
 受信者はnewフォルダのメールをダウンロード出来ない。

・外部クライアントよりメール受信を試みると、authorization failedとして
 Errorが返ってきて、メールを受信することが出来ない)

・vpopomailではドメインを何度も設定しなおしており、
 パスワードの不一致は考えられない。

・default domainとして登録してあるが、ログインに、user名のみ、
 フルメールアドレスのどちらを用いても、認証不可になってしまう。


Bメール送信は、 ローカルホストから外部に行う事が出来るが、ローカルホスト以外のクラアントが送信しようとすると
"553 sorry that domain isn't in my list of allowed rcpthosts(#5.7.1)"のエラーメッセージが帰ってくる。

Ctelnetによりログインを試みると、USER + PASS入力後やはり

-ERR authorization failed
Connection to localhost closed by foreign host.

のエラーメッセージが返ってきて、ログインする事ができない。





・現在rtcphostsには、
 メールサーバ名、およびMXが登録してあるDNS名の二つが記されています。


・/home/vpopmail/etc/tcp.smtp.cdbの内容は、

 127.0.0.1:allow,RELAYCLIENT=""

となっております。

・ps 情報は以下のとおりになっております。

bash-3.00# ps -ef|grep qmail|grep -v grep

root 1480 1479 0 21:08:53 pts/2 0:00 tcpserver -H -R -l galaxy -v 0 pop3 /var/qmail/bin/qmail-popup galaxy /h

root 1479 1 0 21:08:53 pts/2 0:00 /var/qmail/bin/splogger pop3d 3

qmailq 1483 1474 0 21:08:53 pts/2 0:00 qmail-clean

qmails 1474 1 0 21:08:53 pts/2 0:00 qmail-send

qmaill 1477 1476 0 21:08:53 pts/2 0:00 tcpserver -H -R -l galaxy -v -x /home/vpopmail/etc/tcp.smtp.cdb -u 251 - #←表示は途中で切れているようです

root 1476 1 0 21:08:53 pts/2 0:00 /var/qmail/bin/splogger smtpd 3

qmailr 1481 1474 0 21:08:53 pts/2 0:00 qmail-rspawn

qmaill 1475 1474 0 21:08:53 pts/2 0:00 splogger qmail

root 1478 1474 0 21:08:53 pts/2 0:00 qmail-lspawn ./Maildir




以上になりますが、必要な情報があれば掲示させて頂きますので
どなたかアドバイスいただける方いらっしゃいましたら
なにとぞ、よろしくお願いいたします。






[ メッセージ編集済み 編集者: 虎エモン 編集日時 2005-09-30 01:48 ]

[ メッセージ編集済み 編集者: 虎エモン 編集日時 2005-09-30 01:54 ]
kalze
ぬし
会議室デビュー日: 2003/10/23
投稿数: 406
お住まい・勤務地: 東京・東京
投稿日時: 2005-09-30 01:35
とりあえずはっきりしたことはわかりませんが、気になった点を。

状況としては、SMTPは問題ないけど、POP認証がダメっぽいですね。
クライアントからの送信もPOP before SMTPをやっていると想定。

とりあえずうちのマシンと比較してみました。
起動スクリプトは問題なさげだと思うんですが。
(全角入ってるとか改行関連でおかしいとかならわからないですけど)

引用:

root 1480 1479 0 21:08:53 pts/2 0:00 tcpserver -H -R -l hogehost -v 0 pop3 /var/qmail/bin/qmail-popup galaxy /export/h
qmaill 1477 1476 0 21:08:53 pts/2 0:00 tcpserver -H -R -l galaxy -v -x /export/home/vpopmail/etc/tcp.smtp.cdb -u 251 -



・galaxyってのはhogehostに変更しわすれでいいのかな?
・/home/vpopmailの前に/exportってのがついてますが、これは?

後者の方は、起動スクリプトが書かれているとおり/exportがなく、psの結果には/exportがあるのであれば、それが悪さしてるのかなと思いました。
(原因はわかりませんが)

単に自分が無知なだけで/exportがつくような方法があるのでしたら申し訳ないっす
虎エモン
常連さん
会議室デビュー日: 2005/01/01
投稿数: 33
投稿日時: 2005-09-30 01:45
kalzeさま、早速のレスありがとうございます。

[quote]
・galaxyってのはhogehostに変更しわすれでいいのかな?
[/quote]

すみません、こちらは投稿時に手を加えて書き込んだもので、
ホストネームのgalaxyは、内容には特に関係ないので、
hogehostに変更したつもりだったのですが、変更漏れがあったものになります。
わかりにくくて申し訳ありませんでした。
実際には、hogehostと書いてある部分は全てgalaxyとホストネームが入って降ります。



[quote]
・/home/vpopmailの前に/exportってのがついてますが、これは?
[/quote]
こちらもすみません。/export/はもともとsolarisで使用していたスクリプトでしたので
そのときの名残りがこちらに残ってしまっておりますが、実際の起動スクリプトには
これらは入っておらず、/home/vpopmail/となっております。

(solaris) /export/home/ =/= (linux) /home/


前回投稿した起動スクリプト&PSの出力結果を正しく修正させていただきました。
再びわかりずらく、申し訳ありませんでした。







[ メッセージ編集済み 編集者: 虎エモン 編集日時 2005-09-30 01:56 ]
虎エモン
常連さん
会議室デビュー日: 2005/01/01
投稿数: 33
投稿日時: 2005-09-30 03:49
とりあえず、解決したと思ったのですが、
やはりうまくいっておりませんでした。

メールの受信自体は先ほどのパスワードの文字数を合わせる事で
とりあえず回避はできたのですが、

クライアントから、他のドメイン(例hotmail等)にメールを送ろうとすると

「受信者の一人がサーバーによって拒否されたため、メッセージを送信できませんでした。拒否されたメールアドレス:user1@hotmail.com 件名'test',アカウント:'user1@mydomain.com',サーバー:'mail.mydomain.com',プロトコル:SMTP,サーバーの応答:'533 sorry,that domain isn't in my list of allowed rcpthosts (#5.7.1)',ポート:25,セキュリティ(SSL):なし,サーバーエラー:533,エラー番号:0x800CCC79」

というエラーで送ることが出来ませんでした。
/var/qmail/control/rcpthostsファイルには、特におかしい設定はしていないと思うのですが・・

$ cat /var/qmail/control/rcpthosts
mail.mydomain.com
mydomain.com

$ cat /export/home/vpopmail/etc/tcp.smtp
127.0.0.1:allow,RELAYCLIENT=""


他に思い当たる箇所が、見つかりません・・;







PS:何故か前回の書き込みが削除になってしまいました・・;

前回の内容としては、~/vpopmail/bin/vuserinfo コマンドでuser情報を見てみると
cleare-passwordにて表示されているパスワードの文字数が、8文字以上のパスワードに対して、全て8文字までで打ち切られてしまっていたので、クライアントにてこれを変更したら、正常に受信は出来るようになった。という内容でした。

例)vadduserにてUSER:user1 PASS:1234567890 で登録したにもかかわらず
実際に登録されているパスワードは何度設定をしてもPASS:12345678と8文字で打ち切られて登録されてしまうので、クライアント側でpasswordを12345678と8文字以内に直して設定したところ、問題なく認証が行えるようになった。






[ メッセージ編集済み 編集者: 虎エモン 編集日時 2005-09-30 10:43 ]
虎エモン
常連さん
会議室デビュー日: 2005/01/01
投稿数: 33
投稿日時: 2005-09-30 12:14
再び自己レスになります。

Webで同じ症状を探し回った結果、出るわ出るわで
同じ症状の方の報告が沢山でてくるのですが、
解決に至ってる記事はひとつも見当たりませんでした。

その中でも一番ヒントが得れたのは、こちらのLinuxSquareの過去のLogでした。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=2364&forum=10&7

が、ずばり確信を得る事はできませんでした。
問題は、~/vpopmail/control/rcpthosts のファイル付近のトラブルで
POP before SMTPの中でのトラブルだという事は理解できました。

上記の過去ログでは、rcpthostsファイルを削除かリネームすれば、
とりあえずは症状は起こらないという事ですが、
スレ主さまが書かれているとおり、rcpthostsを使用しない=POPbeforeSMTPが動作していない、ということになりますので、非常に厄介な問題にはまってしまっているようです・・。




[ メッセージ編集済み 編集者: 虎エモン 編集日時 2005-09-30 12:15 ]
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2005-09-30 13:00
こんにちは。

tcpserverとの通信のシミュレート方法をfutaさんのスレッドに記しました。
POPでの認証トラブルに参考になれば。

また、strace を使用すれば強力に動作把握ができますので、気合と根性があれば、役に立つと思います。
※ strace の使用例は、過去のスレッドにあります。今回は tcpserver が対象になるでしょう。

以上、ご参考まで。
虎エモン
常連さん
会議室デビュー日: 2005/01/01
投稿数: 33
投稿日時: 2005-09-30 22:22
angelさま

参考になる内容ありがとうございました。
さっそく色々試してみたところ、

futaさまの内容を元に、
ユーザーのIDを調べてみると

bash-3.00# ./qmail-popup mydomain.com /home/vpopmail/bin/vchkpw id
+OK <1393.1128086274@mydomain.com>
user user1
+OK
pass password
uid=89(vpopmail) gid=89

上記のような出力が出てまいりました。
futaさまが上コマンドを行った際は、
出力の最後の行に、

uid=89(vpopmail) gid=89(vchkpw) 所属グループ=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)


と出力されているようなのですが、わたしの場合は、
uid=89(vpopmail) gid=89

としか出力されておらず、gidに関しても(vchkpw)との関連性が取れてないのでは・・
と思われました。
その結果、POPbeforeSMTPの認証がうまくいってないっていう事はあるのでしょうか・・
もし何かアドバイスがあればよろしくお願いいたします。
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2005-09-30 23:44
こんばんは。
私は relay-ctrl 扱ったことが無いので、あまり深く突っ込めませんが…、

取り敢えず、↓のようなページが参考になるのかな、と発見してみました。
http://www.hirano.cc/install/pop-before-smtp.html

さて、その上で比較してみますと、
引用:
虎エモンさんの qmail起動スクリプトより
#For POP3
#envdir /etc/relay-ctrl relay-ctrl-chdir \
tcpserver -H -R -l $HOSTNAME -v 0 pop3 \
/var/qmail/bin/qmail-popup $HOSTNAME \
/home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir 2>&1 | /var/qmail/bin/splogger pop3d 3 &


これは簡単にすると、

 tcpserver 〜 qmail-popup ドメイン vchkpw qmail-pop3d Maildir

となり、処理の流れとしては、

 1. tcpserverが TCP接続受付、qmail-popup を起動
 2. qmail-popup が POP認証情報を受付
 3. qmail-popup が vchkpw を起動し、認証情報を渡す
 4. vchkpw が認証情報を判断、許可すれば qmail-pop3d を起動
 5. 以降、qmail-pop3d が tcpserver を介して POP通信

これですと、POPの認証成功を後のSMTPに利用する仕掛け ( POP before SMTP の肝になる筈 ) が入っていないと思います。
上記サイトに載っていた構成では、

 tcpserver 〜 qmail-popup ドメイン vchkpw relay-ctrl-allow qmail-pop3d Maildir

であり、

 1. tcpserverが TCP接続受付、qmail-popup を起動
 2. qmail-popup が POP認証情報を受付
 3. qmail-popup が vchkpw を起動し、認証情報を渡す
 4. vchkpw が認証情報を判断、許可すれば relay-ctrl-allow を起動
 5. relay-ctrl-allow が、SMTP通信を許可すべきIPアドレスを記録
 6. relay-ctrl-allow が qmail-pop3dを起動
 7. 以降、qmail-pop3d が tcpserver を介して POP通信

のようになっているのではないか…、と思いました。
虎エモンさんのサーバで、同様の構成になるかまでは確信できませんが、仕組みとして似たようなモノが必要になるのではないか、と感じています。

なお、これをコマンドラインでシミュレートする場合は、tcpserver が通信相手毎にセットする TCPREMOTEIP環境変数を、予め手動でセットしておく必要があるでしょう。

引用:
futaさまが上コマンドを行った際は、
出力の最後の行に、

uid=89(vpopmail) gid=89(vchkpw) 所属グループ=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)

と出力されているようなのですが、わたしの場合は、
uid=89(vpopmail) gid=89

としか出力されておらず、gidに関しても(vchkpw)との関連性が取れてないのでは・・
と思われました。


こちらに関しては、恐らく最重要なのは UID ですので ( Maildirにアクセスし、溜まったメールを読んだり、移動・削除するための権限が必要 )、GID に関してはそれほど気にしなくても良いのではないか、と思います。

以上、ご参考まで。

[ メッセージ編集済み 編集者: angel 編集日時 2005-09-30 23:46 ]

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