GOBLIN は、
スパム送信者のリモートアドレスを記録したブラックリスト(以下、BList)を参照し、
スパムコメントおよび
スパムトラックバックを拒否する
実験的試みです。
GOBLIN の特徴として、この BList をサイト間で
P2P 的に共有し、
他サイトにある BList を利用して自サイトの BList を更新・強化するという点が挙げられます。
新出の
スパム送信者の
情報は、GOBLIN の似非
P2P ネットワークを伝播しながら、
直接の共有関係にないサイトの BList にも連鎖的に反映されていきます。
GOBLIN って何?
MovableType 3.2
には強力な対
スパムプラグインが標準で添付しており、
公開されている DNS 式ブラックリスト(DNSBL)を参照して手軽に
スパム対策を行うことができます。
また、Bulkfeeds では
独自の DNSBL と、ブラックリストへのフィードバックが行えるような仕組み
を公開されており、
ユーザのレポートによって
スパム情報を収集・蓄積するという興味深い方法が用いられています。
これら DNSBL によるブラックリスト参照は、一種の
クライアント・サーバ・モデル
と見ることができますが、ここに一度、悪意のある偽の
スパム情報が登録されてしまうと、
それを参照する全ての環境が同様に影響を受けてしまうと云う中央管理型のデメリットも考えられます。
(そのためか、これらの BList への登録は最終的には人手に頼っているようです)
そこで、この BList をサイト間で
P2P 的に扱ってみようという考えのもと、
MovableType の
プラグイン+αを作成し、
これを GOBLIN(ゴブリン) と命名しました。
P2P を採用することの効果はイマイチ見えていませんが(ぉぃぉぃ)、
広く普及することで何かしら新しい BList の形態となれば面白いと考えています。
ちなみに GOBLIN は
『General Open-ended
BlackList Inheritance Network
(汎用的な公開されたブラックリストの継承ネットワーク)』という一部無理矢理なフレーズのアクロニムです。
もうちょっとマシな命名でもあれば良かったんですが。
ブラックリストの共有
各々のサイトは、自分が信頼した他サイトのブラックリストを参照し、その
情報を自サイトのリストと結合します。
また自サイトのリストを公開することで、他サイトからも同様に参照されるようにしておきます。
ここで、悪意のある偽の
スパム情報(デタラメに作成されたリストなど)を
P2P ネットワークに紛れ込ませないために、
自サイトが参照するリストは、そのサイト管理者が選択したものだけです。
サイト管理者は、リストを公開しているサイトの著名度やその内容を吟味した上で、
そのサイトの公開するリストが信頼できるものかを判断します。
例えば、誰かが悪意のあるリストを
P2P ネットワークに紛れ込ませようとしても、
一朝一夕で作られた実の無いエントリが乱発されたようなサイトの公開するリストは信頼を得られず、
参照されにくいことでしょう。
また、ブラックリストの参照するレベルである"共有 POP 数(仮称)"を設定することで、
自サイトが直接参照していないリストを広範囲かつ間接的に参照することができます。
共有 POP 数を大きく設定すると、離れたサイトにあるリストを得ることができますが、
その分、途中で紛れ込んだ悪意のあるリストを拾う可能性も大きくなります。
逆に、共有 POP 数を小さく設定することで、自サイトが信頼したサイトに近い範囲のリストのみ
参照するようになります。
アーカイブに含まれる
mt-goblin.pl をエディタで開き、設定値を環境に合わせて変更した後、
MovableType の
plugins ディレクトリにコピーします。
後述のブラックリストに記載された IP からの
コメント投稿と
トラックバックを拒否することができます。
ブラックリストの書式
ブラックリストは単純なテキスト形式で、禁止したい IP を 一行に一つずつ羅列していきます。
また、他サイトのブラックリストから参照・追加された IP は、タブ区切りでその参照 URL の履歴を残しています。
下は共有 POP 数が 2 の場合のブラックリストの例です。
作成したブラックリストは他サイトから参照できるよう Web に公開することが望ましいです。
以下のようなステッカーでも作って目立つところに貼っておきましょう。
(もちろん、自サイトのブラックリストを公開する/しないの選択は自由です)
Ready to share my GOBLIN
ブラックリストの更新
アーカイブに含まれる
goblin.pl をエディタで開き、設定値を環境に合わせて変更します。
修正後、適当なディレクトリにアップロードした後、実行パーミッションを与えておきます。
goblin.pl は Perl スクリプトになっているので、
シェルから実行するか、あるいは cron などで定期的に実行しリストを更新するよう設定します。
また、拡張子を CGI に変更することで、ブラウザからリストの更新作業を行えます。
この場合、パスワード認証を掛けるなどして第三者がアクセスできないようにしておきましょう。
スクリプトを実行すると、BListList で指定された他サイトのリストを取得し、
BListPath で指定された自サイトのリストを更新にかかります。
コメントフィルタおよびトラックバックフィルタは夫々、
Movable Type で言及リンクのない TrackBack ping を弾くプラグイン
と
MTBanASCII: コメントSPAM対策を MT3 に移植
より、コードを参考にさせて頂きました。
舞台裏
MT の管理画面からブラックリストの更新作業が行えると便利。
あと、他サイトのブラックリストを参照する段も、
HEAD リクエストで内容が更新されていた場合のみ
情報を取得するとか。
とにかく広く使ってもらえない限りは
P2P ネットワークの意味が無いのもツライところ(´・ω・`)