最近おうちサーバに greylisting を導入して、そしたら全然スパムが来なくなって感動したよというお話。
やったことと言えばたいしたことはない。Postfix に milter-greylisting を以下の greylist.conf で導入したくらい。設定にあたってはJULYの日記を大変参考にさせていただいた。
list "my network" addr { 127.0.0.1/8 192.168.1.0/24 }
quiet
extendedregex
greylist 5m
subnetmatch /24
timeout 12h
spamdsock inet "127.0.0.1:783"
nospf
racl whitelist list "my network"
racl greylist domain /^\[.+\]$/ msg "S25R rule 0"
racl whitelist spf pass
racl greylist domain /^[^.]*[0-9][^0-9.]+[0-9].*\./ msg "S25R rule 1"
racl greylist domain /^[^.]*[0-9][0-9][0-9][0-9][0-9]/ msg "S25R rule 2"
racl greylist domain /^([^.]+\.)?[0-9][^.]*\.[^.]+\..+\.[a-z]/ msg "S25R rule 3"
racl greylist domain /^[^.]*[0-9]\.[^.]*[0-9]-[0-9]/ msg "S25R rule 4"
racl greylist domain /^[^.]*[0-9]\.[^.]*[0-9]\.[^.]+\..+\./ msg "S25R rule 5"
racl greylist domain /^(dhcp|dialup|ppp|[achrsvx]?dsl)[^.]*[0-9]/ msg "S25R rule 6"
racl whitelist default
dacl greylist spamd > 10
概ね S25R を用いた普通の greylisting である。判断基準は以下の通り。
- ローカルからのメールは配送する。
- DNS の逆引きができない場合は greylist に入れる。
- SPF がパスする場合は配送する。
- S25R 条件に引っかかる場合は greylist に入れる。
- spamassassin でスコアが 10 以上だった場合は greylist に入れる。
- 上記いずれにも該当しなければ配送する。
greylist 入りしたメールの再送受理は 5 分後から 12 時間後までで、再送が来たら配送する。milter-greylist のデフォルトの状態だと SPF を通ったメールは配送するんだけど、これだと結構抜けてきちゃうやつがいたので、DNS の逆引きを先に見ることにした。spamassassin のスコアを 10 以上にしているのは、ちょっと検証不足で不安だったから。
spamassassin を通る前までで 9 割くらいのスパムが遮断できていて、spamassassin まで入れると今のところほぼ 10 割遮断できている。スパマーというのは驚くほど再送してこないもので、greylist で一時的に断わるだけでメール自体来なくなっちゃうみたい。
一方でスパムじゃないメールが greylist に入っちゃうと遅配が起きるわけだけど、これまでに約 1000 通中 1 通だけ。まあこういうのは地道にホワイトリストに入れるなりしていけばいいんでしょう。意外と SPF 対応しているメールサーバというのは多いようで、SPF パスで通すとかなり効率的にスパムだけ弾けるようです。
ベイジアンフィルタよりもずっと安価で効果も高いので、設定できる環境にある人は設定しないと損ですよ!