さくらインターネットなどで .mailfilter(maildrop) をいじれるときのスパム受信を減らす設定
最初に読むもの
まず基本はさくらのレンタルサーバ非公式FAQ。その上で、以下、自己責任で。
差出人が自分で、エンコードが ISO 2022-JP でないメール
英語だけのメールを書くと GyazMail などは、ISO 2022-JP でないメールを送るので、「自分の送ったメールはかならずISO 2022-JP」ではないのだが、海外とやり取りしている場合でも、「自分が差出人で、自分が受け取るメール」では十中八九日本語なので、破棄して問題はないという考え。
……というより、基本的には、「自分が差出人だったら、僕の場合は、送信箱に残っているので、最悪UTF-8のメールであっても、消えてくれてもあまり問題はない」ということもある。
if (/^From:.*account@example.com/ && !/^(C|c)ontent-(T|t)ype:.*charset=.*(ISO|iso)-2022-(JP|jp).*/) { exit }
件名に特定の文字列を含むメール
スパムメールの件名は一定でないので、あまり使えない。また日本語の文字列はそのままだと判定できないので、このページの下の方に対処法をメモしておく。
if (/^Subject:.*hoge/) { exit }
おかしなFromは問答無用で削除
.mailfilterの見通しをよくするため外部ファイルを参照。下記例では「blockfrom.dat」を作って、.mailfilterと同じ階層に設置。
blockfrom.dat の内容は、.mailfilterの設定にもよるが、大文字小文字は区別しないので、「0NLINE」でも「0nline」でも、判定対象になる*1。
VIAG(L|l|R|r)A 0NLINE R(0|O|o)LEX
この例では、該当するメールは破棄。
if ( /^From:\s*(.*)/ && lookup( $MATCH1, "blockfrom.dat" ) ) { exit }
日本語のスパム
悩ましいのは日本語のスパム。上述の blockfrom.dat や あるいは blocksbj.dat などをつくって、そこに日本語を書いても、上述のようなやり方だと、判定から漏れてしまう。
ので、差出人や件名をnkfでエンコードしてから判定するようにすれば、blockfrom.dat に書いた日本語を判定に入れることができるようになる*2。
ただ、個人的には、上述のような英語の blockfrom については、けっこう自信を持って消えていただいてかまわない文字列を設定できていると思われるに対して、ここに大胆に日本語を入れていってガンガン削除してしまうと、誤判定が怖いので、このサンプルではヘッダを追記するにとどめる。
blockfrom
#blockfrom - UTF-8 #ADD_SPAM_FLAG="X-Spam-Flag: YES" #if ( /^From:\s*(.*?)\s/ ) #{ # FROM=`echo $MATCH1 | nkf -mw` # if( lookup( $FROM, "blockfrom.dat" ) ) # { # xfilter "/usr/local/bin/reformail -A'$ADD_SPAM_FLAG'" # } #}
blocksbj
こちらは今のところ大丈夫みたい。
SUBJECT=`cat | grep Subject | nkf -mw` if( lookup( $SUBJECT, "blocksbj.dat" ) ) { xfilter "/usr/local/bin/reformail -A'$ADD_SPAM_FLAG'" }
あとはspamassassinだのみで
やはり誤判定はこわいので、念のためスパムフォルダに振り分け
if ( /^X-Spam-Level: \*{20,}/ ) { to "maildir/.spam/" }
cron?
まだ試してないけど、cronで、一ヶ月たったスパムメールは削除できるんではないだろうか。こんなかんじ。
find /home/USERNAME/MailBox/ACCOUNT/maildir/.spam/cur/ -type f -ctime +31 -exec rm -f {} \;
というか、Gmailでも、1ヶ月前のスパムは消す設定になっているので、さくらでも消せるようになるといいのに。
ジャンル: Web