Spammap – スパムメールはどこから来るの?

もうイヤんなるぐらい送られてくるスパムメール。

オレのところにも英語のモノ、日本語のモノ、まれにそれ意外の言語のものも合わせて1日30-40通ぐらい届き、しばらく前から Gmail をスパムフィルタがわりに使って何とかしのいでいる。 でも、こいつらどこから送られてくるんだろうと思っていた。

じゃあ、それを追いかけて Google Map 上に表示してやれば面白いんじゃないかと思って作ってみたのが Spammap (スパムマップ)。 オレのところに届いたスパムメールのうち、最新のおよそ100通の発信元を表示している。 スパムメール情報の更新は1日1回。

shot.jpg

正直、何の役にも立たないんだけど見ていると何だか楽しい。

意外に世界中のいろんなところから分散して送られているなぁとか、

日本から英語のスパムメールが、

そして中国から日本語のスパムメールが来ているというように、

やっぱこういうのは自分の国以外から出したいモノなんだろうか(笑)とか勝手なこと思ったり。

まだバグもあると思うのでサーバの位置が間違っているかもしれないけど、よろしかったら見てやってください。

技術的な話は続きをどうぞ。

今回のきっかけになったのは IP アドレスから 緯度経度を返してくれるという通称 GeoIP と呼ばれる技術に出会ったことだった。 Gyao なんかが海外からのアクセスをブロックするときにも同じ技術が使われている(はず)。

GeoIP を簡単に使えるようにしたサービスとしては AJAX Powered IP Location Lookup というこちらのサイトが有名で、既にバックグラウンドは知らずとも使ったことがある人はいるのではないだろうか。

GeoIP は IPアドレスと場所をマップしたデータベースで成り立っていて、これをメンテナンスしているところはいくつかあるようだ (GeoBytes (商用), hostip.info (GPL) など)。 いろいろと調べてみたところ、一番精度が高いと思ったのが Max Mind社 の製品群。

中でもGeoLite City というのが Free で公開されていて、国レベルでは約97%, アメリカの都市レベルでは半径25マイル以内に60%入るという精度 (Approximately 97% on a country level and 60% on a city level for the US within a 25 mile radius.)らしい。 また、API も準備されていて、C, Perl, PHP, Java などから簡単に使うことができる。

というわけで、 Spammap ではこれを使って GeoIP を行なっている。(ちなみに AJAX Powered IP Location Lookup でも使われている)

Gmail から Spam メールを持ってくる部分は libgmail を使って自作。 通常の POP では Spam フォルダに入ったメールを取ってこれなかったが、libgmail ではフォルダ名に spam を指定したらあっさり取ってくることができた。 取得した Mail の解析もこの中で行っている。

具体的には Received: from で始まるヘッダのサーバを追いかけていき、繋がっている最後のサーバの from にある IP アドレス (大抵は HELO xxxxx.com [1.2.3.4] のように書かれているヤツ) を、From などの情報とともに別ファイルに保存している。 たまにプライベートアドレスのホストまでたどってしまい GeoIP に失敗することもあるが、それはSpammapを表示するタイミングで除外している。 (スパムメールの数が約100になっているのはこんな理由のため)

libgmail はそんなに速くないので、HTTPリクエストと同時に走らせていては間に合わない。 なので、このスクリプトはリクエストとは非同期に cron を使って1日1回 (日本の夕方、サンフランシスコの夜中)情報を更新するようにしている。


1 Comment

  1. Spammap – スパムメールはどこから来るの? [Beta]

     僕は毎日、余裕で3桁を超えるスパムメールをPOPFileで乗り切っているのです…

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.