# Geeklog Spam-Xプラグイン

## 概要

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

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

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

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

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

## モジュールの種類

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

## 検出モジュール

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

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

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

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

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

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

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

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

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

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

#### 情報更新!

Geeklog 2.2.1でIPv6のアドレスをサポートしました。

### 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個に設定した方がよいでしょう。 ホームページのフィールドは既定でプロフィールのページに作成されるからです。

### Akismet

このモジュールを有効にすると、 https://akismet.com/で提供されているAkismetサービスを利用して、投稿される情報内容(コンテンツ)がスパムかどうかをチェックできるようになります。 このモジュールを有効にするには、このページで登録を行い、 APIキーを取得して、設定 > Spam-X > モジュール > Akismet > APIキー に設定してください。このモジュールは、著者名、IPアドレス、投稿される情報内容のテキストを受け取ってAkismetサービスへ送信し、 スパムかどうかを判定する応答を受け取ります。

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

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

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

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

### 例

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

## 管理モジュール

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

ログ閲覧モジュールを使用すれば、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(秒) | 外部サービスと通信する際のタイムアウトとなる秒数を指定します。
メールで通知する(notification_email) | `「管理者用メニュー - コンフィギュレーション - Geeklog - サイト」の「サイトのメールアドレス」の設定値` | 管理者メールアクションモジュールが有効になっている場合、スパム通知の送信先メールアドレスを指定します。指定しない場合は、サイトのメールアドレス($_CONF['site_mail'])に送信されます。
Spam-Xの動作(action) | 128 | 「管理者用メニュー - コンフィギュレーション - Geeklog - ユーザーと投稿」の「Spam-X」が設定されていない場合に備えるための設定です。言い換えれば、「管理者用メニュー - コンフィギュレーション - Geeklog - ユーザーと投稿」の「Spam-X」の設定の方が優先します。
スパム記録の保存日数(max_age) | 0 | Spam-Xの記録をデータベースに保存する最大の日数を指定します(0 = 無制限に保存)。

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

`'email', 'IP'`

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

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

### モジュール

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

## 詳細情報

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