Procmail でメールフィルタ
このページは、メールサーバである、Postfix のインストール及び設定が完了し、実際に運用している事を前提としています。
Postfix の設定方法は、当サイト内の「 メールサーバ( Postfix ) 」で行っています。
さて、メールサーバ運用後、安定稼動していれば、更なるステップに挑戦したくなりますよね?
このページでは、Procmail というメールフィルタソフトを使用して受信するメールに対する様々なフィルタを実現させます。
ページ内コンテンツ一覧
基本的にメールサーバが受信したメールを特定のルールにより振り分ける時に使うソフトウェアです。
Webmin では、「 Procmail Mail Filter 」と表記されており、その名の通り、メールにフィルタをかけれます。
設定ファイルの記述方は、正規表現を多様しますが、慣れてしまえば比較的簡単に設定する事が可能です。
Postfix が受信する全てのメールに対するフィルタの設定や、特定のユーザに対するフィルタも柔軟に設定する事が可能です。
文字列のマッチングを行うことにより、広告(未承諾広告)を受信せずに削除する事も可能です。
まだまだ高度な事が出来そうですが、このページでは、簡単な「未承諾広告」削除の方法をご紹介致します。
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 の設定 」をクリック
「Postfix メール エージェント」メニューより、「ローカル配信」をクリックします。
「ローカル配信」メニューが表示されます。
そのページの下部に「メールボックス配信の代わりに使用する外部コマンド」という記入欄がありますので、
そこに「 /usr/bin/procmail 」( Procmail へのパス )を記入します。
図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 関連の設定は全て終了です。
設定が正常に反応しているかを十分にテストして下さい。