procmailでメールフィルタリング

11月 19, 2009

Linux LPIC編。(第12章 メールサービス)

procmailはメール配信の際にフィルタリングサービスを行うMDA(Mail Delivery Agent)。

フィルタリングの設定は、名ユーザディレクトリ内にの.procmailrcファイルに記述する
(システム全体の設定は/etc/procmailrcで行う)。フィルタリングのルールをレシピ
と呼ぶ。この「レシピ」の記述方法は重要みたいですよ!

書式
:0 [フラグ] [:ロックファイル]
* 条件式
アクション


1行目のフラグは、procmail にメールを渡す方法を示す。
2行目の条件式は、処理の対象となるメールの条件を正規表現で記述する。
※この「正規表現」に注意・・・

条件式は複数指定可能で、その場合指定したすべてのメールにマッチした時点で
アクション行の処理が実行される。
なお、条件式を省略するとすべてのメールにアクショが実行される。

3行目のアクションで、ファイルの保存やメールの転送などの処理を指定する。
フラグ、条件式、アクションについて一応まとめておく。

フラグ
D 大文字と小文字を区別する
H メールヘッダ部分で検索
B メール本文で検索
c メールのコピーを残す
h アクションにヘッダ部分のみ渡す
b アクションに本文部分のみ渡す
※Hとh、Bとbの違いに注意〜

条件式
! 条件を否定
< 指定したバイト数以下なら処理
> 指定したバイト数以上なら処理

アクション
/dev/null 破棄する
ファイル名 指定したファイル名のファイルに格納する
ディレクトリ名 一意のファイル名を付けてディレクトリ内に格納する
ディレクトリ名/. ディレクトリ内に連番を付けて格納する
| パス名 指定したパスのプログラムに渡す
! メールアドレス 指定したメールアドレスに転送する


.procmailrcの記述例を。最初にホームディレクトリやログファイル名などについて、
適宜環境変数の設定を記述しておくとよい。

まずは一番わかりやすいものを。
以下はspamがサブジェクトに含まれるメールを破棄するための指示。
一般的なワイルドカート「*」ではなく、「.*」となることに注意。

:0
* ^Subject : .*spam.*
/dev/null


続けて以下は、差し出し人のメールアドレスにmessage.netが含まれるメールをmessage
ディレクトリに振り分ける設定。アドレス内の「.」が正規表現に解釈されないよう
エスケープしている。

:0
* ^From : .*message\.net.*
$MAILDIR/massage/.


正規表現には要注意、みたいだな〜。

以下はメールサイズが5000バイト以内であればtensou@message.netに転送する設定。

:0
* < 5000
!tensou@message.net


procmailを利用するには.forwardでも設定の記述が必要になる場合がある、とのこと
だが、、、ここは流して、最後にDovecotとCourier IMAP。

DovecotはPOP3,IMAP4に加え、POP3S,IMAPSにも対応したMDA。
Dovecotの設定は/etc/dovecot.confで行う。
以下の記述は利用するプロトコルを指定している。

protocols = imap imaps pop3 pop3s


ついでに名プロトコルがリッスンするポートは、順番に143、993、110、995となる。
まぁ、おさらいも兼ねて。
次に、メールボックスの形式にMaildir形式を選択する場合は、以下のパラメータを記述。

default_mail_env = maildir:~/Maildir


Courier IMAPはユーザ認証にCourier authentication libraryを必要とするので、
利用の際はインストールの上、authdeamondデーモンを起動させる。
加えてCourier IMAPはMaildir形式のメールボックスを利用するため、ホームディレクトリ
にメールボックスがない場合は、以下のコマンドで作成する。

$ maildirmake Maildir


お、終わった?。。先が見えてきた。。。
次回は「第13章 システムセキュリティ」だー!

出典
Linux教科書LPICレベル2(翔泳社)


Linux記事一覧はこちらをどうぞ
↓ ↓ ↓
Linux-index

Categories: LPIC

No Responses so far | Have Your Say!

Comments are closed.