[PREVIOUS CHAPTER] [NEXT CHAPTER]
2 MEAD (Mail Error Analyze Daemon)


[概要]
この章は「エラーメールを解析して、メールが届かないメンバーのアドレスを
自動的にMLから削除する」方法についてです。
ML作成時に見本は作られているので/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管理者は自動的に削除したいとおもうもので
す。

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

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


2.2	動作

◯ デフォルト

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

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

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

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

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

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の変更だけです。

ML作成時(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]