Sender ID/SPF導入

1,2ヶ月前からGreylist方式のspam対策を施してきた。
これはメール受信を数十分間凍結させ、後から再送しないと受け付けない方式である。
しかし、この方式では一番弾きたいしつこいspamが弾けないことが実運用してみてわかった。

Greylist方式では、最初に送ってきたメールのFrom, To, 送信元IPなどを記録する。
そして、いったんリターンコード450や451で返して、あらかじめ設定された時間は凍結する。
凍結が解除した頃に再送されてきたときに初めて受信する。

これは「spam送信プログラムは再送なんてしない」という考えに基づいている。
しかし、実際には「再送」ではなく「何度も送ってくるspam」には無力だ。

Greylistの副作用として、送信側のメールサーバによっては450のような一時エラーで返すと、すぐ優先順位の低いMXに送信してしまうものがあること。
私のメールサーバは古いメールサーバを予備として優先順位を下げた状態で置いていたら、こちらに何通も気づかない間に重要なメールが入っていた。

そこでGreylist方式をやめ、SenderID/SPFに基づく拒否設定を施してみた。

FreeBSDのportsより、postfix-policyd-spf を導入し、なんとか設定してみる。
ネットで検索して参考にしたサイトには、これでRecived-SPFなるSPF検証結果を示すヘッダが付くと書いてある物があったが、実際には付かなかった。同じ名前でperl版とcで書かれたものがあるらしく、別物らしい。
ヘッダにつかないので、動作確認はやりにくいが、SPFの指定と矛盾するメールはきちんと弾いているようで、ログには記録されていた。

2,3日動かしてみたが、なかなか良好。
Greylistを導入するよりも効果は高い気がする。
少なくともspammerが最も詐称するyahoo.co.jp, hotmail.com などの迷惑メールは壊滅した。

もちろんSenderID/SPFも完璧ではない。

まず、SenderID/SPFなんて設定していないドメインは詐称され放題。
例えばYahoo.comはSenderIDが付いていないので詐称される。
そして、spammerが独自ドメインでSenderID/SPFを設定している場合も単純拒否はできない。Blacklistみたいなものを整備する必要がある。

現在あるSPF設定では、”~all”と付いているものが多い。これは、softfailを示し、「一致しないものは全てfailだが、他のホストからも送信するかも」というもの。一番理想的なのは”-all”で、「一致しないものは全てfail。拒否していい」。そしてSPFの設定を無駄にするのが”?all”で、「一致しないものも全て受信すべし」というもの。so-net.ne.jp やgmail.comが”?all”にしている。

うちのメールサーバに届いたメールアドレスを全チェックしてみた。上位10ドメインはこちら。

yahoo.co.jp softfail 22.4%
yahoo.com NONE 9.3%
gmail.com Neutural 1.7%
infoseek.jp NONE 1.6%
ofug.net NONE 1.2%
hotmail.com softfail 0.8%
mail.goo.ne.jp softfail 0.7%
icqmail.com NONE 0.5%
yahoo.com.cn NONE 0.4%
hogehoge.jp softfail 0.4%

この結果、softfailまで拒否するようにすると24.3%が検証できることがわかった。

spamも含めて、うちに届いた全てのメールを確認したところ、SPF導入済みのドメインからのメールは2割程度しかない。しかし、SPF導入が無いところまで弾きたい気分。まだ2割の導入しかないのにSPF日設定まで弾く設定を用意しているNTTドコモは思い切ったことをするなぁと思った。

SenderID/SPFのチェックと併せて、通常のPC上の迷惑メールフィルタを使うと、SPFを設定していないドメインからのメールはほとんど削ってくれる。迷惑メールフィルターで検証しにくい、有名ドメインの詐称メールはSPFでフィルタできるので、この機構を導入後に届くspamは、某メイリングリストに届くspamメールのみとなった。これさえなんとかすればほぼ完璧。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です