Procmailを利用したメールフィルタリング設定方法


Last modified 2004.08.12 By Kimiya Kitani.

はじめに
   メールサーバーでブロックするのはよほど悪質なケースや明確にウィルスだと分かりうるケースのみです。しかしながら個人レベルでブロックしたい場合もあるでしょう。もちろんいくつかのメールソフトウェア上で振り分け機能やブロック機能を使うこともできますが、できればメールが届く前にそういうフィルタをすることでよけいな手間を省きたいと考える方々も多いはずです。ここでは個人レベルで簡単にブロックする方法を説明します。

設定
設定例全文はこちら>>>
  1. 環境設定ファイル作成
    ホームディレクトリ以下に「.procmail」を作成します。ここにフィルタ設定を書くことで、このまるたご屋では自動でフィルタがかかるようになります。
  2. 環境設定
    PATH=/usr/bin/
    LOGFILE=$HOME/Mail/procmail.log
    MAILDIR=$HOME/Mail
    LOCKFILE=$HOME/Mail/.lockmail
    DEFAULT=/var/spool/mail/username
    上記の5つを最初に設定してください。注意すべきはPATH, LOGFILE, DEFAULTです。下記にそれらの説明をします。
    PATHprocmail本体がある場所のディレクトリを指定してください。
    LOGFILEメールログです。ブロックしたのか、素通ししたのかの全記録が残ります。自分で設定したブロックが正しく動作しているかのチェックはここを見て判断します。(例はこちら>>>
    DEFAULTusernameの所に、自分のユーザ名をいれましょう。この設定は自分のメールスプールを指定するものです。
    環境設定がかけたら次はフィルタリング設定です。まずフィルタリング設定例をみてみましょう。それを見れば分かるはずです。空白が必要な部分で分かりづらい部分には「空白」という文字を入れています。1バイト空白(半角空白)に置き換えてください。
  3. フィルタリング設定例(メールヘッダブロック)
    1. 文字コードブロック
      :0空白
      * ^Content-Type:.*charset=.*ks_c_5601.*
      /dev/null

      :0空白
      * ^Content-Type:.*charset=\"euc-kr\".*
      /dev/null

    2. サブジェクトブロック
      :0空白
      * ^Subject: IMPORTANT.* /dev/null

      :0空白
      * ^Subject: =??ISO-2022-JP??B??GyRCTCQ?+NU.*OS05c.*
      /dev/null

  4. フィルタリング設定例(本文ブロック)
    :0B空白
    * .*content=\"text/html; charset=euc-kr\".*
    /dev/null
  5. フィルタリング詳細説明
    :0 :0の後に必ず空白を一つ含めること!(必須)
    :0B :0の後に必ず空白を一つ含めること!(必須)Bをつけるとヘッダチェックから本文チェックへ切り替わります。
    * [正規表現]最初の*はヘッダもしくは本文すべてを意味する。たいていは*のままでよいです。
    /dev/nullゴミ箱に捨てるという意味。条件にヒットしたものを拒否するのではなく、ゴミ箱へ直行させるという意味合いになります。
    その他サブジェクトブロックで特に日本語の扱いについては、MIME変換したものを記載すること。すなわち=??ISO-2022-JP??から始まるものです。この判別は日本語を件名につかって、自分自身にメール送り、そのメールヘッダのソースを見ることで、調べることができるでしょう。ここでの例は、先頭に「未承諾広告」がついているものをブロックするという意味になります。まぁ一般的な広告メールをブロックする方法ですね。日本の場合には産業経済省が法令として出してるもんです。「!広告!」が最初決められたものだったんですが、漠然としすぎるということで、「未承諾広告※」に切り替わったわけです。
  6. 正規表現
  7. .:任意の一文字
    *:直前の文字の0文字以上の連続文字列
    .*:0文字以上の任意の文字列
    .+:一つ以上の任意の文字列
    []:[abc]の組み合わせで、a or b or cのいずれかの文字。
    ():(A|B|C)の組み合わせで、A or B or Cのいずれかの文字列。
    . * + [] () はそれぞれ特殊記号であるため、それを通常文字として扱う場合には、\(バックスペース or ¥マーク)を入れなければならない。

  8. 拡張子ブロックによるウィルスフィルタリング
    例).exeファイルをブロック。
    :0B空白
    * ^Content-Type:.*name=.*\.exe.*
    /dev/null
    :0B空白
    * .*filename=.*\.exe.*
    /dev/null

    大抵の場合、.exe, .pif, .scr, .com, .lnk, .vbs, .bat, .htaぐらいの拡張子をブロックしておけばよいでしょう。
  9. 2個目に「:」を付ける場合(ロックファイル)
    :0:
    * ^From: .*@sample.com.*
    $HOME/sample.mbox
    のようなケース。

    MailDir形式保存ならば必要なし。mboxなど同一ファイルに追加書き込みしていく場合には,ロックファイルの必要性が生じる。ロックファイルを使う場合のみ最後に「:」を付けるのです。その後にファイル名を入れればそれがロック名となりますが,なければ自動的に名前が付きます。