1
添付ファイルを条件にした .procmailrc レシピ
最近 spam filter をすり抜けてくる Virus が多いので、zip 添付ファイルなぞプライベートでは殆んど使わないや、とフィルタしてしまうことにした。spamassassin の手前でフィルタしてしまえば CPU にもやさしい。Amavis 等で Virus をちゃんとフィルタする手は後回し。とりあえず以下のように、multipart ヘッダがあった場合に body の name=....zip 等の文字列を引っかけて、当該メールは tmp/ と言う Maildir のフォルダに落す。
:0
* ^Content-Type:.*multipart
{
:0B:
* ^.+name=.*(\.scr|\.exe|\.zip)
.tmp/
}
本当は「空白 + name=」のパターンと「Content-Type:.+name=」のパターンを書き分けてルールを厳しくしておきたかったのだが、空白の指定に
[[:space:]] が何故か効かなかったので
^.+ で誤魔化してしまった。procmail のレシピからはそのまま egrep にパラメータが渡るはずなのだが、何故駄目なんだろう。
2
postfix で特定の添付ファイルを拒否・廃棄する
そう言えば過去に postfix で似たようなフィルタを書いたなと思い見てみる。流石に .zip を全破棄するのは無理だが、.scr や .pif 程度なら全て破棄しても構うまい、と言うポリシーになっている。/etc/postfix/main.cf で
header_checks = regexp:/etc/postfix/header_checks
と言う設定を入れ、/etc/postfix/header_checks に以下のような設定を入れていた。
/^content-type:.*name=\".*\.scr\"/ DISCARD
/^content-type:.*name=\".*\.pif\"/ DISCARD
/^[ ]*(name|filename)=\".*\.scr\"/ DISCARD
/^[ ]*(name|filename)=\".*\.pif\"/ DISCARD
確か REJECT でなく DISCARD にしたのは、Mailman を使った ML 経由で来るメールにこの手のファイルが添付されていて、それを REJECT した結果、 Mailman が「このアドレスは使われてない」と判断して配送中止してくれたのが理由だったと思う。DISCARD ならば受取った後に /dev/null に落して終わるのでそうした問題は起きない。