[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[postfix-jp: 2155] Re: sleep中にコネクションが切断されたことを検出したい



柳澤です。

On Tue, 11 Jul 2006 19:42:57 +0900
SATOH Kiyoshi <satoh0@xxxxxxxxx> wrote:

> > > きにどうしよう、と思ってやめたんですが、こっちが返して無いうちにな
> > > んか送ってきてたら504で終了、とすることで、あまり大きな修正にせず
> > > にすみますね。
> > この実装でいった場合、EHLOの応答でpipeliningを通知しないように
> > smtpd_discard_ehlo_keywordsを設定する必要があります。
> > また、pipeliningを通知していないのに使ってくる(変な)クライアントもあ
> > るようなので、その点でも注意が必要だと思います。
> 
>  ご指摘、ありがとうございます。
>  ESMTPじゃないのにpipeliningしてきたら、まあそれはスパムとして判断さ
> せてもらっていいかな、と思っています。

ESMTPか否かを判定するにはreject_unauth_pipelining関数のように
これの結果を利用しても良いかも知れません。
strcasecmp(state->protocol, MAIL_PROTO_EMSTP) != 0 
それで、これの結果がtrueの場合にのみreject_unauth_pipeliningのための
プログラムを動かすという感じですね。

あと、外部向のsmtpdと内部利用者向けのsmtpdを分けて、内部向けsmtpdに
ついては甘々な設定にしておくと変なクライアントには対処できそうですね。
sleepの設定を使っている時点で分けていらっしゃると思いますが。

>  柳澤さんにいただいたアイデアで実装してみてますが、切断の検出や
> pipelining無視の検出は出来たものの、VSTREAM_GETCがブロックしてしまい、
> 思った遅延時間にならない、という問題が ^^;
>  ブロックしない、もしくはタイムアウト時間を0にとかできないのかな?も
> うちょいいじってみます。

タイムアウト時間を調整するなら、setsockopt(2)でやる方法とSIGALRMで
割り込んでもらう方法がありますね。前者だとこの設定がPostfix自体に
どういう影響を及ぼすか良くわからないという問題があります。
(前の値を保存しておいて、実行後に元に戻せば良いかも知れませんが)
後者はシグナルを使うのでsmtpdがマルチスレッドで動いていると
(たしか動いていないと思いますが)まずいことがあるかもしれません。

-- 
-------------------------------------------------------
Yoshisato YANAGISAWA <yanagisawa@xxxxxxxxxxxxxxxxxxx>
Dept. of Mathematical and Computing Sciences,
Graduate School of Information Science and Engineering,
Tokyo Institute of Technology.
_______________________________________________
Postfix-jp-list mailing list
Postfix-jp-list@xxxxxxxxxxxxxxxxxxxx
http://lists.sourceforge.jp/mailman/listinfo/postfix-jp-list

Follow-Ups
[postfix-jp: 2157] Re: sleep中にコネクションが切断されたことを検出したい, SATOH Kiyoshi
References
[postfix-jp: 2151] Re: sleep中にコネクションが切断されたことを検出したい, SATOH Kiyoshi
[postfix-jp: 2152] Re: sleep中にコネクションが切断されたことを検出したい, Takahiro Kambe
[postfix-jp: 2154] Re: sleep中にコネクションが切断されたことを検出したい, SATOH Kiyoshi

[検索ページ] [Postfix-JP ML Home]