- PR -

qmail+vpopmailでPOP Before SMTPの関連です。

1
投稿者投稿内容
のんぴ
会議室デビュー日: 2005/02/09
投稿数: 3
投稿日時: 2005-02-09 18:42
もしかしたら、蒸し返しみたいな形になるのであればもうしわけありません。
実は私も「POP Before SMTP」問題で、かなり訳が解からなくなっております。
過去記事でいろいろあった対処方法を試してみましたが、解決しないので
お知恵をお貸し下さい。

状況(現在)は、クライアントから送信した際に
「メール送信中にネットワーク障害が発生しました。回線またはサーバーのトラブルの可能性があります。」
となり、LOG上には

tcpserver: pid 22130 from 219.111.104.222
tcpserver: warning: dropping connection, unable to read /var/www/vpopmail/etc/tcp.smtp.cdb: access denied
tcpserver: end 22130 status 28416

となってしまいます。

ここまでの経緯で、最初はよく解からなかったのですが、いろいろな記事や報告等を
見て、最終的に以下のコマンドでconfigureに至っております。

./configure --enable-roaming-users=y --enable-relay-clear-minutes=10 --enable-tcpserver-file=/var/www/vpopmail/etc/tcp.smtp --enable-tcprules-prog=/usr/local/bin/tcprules

tcp.smtp.cdbにアクセスが出来ないとなってしまうので、このサーバーで受け付ける
べきメール全てが拒否されてしまいます。
オーナーを変えてみたり、初期のtcp.smtpの中身を替えてみたり、インストールから
やり直してみたりしましたがダメです。
ちなみに、
---------------
open-smtpは都度変化OK
open-smtp.lockは日付は変化するが0バイトのまま
tcp.smtp.cdbはopen-smtpの内容に変化があれば日付は更新されている
---------------
と言う状況です。

現在の~vpopmail/etc内のパーミッション等の状況は、
---------------
total 24
-rw-r--r-- 1 root root 28 Feb 9 14:41 inc_deps
-rw-r--r-- 1 root root 45 Feb 9 14:41 lib_deps
-rw-r--r-- 1 root root 120 Feb 9 18:29 open-smtp
-rw-r--r-- 1 root root 0 Feb 9 18:29 open-smtp.lock
-rw-r--r-- 1 vpopmail vchkpw 74 Feb 9 03:26 tcp.smtp
-rw-r--r-- 1 vpopmail vchkpw 2560 Feb 9 17:40 tcp.smtp.cdb
-rw-r--r-- 1 vpopmail vchkpw 1107 Feb 9 14:41 vlimits.default
---------------
です。

起動スクリプトは、
---------------
#POP Before SMTP Setting
/usr/local/bin/tcpserver -H -R -l メールサーバー -v -x /var/www/vpopmail/etc/tcp.smtp.cdb -u $QMAILDUID -g $NOFILESGID 0 smtp \
/var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd 3 &
#Vpop
/usr/local/bin/tcpserver -H -R -l メールサーバー -v 0 pop3 \
/var/qmail/bin/qmail-popup メールサーバー /var/www/vpopmail/bin/vchkpw \
/var/qmail/bin/qmail-pop3d Maildir 2>&1 | /var/qmail/bin/splogger pop3d 3 &
---------------
です。

このままではメールを受け取る事も拒否されてしまう為、現在はqmailの起動時に
POP Before SMTPを行わず、/etc/tcp.smtpを読む通常だった動作にして
いますが、その場合はエラーも出ずに動作します。

参考まで、tcpserverが正常に動くのは、
---------------
#NO POP Before SMTP Setting
/usr/local/bin/tcpserver -H -R -l メールサーバー -v -x /etc/tcp.smtp.cdb -u $QMAILDUID -g $NOFILESGID 0 smtp \
/var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd 3 &
---------------
です。
(が、この状態では、内側のクライアントは送信可能ですが、外のクライアントはrcpthostsのエラーで送信できません。)

ですのでtcpserverが悪いのかとも思ったのですがそうでもないようです。
これも再インストールを試みてみましたが、状況に変化無しです。

こんな状況ですが、同様の状況で解決した方や状況から対策が判る方が
いらっしゃいましたら、お知恵拝借させてください。
(尚、多分関係ありませんが、qmail-adminも導入しております。)

よろしくお願いいたします。

参考にさせていただいた記事は、
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=2364&forum=10&11
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=799&forum=10&2
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=4906&forum=10&12
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=1614&forum=10&28
あたりです。(他もあったかもしれませんが・・・)
綾瀬
ぬし
会議室デビュー日: 2002/07/31
投稿数: 393
お住まい・勤務地: どっちも3階
投稿日時: 2005-02-10 09:55
こんにちは。

念のため確認したいのですが、vpopmailユーザのホームディレクトリは
/var/www/vpopmailで合ってますよね。
で、このホームディレクトリ自体のオーナーやパーミッションはどうなってるでしょうか。
また、その下のetcディレクトリもですかね。

---
確認する理由書いてなかったので補足追加。

qmail-smtpdを起動するユーザ(この場合はqmaildですかね)が
tcp.smtp.cdbを読めるようにする必要があったと思います。
それを踏まえて対象パスまでのパーミッションを確認してみてください。


[ メッセージ編集済み 編集者: 綾瀬 編集日時 2005-02-10 12:42 ]
のんぴ
会議室デビュー日: 2005/02/09
投稿数: 3
投稿日時: 2005-02-10 14:25
ありがとうございます。

vpopmailのユーザディレクトリは、/var/www/vpopmailに設定してあります。
このディレクトリは、vpopmail:vchkpwとなっており、ユーザ作成時-dで設定して
います。

drwx------ 11 vpopmail vchkpw 4096 Feb 9 17:34 vpopmail/

その後のvpopmailのインストールで配下は自動的に出来上がったディレクトリ
とファイル軍のままで、
-rw-r--r-- 1 root root 28 Feb 9 14:41 etc/inc_deps
-rw-r--r-- 1 root root 45 Feb 9 14:41 etc/lib_deps
-rw-r--r-- 1 root root 120 Feb 10 13:19 etc/open-smtp
-rw-r--r-- 1 root root 0 Feb 10 13:19 etc/open-smtp.lock
-rw-r--r-- 1 vpopmail vchkpw 74 Feb 9 03:26 etc/tcp.smtp
-rw-r--r-- 1 vpopmail vchkpw 2560 Feb 10 12:40 etc/tcp.smtp.cdb
-rw-r--r-- 1 vpopmail vchkpw 1107 Feb 9 14:41 etc/vlimits.default
-r--r--r-- 1 root root 7669 Feb 9 14:41 include/config.h
-r--r--r-- 1 root root 4262 Feb 9 14:41 include/vauth.h
-r--r--r-- 1 root root 1991 Feb 9 14:41 include/vlimits.h
-r--r--r-- 1 root root 7148 Feb 9 14:41 include/vpopmail.h
-r--r--r-- 1 root root 7669 Feb 9 14:41 include/vpopmail_config.h
-rw-r--r-- 1 root root 364030 Feb 9 14:41 lib/libvpopmail.a
の一部を除き全てvpopmail:vchkpwです。

今回もご指摘を頂き、気になったのはtcp.smtp.cdbの読める権限ってやつです。
tcp.smtp.cdbに対しては何もしていないので、qmaildは直接読めない気がします。
@ITのインストール記事の通りだと、このあたりは直接触れていないのですが、他の
サイトで「インストール後にデータベース作成を行う」とあって、
/usr/local/bin/tcprules /var/www/vpopmail/etc/tcp.smtp.cdb /var/www/vpopmail/etc/tcp.smtp.tmp < /var/www/vpopmail/etc/tcp.smtp
もやってみたり、ユーザをvpopmailにしてみる等の権限換えもやってみたりはしました。
しかし、access deniedと言われます。

qmaildで読めるように、は、具体的には何を?と思いましたが、とりあえずchownでqmaildにしてみました。が、結果はやはりaccess deniedでした。
「qmail-smtpdを起動するユーザがtcp.smtp.cdbを読めるようにする」に触れた所
(記事)に今まで出会ったことが無かったので、思いつきませんでした。
「POP Before SMTP」設定前は、tcpserverはqmaildが立ち上げていたのは変わらない
のですが、作成したtcp.smtp.cdbがroot:rootにもかかわらず正常に動いていたので
条件は一緒だと思い込んでいました。

ちなみに最初はvpopmailのバージョンは5.5.0でしたが、「できた」の報告が5.4.xの報告が多かったので、バージョンダウンで5.4.9、5.4.0も試しましたが結果は同じでした。

現在他に思いつく所が無くてお手上げになっています。
他に必要情報があれば公開します。

以上ですが、よろしくお願いいたします。

[ メッセージ編集済み 編集者: のんぴ 編集日時 2005-02-10 14:27 ]
綾瀬
ぬし
会議室デビュー日: 2002/07/31
投稿数: 393
お住まい・勤務地: どっちも3階
投稿日時: 2005-02-10 16:45
こんにちは。

引用:

vpopmailのユーザディレクトリは、/var/www/vpopmailに設定してあります。
このディレクトリは、vpopmail:vchkpwとなっており、ユーザ作成時-dで設定して
います。

drwx------ 11 vpopmail vchkpw 4096 Feb 9 17:34 vpopmail/



たぶんこれのせいですかねぇ。
このディレクトリのパーミッションを701にして試してみてもらえませんか?
(qmaildが中を見られれば良いので755とかでも構いませんが)
この下のetcも700になってるようなら、同じように変更してみてください。

今回の場合、tcp.smtp.cdb自体は644で誰でも読み込みはできるのですが、
このファイルがあるvpopmailのディレクトリが700なので、本人以外は
中に入れません。よってaccess deniedになったと思われます。

/etc/tcp.smtp.cdbが読めたのは、/etcのパーミッションが755であるためです。
(tcp.smtp.cdbのパーミッションは644になってるかと)

ユーザ作成時のデフォルトのパーミッションはディストリビュージョンによって
設定が違います。
記事書いた方が使ったディストリビュージョンが何かは判りませんが、
たぶんデフォルトで755とかになってたのではないでしょうか。

ちなみにパーミッションが何者なのかはご存知ですよね?
UNIX系触るなら避けて通れないと思いますので、もし知らないのであれば
是非調べてみてください。

#と、いろいろ書いてますが全く違ったらどーしよ・・

[ メッセージ編集済み 編集者: 綾瀬 編集日時 2005-02-10 16:51 ]
のんぴ
会議室デビュー日: 2005/02/09
投稿数: 3
投稿日時: 2005-02-10 18:13
おぉ〜〜〜(^^ゞ

初心忘れるべからず、です。
そこのパーミッションに気が付いてませんでした・・・
というか、インストールがうまく行き、vpopmail自体が動いているので、
思い込みでホーム内部だけ見ていて、すっかり見落としておりました。
リモートのPCから、無事送信できるようになりました。
一応、他の何に影響がでるか判らないので、vpopmailのディレクトリだけ
755の設定にしておきました。
~vmail/etcの内部は744なので、夜になったら744で様子を見てみようと思います。

(実は別件でも諦めていた事があったのですが、もしかしたらセキュリティのつもりで
実行用のユーザを作成し、作業ディレクトリをホームに設定したのが仇になっていた
化も知れません。そのディレクトリも700でしたので・・・)

う・う・う、スキル不足感じました。
ユーザーを作る際は、気をつけて確かめる必要がありますね。
ちなみに、TurboLinux 8 Serverです。
そういえば、ユーザディレクトリは700で作成されて、apacheで読めない時に変更した
記憶が蘇って来ました。お恥ずかしいです。

一つどうしても判らない事があるのですが、
tcprulescheck ~vpopmail/etc/tcp.smtp.cdb
と実行しても
rule :
deny connection
と出るだけで、どこかで見たルール事態が表示されないのは何か間違っているのかな?
と思って、通常利用していた/etc/tcp.smtpも見たのですが、

tcprulescheck /etc/tcp.smtp.cdb
rule :
allow connection

・・・。
違いと言えば、
/etc/tcp.smtpには、振り分けサーバーのIPと127の記述、許可したいドメインで構成し
その他はrcpthostsにまかせ:allowとしてDB化。
~vpopmail/etc/tcp.smtp.cdbは、振り分けサーバーからの受信は常に必要なので、
振り分けサーバーのIPと127の記述でそれ以外は、外向けサービスにしているので
SPAM防止でenyとし、「POP Before SMTP」のみに設定してます。

今回パーミッションで解決した(かも)事で忘れていたのですが、/etc/tcp.smtp
の方はもしかしたらうまく動作せずにrcpthostsで送信していたのかもと疑い、でも
vpopmailの方は今回、リモート側からの送信がうまく行ったので正常に機能したと
思います。
open-smtpにも、現在のリモートの動的IPが記録されていましたし、LOG上でもそのIP
で送信許可がされていました。

と言う事は、tcprulescheckでの表示(tcp.smtp.cdbの中身)はどう確かめればいいのか
と思いまして。ご存知でしたら、教えていただけると助かります。

第一弾の解決へのご指摘、ありがとうございました。
ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2005-02-10 21:31
引用:

のんぴさんの書き込み (2005-02-10 18:13) より:
一応、他の何に影響がでるか判らないので、vpopmailのディレクトリだけ
755の設定にしておきました。
~vmail/etcの内部は744なので、夜になったら744で様子を見てみようと思います。


ディレクトリのパーミッションとファイルのパーミッションとでは
意味が全く異なります。
綾瀬さんが書かれている通り701にするか、755あたりにしましょう。
1

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