どうもここ数週間、今まであまりスパムメールを受けてなかった人にもすごく増えてきているスパムがあるようで、いきなりスパムが増えたんだけど、という問い合わせが続いていた。
現在のところどうもバイアグラ(とそれに類する薬)の販売のスパムがそれに当たるよう模様。
で、本文の解析をせずそのスパムをほぼ誤検出なく捨るために、特徴を抽出してみた。
基本的には下記のような特徴がある。
- client IP: botが送付元らしくいろんな動的IP(S25Rにマッチする)のFQDN
- envelope from: 収集したアドレスからランダム。header fromは別みたい。message-idの@以降と同一
- envelope to: 1通を4〜6の同一ドメインのアドレスに送付。abc順にソートして近いもの。
- helo: client IPとは無関係のFQDN、または
のような大文字9字 - header from: envelope toで同時に送付されたアドレスのうち一つが選択されているみたい。
- message-id: @remarrying972 のように@以降にドットがなく、envelope fromの@以前と同一。
message-idは通常<〜@do.main.name>のようになっているが、このスパムは@以降が「.」で区切られていない。まずそれだけでもある程度特徴的だが、さらにその@以降の部分がenvelope fromの@以前、になっている。
すでに受信しているスパムメールから確認するなら、Return-PathとMessage-IDを見るとわかるので、下記に実際に自分宛てにきたこのスパムのヘッダを例示する。
Return-Path:
Message-ID: <01c9c0e3$0a519e00$06b4127b@qrmuaaisccb>
このように、Message-IDの@以降「qrmuaaisccb」とReturn-Path(envelope from)の@以前「qrmuaaisccb」が同一であることがわかる。
ヘッダ情報まで入れて比較しなければならないので、結局SAなどのコンテンツフィルタが必要になるが、envelope fromの@以前とMessage-IDの@以降を比較し、同一であればポイントを上げてやる。
一応安全性を高めるため、S25Rにマッチしたときには拒否されるくらいにしておくと良いだろう。
(追記)
というわけで、MLでyohさんに教えていただき、ルールを書いてみました。
full MATCH_ENVELOPEFROM_MESSAGEID /^Return-Path: <(\w+)\@.+>\n(?:.+\n)*Message-ID: <[\w\$]+\@\1>\n/ describe MATCH_ENVELOPEFROM_MESSAGEID match EnvelopeFrom before @ and Message-ID after @ score MATCH_ENVELOPEFROM_MESSAGEID 3.0
これで、この業者からのスパムは全部マッチするはずです。
でもうちのサーバはtaRgreyでだいたいはじいちゃってるから、S25Rに引っかからないところから出たときじゃないと効果わからんのですよね。早くこないかなあ。