Linux で自宅サーバ [ Home Server Techncial ]

>>トップページに戻る

 Procmail でメールフィルタ

このページは、メールサーバである、Postfix のインストール及び設定が完了し、実際に運用している事を前提としています。
Postfix の設定方法は、当サイト内の「 メールサーバ( Postfix ) 」で行っています。

さて、メールサーバ運用後、安定稼動していれば、更なるステップに挑戦したくなりますよね?
このページでは、Procmail というメールフィルタソフトを使用して受信するメールに対する様々なフィルタを実現させます。

ページ内コンテンツ一覧

▲ページの最上部に戻る

 Procmail とは何か?

基本的にメールサーバが受信したメールを特定のルールにより振り分ける時に使うソフトウェアです。
Webmin では、「 Procmail Mail Filter 」と表記されており、その名の通り、メールにフィルタをかけれます。
設定ファイルの記述方は、正規表現を多様しますが、慣れてしまえば比較的簡単に設定する事が可能です。

Postfix が受信する全てのメールに対するフィルタの設定や、特定のユーザに対するフィルタも柔軟に設定する事が可能です。

文字列のマッチングを行うことにより、広告(未承諾広告)を受信せずに削除する事も可能です。
まだまだ高度な事が出来そうですが、このページでは、簡単な「未承諾広告」削除の方法をご紹介致します。

▲ページの最上部に戻る

 Procmail の前準備

Procmail がサーバ機にインストールされているかをチェックします。
もし、インストールされていなければ当然、インストールしなければなりませんが、
Vine Linux 2.5 にはデフォルトでインストールされますので、インストールの方法に関しては、割愛致します。

では、早速、Procmail がインストールされているかをチェックしましょう。
以下のコマンドでチェックできます。
$ rpm -qa|grep procmail

インストールされていれば、以下の結果が返ってきます。
procmail-3.22-7

Procmail がインストールされていれば、次に Procmail へのパスを以下のコマンドで調べます。
$ which procmail

Procmail へのパスが表示されます。
/usr/bin/procmail

上記、2つのコマンドで正常に結果が返ってくれば、Procmailは正常です。

次に、Postfix で、Procmail を使用する様に Webmin で設定します。

Webmin にログイン後、上記メニューより「サーバ」をクリックし、
Postfix の設定 」をクリックします。

[ 図P-001 Webmin で「 サーバ 」>「 Postfix の設定 」をクリック ]

図P-001 Webmin で「 サーバ 」>「 Postfix の設定 」をクリック

Postfix メール エージェント」メニューより、「ローカル配信」をクリックします。
「ローカル配信」メニューが表示されます。
そのページの下部に「メールボックス配信の代わりに使用する外部コマンド」という記入欄がありますので、
そこに「 /usr/bin/procmail 」( Procmail へのパス )を記入します。

[ 図P-002 「 Postfix メール エージェント 」>「 ローカル配信 」をクリック ]

図P-002 「 Postfix メール エージェント 」>「 ローカル配信 」をクリック

記入し終えたら、最下部の「保存して適応」ボタンをクリックし、設定を反映させます。
これで、Postfix 側の設定は終了です

直接、Postfix の設定ファイルである、「 /etc/postfix/main.cf 」を編集する場合は、以下の1行を追加します。

mailbox_command = /usr/bin/procmail

▲ページの最上部に戻る

 「未承諾広告」を拒否する

Procmail はデフォルトで、/etc/procmailrc というファイルを使用します。
上記のパスは、Vine Linux のデフォルトです。

まず、Procmail は、全体的なメールフィルタのルールとして、 /etc/procmailrc の内容を適用させます。
これは、受信するメール全てが対象になります。

もちろん、各アカウント(ユーザ)毎に設定も可能です。
各ユーザ毎に設定する方法は、後述します。

では、全体的な設定の例として、
『受信メールのタイトル部分に「未承諾広告」という文字列があれば Procmail に処理をさせる』
という設定をしてみます。

vi エディタでも、テキストエディタでも何でもいいので、/etc/procmailrc を編集します。
もし、procmailrc というファイル名がなければ作成します。
procmailrc の内容は以下の通りです。

下記の「 # 」で始まる行はコメント行ですので、実際の設定時には不要です。

# ログファイル名を指定
LOGFILE=$HOME/procmail.log
# ロックファイル名を指定
LOCKFILE=$HOME/.lockfile
# メールを保存するディレクトリを指定
MAILDIR=$HOME/

# ↓これをレシピと言います。
:0
* ^Subject:.*iso-2022-jp
* ^Subject:.*\/.*
* ? echo "$MATCH" | nkf -me | egrep '未承諾広告'
/dev/null

ここまで打てたら保存します。
最終行の「 /dev/null 」は破棄という意味です。
もし、破棄するのが嫌だという場合は、「 spam/. 」(最後は「 . (ドット)」が必要です)と書き換えると、
各ユーザのホームディレクトリ内に spam というディレクトリが自動的に作成され、ファイル名が1から連番で削除されたメールが保存されて行きます。

設定したレシピが適応されない場合は、通常通りのメールの処理になり、
/var/spool/mail 」以下のユーザ名のファイルにメールを受信します。

▲ページの最上部に戻る

 ユーザ個別の設定

Procmail はユーザ個別にレシピ(フィルタのルール)を書く事が可能です。
書式も procmailrc と全く同じです。

ユーザ毎にレシピを書くには以下の2つのファイルが必要です。
.forward
.procmailrc
この2つのファイルは、対象のユーザのホームディレクトリに設置します。
どちらも「. (ドット)」で始まるファイル名です。

先ずは、「 .forward 」ファイルを対象のユーザのホームディレクトリに作成します。
.forward の内容は以下の通りです。

"|IFS=' ' && exec /usr/bin/procmail -f- || exit 75 #username"

上記赤文字の、「 | 」はパイプラインです。

ここまで打てたら保存します。
「" (ダブルクォーテーション)」も含みますのでご注意下さい。
/usr/bin/procmail 」は、ご自分の Procmail までのパスを記述します。
また、末尾の「 username 」部分は、対象の一般ユーザ名を記入します。

次に、「 .procmailrc 」を作成します。
これも、対象のユーザのホームディレクトリ内に設置します
この .procmailrc と先ほどの .forward と対になっていますので、両方とも必ず設置します

基本的に、全てのユーザ向けの「 /etc/procmailrc 」で未承諾広告メールは削除の設定をしていますので、それ以外のレシピを紹介します。

.procmailrc の内容は以下の通りになります。

下記の「 # 」で始まる行はコメント行ですので、実際の設定時には不要です。

# ログファイル名を指定
LOGFILE=$HOME/procmail.log
# ロックファイル名を指定
LOCKFILE=$HOME/.lockfile
# メールを保存するディレクトリを指定
MAILDIR=$HOME/

# レシピ1 件名に「 TEST 」を含むメールを、カーボンコピーで
# user1@example.com と user2@example.com に転送します。
:0 c
* ^Subject: .*TEST.*
! user1@example.com,user2@example.com

# レシピ2 メールの件名に「 go 」を含むメールが来たら特定の処理(コマンド)を実行する
:0
* ^Subject: .*go*
| /usr/local/****** # 実行するコマンドのフルパス

これで保存します。

これで、Procmail 関連の設定は全て終了です。
設定が正常に反応しているかを十分にテストして下さい。

レシピは結構柔軟に書けるので、今後色々な事が出来そうな予感がします。

▲ページの最上部に戻る

Copyright© Home Server Technical. All Right Reserved.
webmaster@miloweb.net