Top | BBSantispam

YY-BOARD spam 対策改造

最新版: version 7.7.2 (2007/02/20) 改定履歴 KENT WEB 様の YY-BOARD に、自作の 掲示板用アンチスパムライブラリ BBSantispam を組み込みました。
YY-BOARD 標準の spam 対策機能
追加機能
CGI引数名のランダム化 | 英字のみの投稿禁止 | 逆引きできないホストからの投稿禁止 | 逆引きで得たホスト名が正引きできない場合の投稿禁止 | ホスト名・IPアドレスのホワイトリスト | コメント中のURL数の制限 | メールアドレスやURL欄を利用したspam判別 | フォーム表示から投稿までの最少時間の設定 | GET/HEAD以外でのyybbs.cgiへのアクセス禁止 | おかしなHost:ヘッダの拒否 | おかしなReferer:ヘッダの拒否 | URLの自動リンクに rel="nofollow" を挿入する | ログに必ずIPアドレスも保存する | spam 投稿のメールでの通知 | spam 投稿のログ作成 | 管理モードを隠す機能 | BBQによる公開プロキシからの投稿拒否 | GeoIPによる国単位でのアクセス拒否 | その他 spam 対策以外の機能追加
インストール・設定
必要なもの | 手順
うまく動作しない時は
著作権とか
無保証です
ダウンロード

YY-BOARD 標準の spam 対策機能

YY-BOARD 5.8 には標準で「禁止ワード」「ホスト名やIPアドレスでのアクセス制限」「投稿キー」の機能があります。

追加機能

CGI引数名のランダム化

CGIの引数名としてランダムな文字列を使用します。

オリジナルの YY-BOARD は、例えば名前の引数名は name、本文のは comment というように、引数名が固定されています。 この場合、yyregi.cgi に POST のみを行うような単純な spam 投稿ロボットにすら狙われてしまいます。

またボットネットを利用していると思われる海外からの spam 投稿で、

という動作をするものがありました。

これらへの対策として、CGIの引数名としてランダムな文字列を使用します。

この機能は「投稿キー」と主旨が似ています。 またこの機能の副作用として「掲示板を表示してから1時間以内に投稿する必要がある」という制限が出てきますが、実運用にはほとんど影響はないと考えています。

英字のみの投稿禁止

英字のみの投稿を禁止します。

(主に海外(英語圏)からの)英語の spam 投稿を防ぎます。 日本人を対象とした掲示板を運用するのならば問題ないでしょう。

逆引きできないホストからの投稿禁止

逆引き(IPアドレス→ホスト名への変換)ができないホストからの投稿を禁止します。

海外の ISP には逆引きを設定していない所が多いです。 それを利用し、逆引きできないホストからの投稿を拒否することにより、海外からの spam 投稿を防ぎます。

国内でもたまに逆引きできないホストがあったりしますが、それは後述の「IPアドレスのホワイトリスト」を利用してください。

この機能は「ホスト名やIPアドレスでのアクセス制限」と似ていますが、特に登録しなくても効果がある反面、逆引きできてしまうISPには効果がありません。 組み合わせて使うといいでしょう。

逆引きで得たホスト名が正引きできない場合の投稿禁止

逆引きは設定されているものの、逆引きで得られたホスト名に対する正引きがちゃんと設定されていないホストからの投稿を禁止します。 (ただし逆引きと正引きの一致までは検査しません)

海外の ISP には適当な逆引き情報を設定している所もあったりします。 それを利用し、海外からの spam 投稿を防ぎます。

ホスト名・IPアドレスのホワイトリスト

ここで登録したホストは「CGI引数名のランダム化」の制限が緩和されます。 (ワイルドカード対応、半角スペースで区切って複数列挙可能)

例えばある組織 example.jp からのアクセスが gw1.example.jp 〜 gw10.example.jp という複数のゲートウェイに分散されているとします。 また example.com という組織も同じようになっているとします。 これらからの投稿を許可するには

white_host=*.example.jp *.example.com
と指定します。

通常は gw1.example.jp からのアクセスと gw2.example.jp からのアクセスには異なるCGI引数が使用されますが、 上記の設定をすると *.example.jp にマッチするホストからのアクセスには同じCGI引数が使用されるようになります。

この機能は逆引きを詐称されると回避されてしまいますが、そこまでやる spammer はほとんどいないかと思います。

コメント中のURL数の制限

コメント中にURLが大量に記載されている投稿を禁止します。

メールアドレスやURL欄を利用したspam判別

投稿フォームのメールアドレス欄やURL欄に不必要に情報を入力してある場合、それを spam と判別します。

YY-BOARD の投稿フォームにはメールアドレス(Eメール)欄やURL(参照先)欄が用意されています。 しかし掲示板の運用目的によってはこれらの欄は不要な場合がありますので、これらの欄を使用しないように設定できるようにしました。

また spammer によってはこれらの欄に無条件に何らかの情報を入力してくる場合がありますので、これを逆手にとり、投稿フォームの警告にも関わらずこれらの欄に情報が入力されている場合に spam と判別する機能を追加しました。

フォーム表示から投稿までの最少時間の設定

フォームを表示してから一定時間経たないと投稿を受け付けないようにします。

yybbs.cgiにアクセスしてフォームを取得した直後に投稿を行うタイプの spam 投稿ロボットからの投稿を防ぎます。

GET/HEAD以外でのyybbs.cgiへのアクセス禁止

GET/HEAD以外のHTTPメソッドでyybbs.cgiにアクセスすることを禁止します。

現在当方にきているspam投稿ロボットが、yybbs.cgiにPOSTメソッドでアクセスすることが多いので、この機能を追加してみました。

おかしなHost:ヘッダの拒否

環境変数 HTTP_HOST (HTTPのHost:ヘッダ)に通常ありえないホスト名や文字列が入っている場合に、投稿を拒否します。

おかしなReferer:ヘッダの拒否

環境変数 HTTP_REFERER (HTTPのReferer:ヘッダ)に通常ありえないリファラーや文字列が入っている場合に、投稿を拒否します。

URLの自動リンクに rel="nofollow" を追加する

「URLの自動リンク」を有効にしている($autolink = 1)場合、リンクに「rel="nofollow"」という属性を追加します。

Google・Yahoo!・Microsoft(msn)など大手サーチエンジンは、この属性が含まれているリンクをページの重要度(Googleでいう所のページランク)の計算から除外します。 つまり spam を投稿しても検索結果の順位向上に繋がらなくなるので、spammer の攻撃する気を多少なりとも削ぐことができるかもしれません。 (単に URL を撒き散らし掲示板の訪問者に踏ませるのが目的の場合はあまり意味がないでしょうけど)

ログに必ずIPアドレスも保存する

YY-BOARDは、ホスト名が逆引きできた場合はホスト名のみをログに記録します。 しかし、逆引きがおかしかったり、逆引きを詐称しているホストからのアクセスの場合、spam対策の調査が難しくなる場合がありますので、必ずIPアドレスも記録する機能を追加しました。
この機能を有効にすると、ログの形式がYY-BOARDオリジナルから若干変化します。 YY-BOARD単体で使用する場合は問題ないはずですが、ご注意ください。

spam 投稿のメールでの通知

yyini.cgi にて $mailing を 1 か 2 に設定し、投稿があるとメール通知するようにしている場合は、上記の追加機能のうち「CGI引数名のランダム化」以外に引っ掛かった投稿もメール通知されます。

メール報告が不要な場合は $spam_report_mail を 0 に設定してください。(v7.4で導入)

spam 投稿のログ作成

spam と判断した投稿のログを作成します。

spam と判断した投稿を、独立したログファイルに保存することができます。 形式はタブ区切りのテキストファイルで、項目は順番に次の通りです。

このログを使用して、先回りして禁止ワードを設定したりアクセス制限を行ったりという対策が取れるかと思います。
ログファイル閲覧用のサンプルCGIはBBSantispam.pmのアーカイブに含まれていますが、そのCGIはアクセス制限などは一切考慮されていませんので、ご利用の際は などを行ってください。

管理モードを隠す機能

管理モードのパスワードを狙うような攻撃が確認されたので、 管理モードへのリンクを隠す機能と、 管理モードの引数名(標準はadmin)を変更する機能を追加しました。

管理を行う場合は以下のようにするといいでしょう。

  1. yyini.cgi の $admin_mode_name = "admin"; の admin の文字列を適当なものに変更する。
  2. 掲示板のページを表示させ、上部の「管理用」のリンクを辿る。
  3. 管理モードのログイン画面をブックマークするなどする。
  4. yyini.cgi の $hide_admin_link = 0; の 0 を 1 に変更し、掲示板の画面から管理モードに入れないようにする。

BBQによる公開プロキシからの投稿拒否

2ちゃんねるの BBQ を利用して、公開プロキシとなっているホストから投稿を拒否します。 公開プロキシを利用したspam投稿や荒らし投稿に効果があると思われます。

当サイトにきている不審なアクセスをピックアップしてBBQチェックにかけてみると、 思いのほか高確率でヒットしたので、効果はあると思われます。

GeoIPによる国単位でのアクセス拒否

GeoIP を利用して国単位でアクセスを拒否します。 spamの投稿元が特定の国に集中していることがありますので、この機能で該当国ごと拒否すると効果的です。

この機能は標準でコメントアウトされています。 利用するには必要なものおよび手順を参照してください。

その他 spam 対策以外の機能追加

インストール・設定

必要なもの

オリジナルの YY-BOARD が動作する環境に加えて、 perl の Digest::MD5 および Time::Local ライブラリが必要となります。 比較的新しい perl ならどちらも標準で提供されていると思います。

また GeoIP を利用するためには、GeoIP 自身と、perl の Geo::IP ライブラリが必要となります。 これはおそらく標準では提供されていないと思いますので、利用できるかどうかはサーバの管理者にご相談ください。

手順

  1. まずは同じバージョンのオリジナルの YY-BOARD (5.8かそれ以降のバージョン)をインストールし、動作することを確認してください。 インストール方法はYY-BOARDのページをご参照ください。

  2. 当サイトからアーカイブをダウンロードし、展開してください。

  3. アンチスパム機能について BBSantispam-config.cgi で設定します。 具体的な設定方法についてはBBSantispam.pmマニュアルのCONFIGURATIONの章をご参照ください。

  4. GeoIPの機能を利用する場合は、BBSantispam.pm 先頭の「use Geo::IP;」の部分と、メソッド is_black_geoip のコメントを外してください。

  5. Webサーバに転送します。
    挿し替える必要があるファイル
    yybbs.cgi yyini.cgi yyregi.cgi (yyini.cgi での設定は改めて行ってください)
    新規に転送する必要があるファイル
    BBSantispam.pm BBSantispam-config.cgi
    必要に応じて転送するファイル
    spamlog.cgi (spamのログを取る場合)
    yyconf.cgi (yyini.cgiでの設定を別ファイルで行いたい場合。yyconf_cgiという名前でアーカイブに入っていますのでyyconf.cgiにリネームしてください)

  6. 掲示板が正常に動作することを確認してみてください。 また Webブラウザで掲示板の HTML ソースを表示させ、CGI の引数が次の例のようにランダムパターンになっていることを確認してみてください。
    <tr>
      <td><b>お名前</b></td>
      <td><input type=text name=91a5b24ff4269ae937b663994dedde06 size=28 value="" class=f></td>
    </tr>
    

うまく動作しない時は

オリジナルの YY-BOARD で動作確認をしていない。
→まずはオリジナルの YY-BOARD (5.8かそれ以降のバージョン)が動作することを確認してください。
perl のライブラリ(Digest::MD5)がない。
→ISPやレンタルサーバを利用している場合はそちらに確認してください。 自宅サーバ等の場合は自分が利用しているOSのコミュニティに相談してください。
エラーを確認する。
ISPのレンタルスペースやレンタルサーバの場合はエラーメッセージを確認できなかったり、Webサーバのログを見れない場合があるかと思います。 その場合はこのprinterror.cgiを利用してエラーメッセージを表示させ、解決を図ってください。

著作権とか

BBSantispam.pm その他 BBSantispam 関連ファイル、YY-BOARD の改造部分
著作権は主張します。
Copyright 2006, HIRAMOTO Kouji. All Rights Reserved.

コードやアルゴリズムなどの流用は自由に行っていただいて構いませんし、 特に連絡もいりません。 しかし、丸々パクって自分の著作であると主張したりというような 恥ずかしい行為だけはご遠慮ください。

それ以外の YY-BOARD オリジナルの部分
YY-BOARDに準じます。 YY-BOARDの権利などについては「CGIスクリプト利用規定」をご参照ください。

無保証です

ダウンロード

ダウンロードの前に「CGIスクリプト利用規定」をご一読、ご理解いただいた上で、ご利用ください。

改定履歴

YY-BOARD 5.8 spam対策改造版 (version 7.7.2) (2007/02/20)