[PREVIOUS CHAPTER] [NEXT CHAPTER]

2 MEAD (Mail Error Analyze Daemon)

    [概要]
    この章は「エラーメールを解析して、メールが届かないメンバーのアドレスを
    自動的にＭＬから削除する」方法についてです。
    ＭＬ作成時に見本は作られているので/etc/aliasesに一行足せば動きます。カ
    スタマイズはコマンドラインオプションで行ないます。perlで書いたHOOKなど
    は設定ファイルを使って読み込ませることができます。
    設定 		=> 2.5
    設定ファイル	=> 2.6
    オプション	=> 2.7

    まだβテストなので時時間違うかもしれませんのでよろしく〜

    2.1	Introduction

    エラーメールは普通 $MAINTAINER に帰ってきます。

    Example:
     From:    Mail Delivery Subsystem <MAILER-DAEMON@DOMAIN.OR.JP>
     Subject: Returned mail: User unknown
     To:      xxx-admin@shumi.fml.org
     Date:    Sun, 21 Jun 1998 16:17:22 +0900 (JST)

     ... while talking to mail.domain.or.jp.:
     >>> RCPT To:<xyz@ar.domain.or.jp>
     <<< 553 <xyz@ar.domain.or.jp>... User Unknown
     550 xyz@ar.domain.or.jp... User unknown
    ~.q

    特に年度末などの切替わり時期には連絡もなく勝手にいなくなるユーザが多数
    いるので、このようなメールを無数にうけとります。そして管理者が削除しな
    ければなりません。そのためＭＬ管理者は自動的に削除したいとおもうもので
    す。

    帰ってくるメールはデフォールトではMLを作成したユーザへフォワードされる
    ように設定されています(aliasesファイルを参照)。この user unknown など
    の情報を集めて『Ｎ回(デフォールトは5回)エラーが帰ってきたらそのユーザ
    を削除する』ようにすれば自動的に存在しないユーザをＭＬから削除すること
    ができます。そのためのプログラムが mead.pl (libexec/mead.pl) です。

    便利ですが、設定の手違などあると困るので設定はくれぐれも慎重に。

    2.2	動作

    ◯ デフォルト

    shell script をつくります。自動削除はしてません

    ◯ エラーと判断されるのはどういう時か？

    実際のところ流量に依存しています。過去 14 日間で、アドレスごとに

    	理由			得点
    	ーーーーーーーーーーーーーーーー
    	user unknown なら   + 1    点
    	それいがいは        + 0.25 点

    で合計をとって、これが 5 点をこえたら削除対象にします。
    ＃ メールサーバの設定を間違った瞬間にＭＬで一気に記事がながれて
    ＃ user unknown が大量発生すると削除されたりしますね  ;D
    ＃ でも、よっぽど凄いＭＬでない限りそういう間違い
    ＃ 消去は少なくなるようなぱらめーたのつもり

    XXX 今一つ良いアルゴリズムでない気もするし、
    XXX といって代わりのよいアルゴリズムはどういうのがいいかね

    2.3	ファイルについて

    current の mead.pl にはそれ以外のファイルがあります :-)
    errormaillog はキャッシュとして、使っています。その辺は一緒ですが、
    それに付け加えて「このあどれすを削除するぞ」と決めたアドレスを

    	/var/spool/ml/mead/dead_addrs	( mead 専用の作業場所 )
    とか
    	/var/spool/ml/elena/dead_addrs	( elena MLのエラーを解析する mead )

    というファイルに記録しています。一行一アドレスです。

    あと、判断できなかったけど、たぶんエラーだと疑われるアドレスを
     error_addr.hints に吐きます。smtpfeed -F オプションをつかったエラー追
    跡結果などが、このファイルに記録されるはずです。

    2.4	理論

    帰ってきたエラーメールが mead.pl に入力として渡される。5XX のような行
    からエラーになるアドレスをわりだし、キャッシュします。5(がデフォールト)
    回エラーが来たら
    	『そのアドレスを削除すべきことをしらせる』(デフォールト)
    か
    	『makefmlを呼び出して自動的に削除する』
    ことをします。

    2.2A以降(2.2.1, 2.2A)では、各MTA依存のフレーズの解析やDSN(Delivery
    Status Notification)も見ています。

    2.5	セットアップ

    パラメータをいじらないなら/etc/aliasesの変更だけです。

    ＭＬ作成時(makefml newml を実行した時)に

    	include-mead

    が作られています。また生成される見本の aliases ファイルには mead を使
    う設定がコメントアウトされた状態で入っています。meadを設定するためには
    /etc/aliasesにその該当する行のコメントをはずしたものをつけ足します。

    elena ML の例:

    	elena-admin: fukachan

    	# MEAD; If you use mead.pl,
    	#elena-admin: fukachan, :include:/var/spool/ml/elena/include-mead

    を

    	# elena-admin: fukachan

    	# MEAD; If you use mead.pl,
    	elena-admin: fukachan, :include:/var/spool/ml/elena/include-mead

    のように入れ換えます。/var/spool/ml/elena/include-mead は mead.pl を起
    動するように最初から設定されています。

    2.6	設定ファイル

    コマンドラインの -f config-file オプションで設定ファイル(perl script)
    を指定できます。コマンドラインオプションはこのファイルの後に評価される
    ので、コマンドラインオプションの方が強いです。
    デフォールトでは設定ファイルは使っていません。すべてコマンドラインです。

    e.g.
    	mead.pl -f /usr/local/fml/mead_config.ph ...

    2.7	mead.pl コマンドラインオプション

    Usage: mead.pl [options]

    Options:
        -h              help
        -d              debug mode on
        -m mode         mode; report or auto ('report' in default).

        -f configfile   load configuration from this file at the first
                        Other command line options can overwrite it.
        -e number       expire of error data cache (unit is 'day')
        -i number       check interval (unit is 'second')

        -C cachefile    mead data cache file
        -D directory    $DIR (mead.pl working directory)
        -E directory    $EXEC_DIR (e.g. /usr/local/fml)
        -S directory    $ML_DIR (e.g. /var/spool/ml)
        -M path         makefml path

        -p priority     priority, e.g. -p uu=2,uh=0.5
                        (user unkwown == 2, host unkown == 0.5)
                        [KEYWORD]
                                uu: unknown user
                                uh: unknown host
                                ua: unknown address
                                us: service unavaiable
                                default: default value for phrases not above

        -k action        'bye' is default,  off or bye.
                         change the action when mead detects a bad address.

        -l limit         limit whether we should do action defined by '-k action'

        -z sendmail      alternative sendmail path

    ○ -k オプション

    1998/10/1
       mead.pl -k command option (default 'bye')

    If you 'off' the users who causes "unknown user" error "not reachable",
    you can  use '-k off' option.

    -k off とすると(デフォールトではユーザを自動的に抜いてしまいますが)
    それを OFF の状態にします。

    2.8	問題点

    forward の forward はさすがに detect できないんだよねぇ…

    	fml -> a@b.org	-> a@xyz.com (error)

    エラーメールは a@b.org に送ったはずなのに xyz.com でエラーになる

    	 550 <a@xyz.com> user unknown

    これは fml 側の配送リストにはないので削除できないわけです。

    2.9	A few tips

    1998/10/10
       mead.pl (Mail Error Analyze Daemon);
    	Ignore Japanese Strings (which may cause an error)

    	日本語を無視(誤動作する)。可能性のある文字列を全部見て
    	sort |uniq してキャッシュする(first match では user unknownが
    	上書きされたりするかもしれないのを回避)

    2.10	VERPs (Variable Envelope Return Paths)

    とりあえず qmail の場合についてのみ説明します。

    VERPs については
    http://www.jp.qmail.org/qmaildoc/RFC/RFCVERP.html

    $USE_VERP を設定すると $MAINTAINER アドレスをかえて qmail が送り出しま
    す。

    	$USE_VERP = 1; (default 0)

    2.2C#6 (1999/06/19) 以降のversionではmakefml が作る見本の

    makefml config では

       top menu => SECURITY_AND_FILTER => CHECK_MAILBODY_CKSUM => "y"

[PREVIOUS CHAPTER] [NEXT CHAPTER]