日曜日, 8月 05, 2007

拒否された推定メッセージ数のカウント方法を改良

 拒絶ログソーティングスクリプトは、クライアント制限によってアクセスを応答コード「450」で蹴った記録をメールログから抽出し、リトライアクセスが連続して並ぶようにソーティングして表示する。そして、最後にアクセス数(access count)、メッセージ数(message count)、リトライシーケンス数(retry sequence count)を表示するようにしていた。メッセージ数とは、クライアントIPアドレス、送信者アドレス、受信者アドレスがともに同じである一連のリトライを1通と数えたものである。これは、スパム対策をしていなければ受けてしまったであろうスパムの通数はおおまかにこのくらいだろうと見当を付けるためのデータのつもりだった。
 しかし、このように数えたメッセージ数はあてにならないことに気付いた。というのは、拒否応答に対して同じホストから送信者アドレスを変えながら再送信するスパムアクセスがかなりあるからである。このような場合、受けていればおそらく1通だったと思われるが、メッセージ数としてはアクセス回数と同じにカウントされることになる。
 そこで、信用できない情報である送信者アドレスを無視して、信用できる情報であるクライアントIPアドレスと受信者アドレスだけを見て(受信者アドレスの間違ったアクセスを抽出しないようにする方法についてはQ&AのQ/A2-5を参照)、それらがともに同じであるアクセスは(全体で何回であっても)1通のメッセージを送ろうとしたものと仮定することにした。そして、この仮定に基づいた方法でカウントした数を推定メッセージ数(estimated message count)として表示するようにした。
 もちろん、同じホストが同じ受信者へ複数のスパムを送り込もうとすることはあるだろうし(この場合、少なくカウントされる)、拒否応答に対して別のボットから再送を試みるスパムアクセスもあるだろう(この場合、多くカウントされる)。だから、新しいカウント方法による推定メッセージ数も、スパム対策をしていなければ受けてしまったであろうスパムの通数として、もちろん正確なものではない。しかし、送信者アドレスを次々に変えながらリトライするスパムアクセスについてメッセージ数をアクセス回数と同じにカウントするよりは、目安としてましなデータだろうと思う。
 ちなみに、7月8日から8月5日16時までのログからこのスクリプトでカウントしたアクセス回数は1300回。推定メッセージ数は590通で、うち1通が偽陽性判定だった。ほかに、変なReceivedヘッダを検出して蹴ったスパムが1通あった。この期間に受けたスパムは6通なので、ここから計算したスパムの阻止率は590÷(590+6)=99.0%ということになる。勤務先での、Becky!による7月の判別率と同じ値になっている。

(参考)
 ここで言っているメッセージ数とは、メールの通数のことである。英語では、「mail」は郵便の意味としては不可算名詞であり、「one mail, two mails,...」と数えることはできない。「e-mail」も同じく不可算名詞であり、「one e-mail, two e-mails,...」はおかしい。数えられないから、「e-mail count」もおかしい。「one e-mail message, two e-mail messages,...」は正しい(「message」は可算名詞だから)。そこで、スクリプトが表示する英語表記を「message count」としており、その訳語として「メッセージ数」と書いているのである。
 もっとも、最近では外国人が書く英語に「e-mails」という複数形を見かけたりする。「e-mail」は不可算名詞だという意識が希薄になってきているのかもしれない。

0 件のコメント: