FreeBSD 11.1 RELEASE - qmail - procmail
ウィルススキャンの結果ウィルス判定したものを破棄したり、あるメールアドレスからのメールを別のメールアドレスに転送したり、受信したメールの振り分けを行いたいことは多々あります。
「/home/ユーザ名/.qmail」に記述することであることである程度はできますが、少し応用の聞いた処理をしたいときは、「procmail」を使用します。
「procmail」のインストールは「初期設定」のところで一緒にインストールするように記述していますので、ここを読んだ方は既にインストール済かと思います。
(参考にしていたサイトがあったのですが、リンク切れになってしまいました)
- 1. 基本設定
- 2. 基本的な転送設定
- 3. 環境変数
- 4. スパムメールを転送する
- 5. 詐称メールを転送する
- 6. ブラックリストによる転送
- 7. 日本語キーワードによる転送
1. 基本設定
とりあえず、何の転送をしないにしても後で設定できるようにしておくには
「/home/ユーザ名/.procmailrc」というファイルを作成して
PATH=/usr/bin:/usr/local/bin
MAILDIR=$HOME/Maildir/
DEFAULT=$MAILDIR
と記述しておきます。ちなみにこの「/home/ユーザ名/.procmailrc」に記述する内容をレシピと言うそうです。
次に「/home/ユーザ名/.qmail」を以下のように書き換えます。
| /var/qmail/bin/preline /usr/local/bin/procmail ./.procmailrc
とりあえずは、ここまででOK。再起動も何も必要ありません。
このデフォルトを以降の新規ユーザにすべて適用するには
/usr/share/skel/dot.qmail
/usr/share/skel/dot.prcomailrc
を作成して、先ほどと同じ内容を記述しておきます。
2. 基本的な転送設定
特定アドレス(例:「hoge01@fromhoge.co.jp」)から来たメールを別のアドレス「hoge02@tohoge.co.jp」に転送するには「.procmailrc」に以下のように書きます。
# hoge01@fromhoge.co.jp から来たら hoge02@tohoge.co.jp に転送するのだ
0:
* ^From:.*hoge01\@fromhoge\.co\.jp.*
! hoge02@tohoge.ne.jp
# ・・・
これはおなじみ、行頭の「#」はコメント行になります。
コメントは、コメント行のみで、レシピを記述している行の途中に「#」を記述する場合、その後ろがコメントになるのではなくと「#」何らかの意味をあらわすものになるので注意が必要です。
0:
「0:」はこの行からレシピの記述がはじまるという意味です。
「0:」から次の「0:」かファイルの終端がくるまでが1つのレシピとなります。
* ^From:.*hoge01\@fromhoge\.co\.jp.*
の先頭の「*」はこの行が条件文であることを意味します。
「^From」は行頭が「From」という意味でメールヘッダについてご存知ならすぐわかるかと思います。
「^」を含めここの文は、正規表現を使用しています。procmail の正規表現については「コンピュータよもやま話 - 正規表現」で簡単に説明しています。
! hoge02@tohoge.ne.jp
の先頭の「!」はこの行で示すメールアドレスにメールを転送することを意味します。メールアドレスはスペースで区切って、複数アドレスを列挙可能です。こちらは正規表現でなく、生のメールアドレスで記述します。
この行の先頭に「!」をつけず、「/dev/null」とした場合、メールはどこにも転送も保存もされず、消えてなくなります。
3. 環境変数
主な(わたしが使っている)環境変数をあげておきます。
環境変数 | 意味 |
DEFAULT | どのレシピにも適合しなかった場合に格納する先を記述します。 通常は DEFAULT=$MAILDIR と記述します。 |
INCLUDERC | 他のファイルの記述をインクルードすることができます。 共通的な設定を使用するときに便利です。 INCLUDERC=ファイル名 と記述します。 |
LOGFILE | 処理内容のログをファイルに出力するときに LOGFILE=ファイル名 の型式で記述します。 |
MAILDIR | メールディレクトリの指定です。 qmail の場合、通常は MAILDIR=$HOME/Maildir/ と記述することになります。 |
VERBOSE | ログの内容を詳細に出力する際 VERBOSE=on と記述します。デフォルトは off です。 |
4. スパムメールを転送する
「SpamAssassin」を使用している場合、わたしは、スパムとみなしたメール受信専用のユーザをつくっておいてそこに集めるようにしています。誤認識する場合もあるので、その受信専用ユーザのメールをときどきチェックしています。
:0
* ^X-Spam-Flag: YES
! スパムメール受信専用メールアドレス
と記述します。
「SpamAssassin」でスパムと判断したメールにはヘッダに「X-Spam-Flag: YES」という行があるのです。
5. 詐称メールを転送する
よく「docomo.ne.jp」「ezweb.ne.jp」「softbank.ne.jp」「yahoo.co.jp」「gmail.com」を名乗ったスパムメールが来ます。スパムと判定されないこともありますが、これを前項の「スパムメール受信専用メールアドレス」に転送するようにします。
この手のメールは、From のアドレスと Return-Path のアドレスが違っているのです。
:0
* ^From:.*@docomo\.ne\.jp
* ! ^Return-Path:.*docomo\.ne\.jp>
! スパムメール受信専用メールアドレス
これは「From」が「docomo.ne.jp」で「Return-Path」が「docomo.ne.jp」でなければ「スパムメール受信専用メールアドレス」へ転送するという設定です。
6. ブラックリストによる転送
「SpamAssassin」からすりぬけても、ある特定のドメインから来るものは、確実にスパムであると判断できることがあります。
これを転送するとします。
/ディレクトリ/.blacklist というファイルを作成して、これにメールアドレスを1行に1アドレスずつ記述しておきます。
そして、レシピに以下のように記述します。
BLACKLIST=/ディレクトリ/.blacklist
# ブラックリストのメールアドレスが含まれていたら スパムメール受信専用メールアドレス に転送する
:0
* ? /bin/test -s $BLACKLIST
* ? (formail -x Received: -x From: -x Reply-To: -x Sender: -x Return-Path: -x From | fgrep -iqf $BLACKLIST)
! スパムメール受信専用メールアドレス
「* ? /bin/test -s $BLACKLIST」の行は、ブラックリストファイルの存在確認です。
「* ? (formail -x Received: -x ...」の行は、メールヘッダの「Received:」「From:」「Reply-To:」「Sender:」「Return-Path:」のいずれかにブラックリストに含まれるメールアドレスが存在するか?というチェックです。
存在すれば、「スパムメール受信専用メールアドレス」に転送することになります。
ブラックリストファイルに記述するメールアドレスは、部分文字列でも可能ですので、特定のドメインがわかっていれば、ドメインの文字列のみ記述しても OK です。
7. 日本語キーワードによる転送
スパムメールの判断のひとつに「From:」や「Subject:」によって判断できるものがあります。
例えば、「From:」に「天野友二」という文字がはいっていたり、「Subject:」に「援助交際」という文字がはいっていればあきらかにスパムメールなわけです。
これを判定するには以下のように記述します。
# 「援助交際」
:0
* ^Subject:.*iso-2022-jp
* ^Subject:\/.*
* ? echo "$MATCH" | nkf -meZ2 | sed 's/[[:space:]]//g' | egrep '援助交際'
! スパムメール受信専用メールアドレス
「* ? echo "$MATCH" | ...」の行は、「Subject:」内の文字列をエンコードして「援助交際」という文字列が存在するか?という判断になります。
|
|