SPAM対策の基本

漠然とした言い方をすれば

  • キューに入れない

これに限る。キューに入れないためにはいくつか方法がある。

  • 送信元のDNS情報を検査
  • RBLを使う
  • Tarpitting/Throttling
  • ニセのバウンス対策
  • ユーザ存在チェックを先に行う

有効な手段はこんなところか。IP逆引きによる云々もあるけど除外。

送信元のDNS情報を検査

送信元のメールアドレスの@以降で

  • MXレコードを検索
  • Aレコードを検索

どちらもなければ無効なメールアドレスとして排除する方法。ただ、近頃は他人のメールアドレスを書かれる事が多いので性能は疑問。

RBL

RBLには問題もあって、管理する手間も問題ではあるんだけれど(RBLを使わない事による手間もわかるけど)、まずは導入にかかる手間を考えたい。

  • そのRBLの精度はいかがなものか
  • そのRBLは今後もサービスしてくれるのか
  • そして、どのRBLを使うか

この話はホント、日ごろの情報収集を怠るとえらい目にあう話なんだと思う。RBLが応答しない時にMTAがどう動くか、という検証もしておいたほうが良いと思うし。(MTAによるんだろうなぁ。未調査。)

tarpitting

1つのSMTPセッションで大量のRCPT TOコマンドを送ってくる事も多い。
ある数以上のRCPT TOコマンドの応答にDelayを入れると、単位時間あたりに受け付けてしまうメールの総数を減らすことが出来る。
結果として、SPAM送信者にとって"使えないMX"となる。このようにわざとゆっくり応答する事を、TarpittingとかThrottlingと言う。

ニセのバウンスメッセージを弾く

バウンスメッセージのenvelope-fromは<>で、これは前述の通り拒否してはいけないことがRFC2505で決まっているから、バウンスを装ったメールも多い。バウンスは送信者に行われるものだから、バウンスメッセージの宛先は必ず一つ。
ニセのバウンスメッセージは複数の宛先を書いてくるからこれを排除する。

ユーザ存在チェックを先に行う

メールゲートウェイは内側のサーバのローカルユーザ情報を普通は持たない。

MailGatewayにユーザ情報を知る術を持たせてMailGatewayが '550 User unknown' を返せるようにする。こうするとSPAMがキューに入らないのでたいへん美味しい。