ユーザエージェントとGEOIPとDNSBLの対策で寂しいくらいにスパムがこなくなってMTのスパムフィルタがヒマそうな最近ですが、そもそもCGIを叩こうとされるのも404を返すのもいやです。もう一歩踏み込んで対策できないか考えてみました。
NP_Trackbackは無罪?
少し本題とは違うのですが、NP_TrackbackがNucleus CMSのトラックバックモジュールのUAということで、なんとかならないかなと考えてみました。
偽装なのか利用されたのかNucleusも不運ですが、こちらではもっと悪いことが判明。オリジナル版の2.0.3ではMozillaを名乗るようです。コメントならいざ知らず、トラックバックがMozillaから来るわけないのでうちではTBの拒否リストに入れてます。申し訳ないですが今のバージョンでは大丈夫のようなので気にせずそのままにしておきます。
で偽NPもそこそこスパムを撃ってくるので限定的に"^NP_Trackback/2.0.3$"で拒否することに。これだとまともなNucleusからのTBはおそらく大丈夫でしょう。
ちなみに偽NPは結構アホなスパムエージェントで302でリダイレクトすると二回目はWinHttp.WinHttpRequest.5と正体を名乗ってきます。Windowsソフトのようです。
今回やりたいこと
本題ですが、スパム自体はUA+GEOIP+DNSBLでapacheでほぼ100%に近くシャットアウト出来たので当面満足ですが、やはりスパマーは無駄にcgiを叩こうとしてきます。当然スパマーのクローラも走っています。これ自体がうざいのでスパマーのアクセスを抜本的に減らすことが出来ないだろうか、と思い考えてみました。
サーバログからスパムの挙動を少し観察してみると
- スクレイピングやコントロールをするノード、スパムを撃つノード に分かれて活動している
- コントロールノードはスパムを撃たない
- コントロールノードはlibwww-perl、WinHttp等を使っている模様
- ほとんどの場合UA偽装しておりMozillaやIE, Opera等を名乗ってくる
- クロール時にアクセス毎にUAを変えるものもある(IPアドレスが同じなのでモロバレですが)
- Opera..[en]とかWindows98とかやたら古いブラウザとかは思い切り怪しい
- だいたいそういう奴は海外アドレスでcssやjs、画像やfaviconを読んでいかない
- コントロールノードの数は少なく、堂々と同じアドレスを使っていたりする
- もしかして302リダイレクトするとWinHttpな奴は馬脚を現すかもしれない
- コメントスパムで同じページをリファラーとしてページアクセスし、すぐ次にコメント投稿するものがある。検出に使えないかな?
- スパム発信ノードからは1つのターゲットへは余りたくさん撃たない
- スパムノードでmt-tb等を狙い撃ちで撃ってくるのは問題外
- あほなUA、例えばCrazy Browserとかでコメント狙いうちなぞは問題外
- リファラースパマーもうざいが単発なのでチェックしにくい
といった感じ。
なかなか自動で検出するのが面倒そうな感じですが、コントロールノードからのアクセスを全面的に遮断できればそもそものスパムアクセスが減るかもしれない。DNSBLに登録されないようにコントロールノードが悪さをしないのがいやらしいですが、人間がログを見れば怪しさ満点です。
で、地道ですが以下のようにしてコントロールノードを特定
- スクレイプしないとトラックバックCGIの位置がわからないように自動トラックバック検出用データを削除して、mt-tb.cgiをリネーム
- スパムが来るまで放置
- 1~2の間に怪しいアクセスをしてきたクライアントをチェック
- そのIPアドレスをdenyする
- 再びmt-tbをリネーム
とりあえず ログの中からIPアドレス単位に検索エンジン等のクローラかどうか、cssやjs、画像をちゃんと読んでいるかどうかをチェックする簡単なperlスクリプトをでっち上げて、上の条件に当てはまるIPアドレスをチェックしました。一応w3mやlynxなんかは除外。JavaScript OFFなブラウザとの区別が難しい。
拒否しすぎもいやなので、明らかに怪しいのを5つほどピックアップ。全て海外からで、ウェブサイトもないしあっても宣伝のサイトです。ブラウザUAで大量にクロールしているか、スパムTBが多いページにクロールしている奴らです。
特に203.223.159.232は悪質なので久しぶりにiptablesに追加しました。216.255.176.10はlibwww-perlでアクセスしてきますが、評判の良くないintercage.comというところのアドレスのようです。他にもいくつかここからクロールが来ていたのでドメインでアクセス禁止しました。
Order Allow,Deny
allow from all
deny from 203.223.159.232
deny from 64.28.178.66
deny from 81.169.178.78
deny from 58.177.21.207
deny from 216.255.176.10 (.intercage.com)
これを夜中にセットしてほうっておいたら、少し納まった様子だったのですが夕方から再びトラックバックスパムが再開されちゃいました。予想されたことではありますが、自動で検出出来ないとやはりイタチゴッコか。
結果としてコメントスパムは余り変わらないようですが、自動検出OFF&CGI名変更か、IP拒否か、どちらが効果を発揮したのかわかりませんが、mt-tbを叩こうとするクライアントが明らかに減少。一日100以上来ていたのが、 今日は10程度の模様。効果はあるようですね。
とりあえずlibwww-perlとWinHttp.WinHttpRequestとUAなしからのGETを拒否しようかどうしようか迷い中。libwww-perlはgoogleにも拒否されている模様。いずれも自作クライアントやツールに使いそうなので全面拒否もなんだよなーと思いますがセキュリティホール狙いとかろくなアクセスしてきませんね。それにしてもデフォルトで使うと拒否されてしまうというのも世知辛いですねえ。
User-Agent Snoopyがスクレイピング&スパムしてくる
なんだかXoopsのライブラリらしいSnoopy v1.2.3がクロール&トラックバックスパムしてきます。素性がわかるだけに拒否しようか迷うところ。
Snoopy v1.2.3
今回は。。。
ということで、今回は根治というわけには行きませんでしたが、少しヒントが得られた感じ。スパマーのスクレイピング検出ツールでも作ってみようかと思案中です。