m-filter

メールのフィルタープログラム (Ver 0.5, Nov, 2000 - May 2002, written by T. OSHIMA)
m-filter は、メールを標準入力から読んで標準出力や他のプログラムの標準入力に出力するフィルタープログラムで、メーリングリストの運営において From: To: や添付ファイルのコンテンツタイプを偽る最近のウイルスメールへの対策を主目的としています。

・multipart が設定されたメール(添付ファイル付きのメールやHTMLメール)から、添付ファイルやHTML部分を設定に従って除去します。
メーリングリスト運営でのウイルス除去などに適し、以下の機能を持っています。

プログラムのソースからプログラム m-filter は以下のようにして作成されます。
>gcc -O -o m-filter m-filter.c
Visual C では、
>cl -O m-filter.c

デフォルトの設定

1.許可しないタイプ
text/html

2.許可するタイプ
text/plain, text/rfc822, message/plain, message/rfc822

3.許可する拡張子
c, h, dif, patch, gz, lzh, zip, tar, tgz, tan, pl, pk, tex, dvi, tfm, sty, dtx, txt, doc, xls, htm, html, log, ps, eps, jpg, gif, bmp, pdf, wmf, emf, png, tif, tiff, jpeg

4.許可しない拡張子
exe, com, cmd, bat, pif, scr, vbs, lnk

multipart が設定されたメールに対し、コンテンツタイプ毎にみて、まず、許可しないタイプの部分を削除し(デフォルトでは text/html, これは -w オプションで設定を無視できる)、次に、許可するタイプの部分を通します。uuencodeされた添付ファイルの部分も同様です。

残りの部分から、許可する拡張子のリストにない拡張子をもつ添付ファイルは全て削除し、そのリストにある拡張子をもつ添付ファイルや添付ファイルでない部分は通します。

-x オプションを指定した場合は、残りの部分から、許可しない拡張子のリストにある添付ファイルを削除し、それ以外は通します。

-m オプションを指定した場合は、multipart が設定されたメールの中に、新たに multipart が設定されたものに対応します(ネスティングは3段まで)。デフォルトで multipart のネスティングがある部分や、3段を超える multipart のネスティングがある部分は削除します。

-u uuencode された部分は通す。

-r ヘッダに Reply-To: が設定してあると、その旨がメールの最後に書かれます。

-q<num> オプションを設定した場合は、 '>' で始まる行が 連続して<num>を超えた場合、超えた部分を削除します。デフォルトの<num>は 10 で、一般には -q15 のように指定します。

削除された場合、その旨のコメントが挿入されますが、-i オプションを指定した場合は、削除は行われず、削除の対象となる部分にコメントが挿入されます。

-o=<delete_log_file> これでファイル名を指定すると、そこに削除された部分が、メールヘッダの Date: と From: のデータと合わせて記録されます(順に追加保存)。

-p=<program> <parameters> このオプションは最後に指定する必要があります。 <parameters>をパラメータとして<program>を起動し、m-filter の出力を<program>の標準入力に渡します。<program>は、起動された m-filter と同じディレクトリに存在しなければなりません(セキュリティー上の観点からの機能。smrsh と同じ)

最近の ReadHat Linux では、sendmail では smrsh が使われ、aliases での設定、あるいはaliasesで指定したインクルードファイルでの設定で、m-filter からのパイプでメーリングリストプログラムに渡すことは書けませんので、このオプションを使います。以下は smrsh のもとで、メーリングリストプログラム fml を使う場合の include ファイルの設定例です。

"|/usr/local/bin/m-filter -m -q -o=/var/spool/ml/elena/delete.log
-p=/usr/local/fml/fml.pl /var/spool/ml/elena"

なお、m-filter を使わない場合に

"|/usr/local/fml/fml.pl /var/spool/ml/elena"

の設定で fml が正常に動作していることが前提で、

ln -s /usr/local/fml/fml.pl /usr/adm/sm.bin/fml.pl
ln -s /usr/local/bin/m-filter /usr/adm/sm.bin/m-filter

などとしておく必要があります。

smrshを使っていない場合の以下の設定と同じです。

"|/usr/local/bin/m-filter -m -q -o=/var/spool/ml/elena/delete.log
|/usr/local/fml/fml.pl /var/spool/ml/elena"


@<file> 許可しないタイプ、許可するタイプ、許可する拡張子、許可しない拡張子、削除部分の保存ファイル、を書いたパラメータファイルを指定できます。各項目がデフォルトの設定(m-filter.dat 参照)から置き換えられます。
ファイルでの指定の形式は、キーワード #ALLOW_TYPE, #DENY_TYPE, #ALLOW_EXT, #DENY_EXT, #DELETE_LOG, #END を用いて以下の例のようにします。 キーワードは行頭から書き、次の # で始まる行の前まで有効です。 なお、先頭が ; で始まる行は無視されます。
#ALLOW_TYPE
text/plain message/rfc822
#ALLOW_EXT
gz ps jpg tgz
pdf tif lzh zip
#DELETE_LOG=/usr/local/log/m-filter.log

実装する前に、以下のようにして、効果をテストしてみるとよいでしょう。
>cat <a mail> | m-filter <parameters> | less

Programs and Utility に戻る。