Debian パッケージ courier-mta

localmailfilter

名称

localmailfilter -- ローカルメールフィルタ

書式


echo /usr/bin/maildrop >/etc/courier/maildropfilter

mkdir $HOME/.mailfilters

vi $HOME/.mailfilters/rcptfilter $HOME/.mailfilters/rcptfilter-ext

vi $HOME/.mailfilters/smtpfilter $HOME/.mailfilters/smtpfilter-ext

chmod 700 $HOME/.mailfilters

chmod 600 $HOME/.mailfilters/*

説明

maildropメールフィルタをCourierのメールフィルタリングプログラムとして用いると、 受信時に不要なメールを拒絶することが可能になります。

Courierのメールフィルタリングプログラム用インターフェースは maildropを必ずフィルタリングプログラムとして用いなければならないわけではなく、maildrop がそのインターフェースに一致しており組み合わせて使用できるからです。 maildropの代わりに、好きなメールフィルタプログラムを使用する場合にも 以下の説明はあてはまります。

ローカルのメールフィルタはローカルアカウントへのメールアドレスの場合のみ 機能します。 このフィルタリングは受信者が別のメールサーバのリモートアドレスの場合には 用いられません。 ローカルメールフィルタは標準で無効にされています。 有効にする場合は/etc/courier/maildropfilterファイルにフィルタリングプログラムのパスを記述する必要があります。

ローカルメールのフィルタリングは2つの段階で動作します:

受信フィルタ

Courierがローカル受信者を示すアドレスのメールを受信しようとするとき、 ローカルメールの受信フィルタリングがアドレスを受け入れる前に実施されます。 ローカルメールフィルタプログラムはその結果をCourierに伝えます: A) 無条件に受け入れ -- このメッセージはホワイトリストに入ります; B) 無条件に拒絶 -- このメッセージは無効です; C) このメッセージを許可するけれど、 メッセージ本文が受信した後に内容フィルタを再実施します。

内容フィルタ

メッセージ本文を受信し終わったら、C) の結果を返した受信者に対して メールフィルタリングが再び実施されます。 内容フィルタではメッセージの内容を検査し、受け入れるか拒絶するかCourierに 伝えます。内容フィルタはエイリアスアドレスには用いることはできません。

メールフィルタリングは外部からメールを受信するときに 欠くことのできない部分です。 メッセージが拒絶された場合、 Courierはそのメッセージを配送のために受け入れることを拒絶します。

ローカルメールフィルタプログラムは以下のように起動されます:

HOME=$HOME FILTER -D uid/gid -M filter

ローカルメールフィルタプログラムはrootアカウントからは起動されないので、 もし受信者のアカウントのファイルにアクセスする必要があるならば、 そのプログラムをrootにsuidする必要があります。 (as maildropはデフォルトでそのようにインストールされます。)

"uid/gid" はそれぞれ受信者のユーザIDとグループIDです。 受信者のホームディレクトリはFILTERの実行時に環境変数HOMEに設定されます。 "filter" の部分は次のように設定されます:

rcptfilter

外部メールサーバが受信者としてローカルメールアドレスを指定した場合の メールフィルタの呼び出しです。 FILTERは次の終了コードのどれかで終了しなければなりません: 0 - この送信者は無条件に受け入れられます; 99 - この送信者は受け入れられますが、 あとで内容のフィルタリングが必要です; その他 - この送信者は受け入れられず、メッセージを拒絶します。

smtpfilter

FILTERが終了コード 99で終了した場合、 このパラメータで FILTERが再実行されます。 外部メールサーバからメールを一旦受信したけれども、 まだ受け入れられていない場合にFILTERは呼び出されます。 FILTERが終了コード0以外で終了した場合、メッセージは拒絶されます。 FILTERが終了コード0で終了した場合、メッセージは受け入れられます。

rcptfilter-ext, smtpfilter-ext

もし受信者がサブアドレス "ext" - dot-courier(5) 参照 - を含む場合、 フィルタ名の後ろに、ダッシュとサブアドレス "ext" が付加えられます。

rcptfilter-alias-ext

ローカルに定義されたエイリアスの場合に呼び出される形式です。 ("ext" はエイリアス名です。)

rcptfilter フィルタの呼び出しは、もしメッセージがメーリングリストからのものであったり、 "ホワイトリスト"に入れるっていると考えられる場合、 0を返さなければなりません。 このフィルタリングモデルはメール転送プロトコルによってはうまくいかず、 信頼できるメッセージを明示的に"ホワイトリスト"に入れなかった場合、 同一メッセージの他人の受信者の貧弱なメールフィルタにより メーリングリストから自分の受信者が削除される恐れがあります。 終了コード0では、 他人のメールフィルタにより被害を受けることを防止します。 なおこれはメールフィルタがインストールされなかった場合のデフォルトです。

メールフィルタはメッセージを拒絶するときに診断メッセージを出力します。 この診断メッセージは可能ならば送信メールリレーに送り返されます。

メールフィルタプログラムには受信しているメールの状態を示す環境変数が 設定されます。 次の環境変数は標準で設定されています:

SENDER

メッセージのリターンアドレスです。

TCPREMOTEHOST, TCPREMOTEIP

メッセージが ESMTP 経由で受信される場合、 この環境変数は相手先のIPアドレスとそのホスト名です。 DNS逆引きレコードが存在しない場合はホスト名は空になり、 一時的に逆引きが失敗した場合は "softdnserr" に設定されます。

BLOCK2

相手先IPアドレスがブラックリストに載っている場合、 この環境変数が設定されます。/etc/courier/esmtpd ファイルを参照してください。他の環境変数も設定されます。 ESMTP経由で受信される場合、/etc/courier/smtpaccess設定ディレクトリで記述された環境変数が設定されます。

maildrop による実装

maildropではメールフィルタリングを次のように実装しています:

$HOME/.mailfilters

このディレクトリにフィルタリング指示ファイルを格納します。 このディレクトリおよびその配下のファイルには グループ/他者アクセス権があってはいけません。

smtpfilter*rcptfilter*

これらのメールフィルタリング指示ファイルは、 上記でのフィルタ呼び出し状況に直接対応します。 maildropの "import" コマンドを利用して環境変数にアクセスできます。 (これらのフィルタリングはmaildrop の組み込みモードとして動作しています。) フィルタリング指示ファイル中でEXITCODE 変数を適切に設定することにより、 メールを受け入れたり拒絶したりできます。

詳しくは maildrop(1)を参照してください。

エイリアス向けメールのフィルタリング

makealiases(8)で説明するように、 /etc/courier/aliases設定ファイルがメールのエイリアスのために用いられます。 システム管理者はエイリアス向けメールのフィルタリングで用いられる 専用のアカウントを作成しておくことができます。 /etc/courier/aliasfilteracct設定ファイルでエイリアス用アカウントのホームディレクトリを指定します。

例えば、/etc/courier/aliasfilteracctファイルに /home/adminを記述しておくと、Courierは次のようにフィルタリングプログラムを起動します:

HOME=/home/admin FILTER -D uid/gid -M rcptfilter-alias-name

ここで "uid/gid" は、指定されたホームディレクトリの 所有ユーザ・グループになります。 なお、"name" は完全名になります。 通常/etc/courier/aliases ファイル中で指定されるアドレスにはドメイン名は含まれません。 例えば "system"という名前のエイリアスを作成した場合、 /etc/courier/me設定ファイルの内容が example.comならば、 -Mオプションの引数は "system@example.com" になります。

なお、現在のところエイリアスに対しては 内容フィルタ (smtpfilters) の指定はできず、 受信フィルタのみとなります。

ファイル

/etc/courier/maildropfilter

ローカルメールフィルタリングプログラム

/etc/courier/aliasfilteracct

エイリアス向けメールで使用されるアカウント

関連項目

courierfilter(8), maildrop(1).