# Geeklog Spam-Xプラグイン

(Hendrickson Software Componentsによる同名のEメールスパムフィルターをお探しでここに来られた方は、ここをクリックしてください。)

## 概要

Geeklog Spam-Xプラグインは、Geeklogシステムに対するコメントスパム対策として開発されました。コメントスパムをよく知らない方はコメントスパムマニフェストをご覧ください。

Geeklogでのスパム対策はもっぱらTom Willetが開発したSpam-Xプラグインに頼っています。このプラグインはモジュール構造を採用しており、スパム送信者の最新の手法に対応する必要が生じた場合は、新しいモジュールで機能を拡張できるようになっています。

## スパム検索の対象となるもの

GeeklogとSpam-Xプラグインは次のものを対象とします。

- 投稿される記事
- コメント
- トラックバックとピングバック
- 投稿されるイベント
- 投稿されるリンク
- 「友だちに記事をメールする」機能で添えられる文章
- ユーザープロフィールのページからメールフォーム経由で送信されるEメール
- ユーザーのプロフィール

## モジュールの種類

Spam-Xプラグインは、コメントスパム送信者の変化に対して容易に対応できるよう、拡張性を重視して開発されました。検出(Examine)、アクション(Action)、管理(Admin)モジュールの3種類があります。新規モジュールは1個のファイルに収められているので、該当ディレクトリに追加しさえすれば、プラグインの機能を追加できます。

## 検出モジュール

Geeklogには次の検出モジュールが同梱されています。

- スパムリンク検証(SLV: Spam Link Verification)
- パーソナルブラックリスト(Personal Blacklist)
- IPフィルター(IP Filter)
- URLのIPフィルター(IP of URL Filter)
- HTTPヘッダーフィルター(HTTP Header Filter)
- Stop Forum Spam (SFS)
- Spam Number of Links (SNL)

### スパムリンク検証(SLV: Spam Link Verification)

SLVは集約されたサーバを拠点としたサービスで、Webサイトに投稿されたものを検証し、特定のリンクが異常なほど多く見られる場合にそれを検出します。言い換えれば、スパム送信者が多くのサイトに同一URLを含むスパムを送信し始め、これらのサイトすべてがSLVに報告した場合、SLVシステムはこの傾向をスパムと認識し、該当URLを含む投稿をスパムと判定します。

さらに言い換えると、SLVは、スパム送信者がサイトにスパムを送信し始めたときに、自動的に更新されるブラックリストであると言えます。SLVを使用するサイトが増えれば増えるほど（正確さと反応速度という点では）、ますますその質が高まります。

SLVはRuss Jonesがwww.linksleeve.orgで運営している無料のサービスです。

プライバシーポリシーの表示
SLVを使用しているということは、自分のサイトから第三者のサイトに情報を送信していることになるということを強調しておいた方がよいでしょう。法体系によっては、ユーザーにこの事実を告知する必要があるかもしれません。ご自分の地域のプライバシーに関する法律を確認してください。

運用している状況によっては（たとえば、企業のイントラネットなど）、情報を外部のサイトに送信することが望ましくない場合もあるでしょう。その場合は、 `SLV.Examine.class.php`, `SLVbase.class.php`, `SLVreport.Action.class.php`, `SLVwhitelist.Admin.class.php` の4つのファイルをSpam-Xのディレクトリ(`/path/to/geeklog/plugins/spamx`)から削除すれば、SLVを無効にできます。単にSpam-Xプラグインを無効にする（または、アンインストールする）だけでもよいです。

SLV検証モジュールとアクションモジュールは、投稿されたデータからすべてのURLを抽出し、SLVへ送信するだけです(つまり、投稿されたデータのURL以外の部分は送信されません。)。また、自分のGeeklogサイトのURLを含むリンクはすべて除外します。投稿されたデータに外部リンクが含まれていない場合、これらのモジュールはSLVと通信を行いません。

### パーソナルブラックリスト(Personal Blacklist)

パーソナルブラックリストモジュールを使用すると、スパム投稿によく見られるキーワードとURLをブラックリストに追加できます。スパムが投稿されている場合、そのURLをパーソナルブラックリストに追加すれば、送信者が再びスパムを投稿しても締め出すことができます。

上記を行うことにより、既に受信したスパムを削除しやすくなります。データベースから多数のスパム投稿を削除するのに、一括コメント削除と一括トラックバック削除を使用できるようになるからです。

パーソナルブラックリストには、Geeklogのバッドワードリスト(censor list)を読み込み、バッドワードを含むコメントをすべて禁止する機能があります。このようなリストは子ども向けのサイトには有用でしょう。ふさわしくない言葉を含むコメントは投稿できなくなるからです。

### IPフィルター(IP Filter)

1つないし少数のIPアドレスから送信されるスパムに出くわすこともあります。IPフィルターモジュールを追加することで、これらのIPアドレスから送信されるスパムを自動的にブロックできます。

単一のIPアドレスだけでなく、CIDR表記や開始アドレス-終了アドレス という形式で、IPアドレスの範囲を指定することもできます。

IPアドレスが実際にはあまりよい判断基準にはならないということに注意してください。インターネットサービスプロバイダやホスティングサービスの中にはスパムの温床として知られているものもありますが、それらのIPアドレスをブロックしてもあまり役には立たないでしょう。スパム送信者はインターネットへ接続し直すときに新しいIPアドレスを取得するのに対し、ブロックされたIPアドレスは他の罪もないユーザーが使用することがよくあるからです。

### URLのIPフィルター(IP of URL Filter)

このモジュールが役に立つのは少数の特別な場合だけです。ここでは、スパム送信元のドメインを収容しているWebサーバのIPアドレスを入力します。スパム送信者の中には多数のサイトを少数のWebサーバ上で運営しているものがいます。このような場合は、多数のドメイン名ではなくWebサーバのIPアドレスをブラックリストに追加すればよいでしょう。Spam-Xプラグインは、投稿されたデータ中のすべてのURLをチェックし、該当するIPアドレスがないかチェックします。

### HTTPヘッダーフィルター(HTTP Header Filter)

このモジュールを使用すると、ある種のHTTPヘッダーを検出することができます。サイトへ送信されるすべてのHTTPリクエストには、訪問者が使用しているWebブラウザーや使用言語などの情報を識別するヘッダーが付随しています。

HTTPヘッダーフィルターモジュールを使用すると、ある種のHTTPリクエストをブロックすることができます。たとえば、スパム送信者の中には、スパムを送信するのにPerlスクリプトを使用しているものがいます。Perlスクリプトが送信するユーザーエージェント(ブラウザー識別情報)は "libwww-perl/5.805" (バージョン番号はこれとは違う場合もある)のようなものが多いです。したがって、このユーザーエージェントが送信するスパムをブロックするには、次のように入力します。

Header: | `User-Agent`
Content: | `^libwww-perl`

これで "libwww-perl" で始まるユーザーエージェントからのスパム投稿はすべてブロックされます。

### Stop Forum Spam (SFS)

Stop Forum Spamは集約されたサーバーを基にするサービスで、 掲示板やブログの既知のスパム送信者のIPアドレス、ユーザー名、メールアドレスのリストを提供します。 このモジュールを有効にすると、新規ユーザーの登録の際に、ユーザーのIPアドレスとメールアドレスを SFSのデータベースでチェックします。該当データが見つかった場合、 Geeklog上のユーザーアカウントは作成されません。

SFSはフリーのサービスで、www.stopforumspam.comで運営されています。

### Spam Number of Links (SNL)

このモジュールを有効にすると、投稿とユーザーのプロフィールに含まれるリンクの数を制限することができます。 このモジュールを有効にしてリンクの数を設定するには、 コンフィギュレーションからSpam-Xの設定を変更する必要があります。有効にする場合は、リンク数を少なくとも1個に設定した方がよいでしょう。 ホームページのフィールドは既定でプロフィールのページに作成されるからです。

## アクションモジュール

いったん検出モジュールがスパム投稿を検出すると、アクションモジュールがスパムをどう処理するかを判断します。たいていの場合、スパムを削除するだけでよいですが、これを行うのが削除アクション(Delete Action) モジュールです。

その名前が示すとおり、管理者メールアクション(Mail Admin Action) モジュールはスパムを検出したときに、サイト管理者にメールで通知します。多数の通知メールが送られる可能性があるため、デフォルトでは無効になっています。

アクションモジュールは使用する前に個別に有効にする必要があります(一方、検出モジュールはSpam-Xのディレクトリにファイルを入れるだけで有効になります。)。このため、すべてのアクションモジュールは独自の番号を持っています。有効にしたいすべてのモジュールの番号を足し合わせた数値を、「管理者用メニュー - コンフィギュレーション - Geeklog - ユーザーと投稿」の「Spam-X」に入力します。

### 例

削除アクションモジュールの数字は 128、管理者メールアクションモジュールは 8 です。両方のモジュールを有効にするには、128 + 8 = 136 を入力します。

SLV検出モジュールは、他の検出モジュールが捕捉したスパム投稿を確実にSLVに通知します。SLVアクション(SLV Action) モジュールによって補完されています。このモジュールは削除アクションモジュールと連動しているので、削除アクションモジュールを有効にすると、SLVアクションモジュールも有効になります。

## 管理モジュール

パーソナルブラックリスト、IPフィルター、URLのIPフィルター、HTTPヘッダーフィルターモジュール用の管理モジュールは新しい項目を追加するためのフォームを提供します。既存の項目を削除するには、単にその項目をクリックするだけです。

SLVホワイトリスト管理モジュールを使えば、SLVに通報したくないURLを追加できます。サイトに投稿されるデータにたまたまある特定のURLが頻繁に含まれているが、SLVにスパムと判定されてほしくないときに役に立ちます。
自分のサイトのURL(つまり、「管理者用メニュー - コンフィギュレーション - Geeklog - サイト」の「サイトURL」)は自動的にホワイトリストに登録されるので、このモジュールで新たに登録する必要はありません。

ログ閲覧モジュールを使用すれば、Spam-Xログファイルの閲覧・クリアができます。ログファイルには、スパム送信元のIPアドレスやユーザーID（登録ユーザーがスパムを投稿した場合）、検出モジュール名などの追加情報が含まれています。

多数のスパムが投稿されても検出されなかった場合は、一括コメント削除モジュールと一括トラックバック削除モジュールがスパムの削除に役立つでしょう。これらのモジュールを使用する前に、スパムに含まれるURLやキーワードをパーソナルブラックリストに忘れずに追加してください。

## MTブラックリスト(MT-Blacklist)に関する注意

MTブラックリストは、スパム送信に利用されたURLのブラックリストで、Movable Type用にJay Allenによって開発・維持されていました。そのため、MT-Blacklistという名前がついています。

ブラックリストの維持を行うのは大変手間のかかることであり、スパム送信者を絶えず把握しておかなければなりません。そのため、Jay Allenは現在ではスパムを検出するより優れた方法があると想定して、最終的にMTブラックリストの更新をやめてしまいました。

Geeklog 1.4.1以降、GeeklogではもはやMTブラックリストを使用していません。1.4.1にアップグレードするときに、データベースからMTブラックリストのデータは削除され、MTブラックリスト用の検出・アクションモジュールはもはや同梱されていません。

## トラックバックスパム

トラックバックもまた、Geeklogが受け入れる前にSpam-Xプラグインで検査されます。トラックバックの場合、追加できるチェックがあります。トラックバックを送信してきたサイトが自分のサイトへのバックリンクを含んでいるかどうかをチェックするよう、設定できます。さらに、トラックバックURLに含まれるサイトのIPアドレスがトラックバック送信元のIPアドレスと一致するかをチェックすることもできます。これらの検査に合格しないトラックバックはふつう、スパムです。詳細は、設定用のドキュメントを参照してください。

## コンフィギュレーション

Spam-Xプラグインの設定は、「管理者用メニュー - コンフィギュレーション - Spam-X」から行えます。

### Spam-Xの設定

項目(変数) | デフォルト | 説明
--- | --- | ---
ログを有効にする(logging) | `はい(true)` | はい(true)にすると、スパムと認識された投稿がログファイル(`spamx.log`)に記録されます。
タイムアウト(timeout) | 5（秒） | SLVなどの外部サービスと通信する際のタイムアウトとなる秒数を指定します。
メールで通知する(notification_email) | `「管理者用メニュー - コンフィギュレーション - Geeklog - サイト」の「サイトのメールアドレス」の設定値` | 管理者メールアクションモジュールが有効になっている場合、スパム通知の送信先メールアドレスを指定します。指定しない場合は、サイトのメールアドレス($_CONF['site_mail'])に送信されます。
Spam-Xの動作(action) | 128 | 「管理者用メニュー - コンフィギュレーション - Geeklog - ユーザーと投稿」の「Spam-X」が設定されていない場合に備えるための設定です。言い換えれば、「管理者用メニュー - コンフィギュレーション - Geeklog - ユーザーと投稿」の「Spam-X」の設定の方が優先します。
スパム記録の保存日数(max_age) | 0 | Spam-Xの記録をデータベースに保存する最大の日数を指定します(0 = 無制限に保存)。SLVホワイトリストの記録は削除しません。

削除する記録の種類(records_delete)

`'email', 'IP'`

スパム記録の保存日数に達した時に削除する記録の種類を指定します。デフォルトでは次のものがあります:

- 'Personal' = パーソナルブラックリスト
- 'HTTPHeader' = HTTPヘッダーブラックリスト
- 'IP' = IPフィルター
- 'IPofUrl' = URLのIPフィルター
- 'email' = Stop Forum Spamのブラックリスト
- 'SLVwhitelist' = SLVホワイトリスト

### モジュール

項目(変数) | デフォルト | 説明
--- | --- | ---
Stop Forum Spamモジュールを有効(sfs_enabled) | `いいえ(false)` | Stop Forum Spam (SFS)モジュールを有効にするかどうかを指定します。有効にすると、ユーザー新規登録時にユーザーのメールアドレスとIPアドレスをStopForumSpam.comに照会してスパム判定を行います。
信頼スコアの閾値(sfs_confidence) | `25` | Stop Forum Spamの信頼スコアの閾値(パーセント)で、この値を超えると、検証しているフィールドが望ましくない活動を行うことになることを示すかなり良い目安になります。1から100の範囲で入力します。
Spam Number of Linksモジュールを有効(snl_enabled) | `いいえ(false)` | Spam Number of Links (SNL)モジュールを有効にするかどうかを指定します。有効にすると、ユーザーが投稿したり、プロフィールを作成・更新したりする際に、含まれるリンクの数を指定された数に制限するようになります。
リンク数(snl_num_links) | 5 | 投稿やプロフィールでリンクと見なさないリンクの最大数。

## 詳細情報

Spam-Xプラグインの詳細情報とサポート掲示板は、Spam-XプラグインのホームページとGeeklog Wikiにあります。