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 5.8 には標準で「禁止ワード」「ホスト名やIPアドレスでのアクセス制限」「投稿キー」の機能があります。
CGIの引数名としてランダムな文字列を使用します。
オリジナルの YY-BOARD は、例えば名前の引数名は name、本文のは comment というように、引数名が固定されています。
この場合、yyregi.cgi に POST のみを行うような単純な spam 投稿ロボットにすら狙われてしまいます。
またボットネットを利用していると思われる海外からの spam 投稿で、
- あるホストA から yybbs.cgi にアクセスしてフォームの内容を取得し
- 直後にまったく別のホストB から spam を投稿する
という動作をするものがありました。
これらへの対策として、CGIの引数名としてランダムな文字列を使用します。
この機能は「投稿キー」と主旨が似ています。
またこの機能の副作用として「掲示板を表示してから1時間以内に投稿する必要がある」という制限が出てきますが、実運用にはほとんど影響はないと考えています。
英字のみの投稿を禁止します。
(主に海外(英語圏)からの)英語の spam 投稿を防ぎます。
日本人を対象とした掲示板を運用するのならば問題ないでしょう。
逆引き(IPアドレス→ホスト名への変換)ができないホストからの投稿を禁止します。
海外の ISP には逆引きを設定していない所が多いです。
それを利用し、逆引きできないホストからの投稿を拒否することにより、海外からの spam 投稿を防ぎます。
国内でもたまに逆引きできないホストがあったりしますが、それは後述の「IPアドレスのホワイトリスト」を利用してください。
この機能は「ホスト名やIPアドレスでのアクセス制限」と似ていますが、特に登録しなくても効果がある反面、逆引きできてしまうISPには効果がありません。
組み合わせて使うといいでしょう。
逆引きは設定されているものの、逆引きで得られたホスト名に対する正引きがちゃんと設定されていないホストからの投稿を禁止します。
(ただし逆引きと正引きの一致までは検査しません)
海外の ISP には適当な逆引き情報を設定している所もあったりします。
それを利用し、海外からの spam 投稿を防ぎます。
ここで登録したホストは「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欄に不必要に情報を入力してある場合、それを spam と判別します。
YY-BOARD の投稿フォームにはメールアドレス(Eメール)欄やURL(参照先)欄が用意されています。
しかし掲示板の運用目的によってはこれらの欄は不要な場合がありますので、これらの欄を使用しないように設定できるようにしました。
また spammer によってはこれらの欄に無条件に何らかの情報を入力してくる場合がありますので、これを逆手にとり、投稿フォームの警告にも関わらずこれらの欄に情報が入力されている場合に spam と判別する機能を追加しました。
フォームを表示してから一定時間経たないと投稿を受け付けないようにします。
yybbs.cgiにアクセスしてフォームを取得した直後に投稿を行うタイプの spam 投稿ロボットからの投稿を防ぎます。
GET/HEAD以外のHTTPメソッドでyybbs.cgiにアクセスすることを禁止します。
現在当方にきているspam投稿ロボットが、yybbs.cgiにPOSTメソッドでアクセスすることが多いので、この機能を追加してみました。
環境変数 HTTP_HOST (HTTPのHost:ヘッダ)に通常ありえないホスト名や文字列が入っている場合に、投稿を拒否します。
環境変数 HTTP_REFERER (HTTPのReferer:ヘッダ)に通常ありえないリファラーや文字列が入っている場合に、投稿を拒否します。
「URLの自動リンク」を有効にしている($autolink = 1)場合、リンクに「rel="nofollow"」という属性を追加します。
Google・Yahoo!・Microsoft(msn)など大手サーチエンジンは、この属性が含まれているリンクをページの重要度(Googleでいう所のページランク)の計算から除外します。
つまり spam を投稿しても検索結果の順位向上に繋がらなくなるので、spammer の攻撃する気を多少なりとも削ぐことができるかもしれません。
(単に URL を撒き散らし掲示板の訪問者に踏ませるのが目的の場合はあまり意味がないでしょうけど)
YY-BOARDは、ホスト名が逆引きできた場合はホスト名のみをログに記録します。
しかし、逆引きがおかしかったり、逆引きを詐称しているホストからのアクセスの場合、spam対策の調査が難しくなる場合がありますので、必ずIPアドレスも記録する機能を追加しました。
この機能を有効にすると、ログの形式がYY-BOARDオリジナルから若干変化します。
YY-BOARD単体で使用する場合は問題ないはずですが、ご注意ください。
yyini.cgi にて $mailing を 1 か 2 に設定し、投稿があるとメール通知するようにしている場合は、上記の追加機能のうち「CGI引数名のランダム化」以外に引っ掛かった投稿もメール通知されます。
メール報告が不要な場合は $spam_report_mail を 0 に設定してください。(v7.4で導入)
spam と判断した投稿のログを作成します。
spam と判断した投稿を、独立したログファイルに保存することができます。
形式はタブ区切りのテキストファイルで、項目は順番に次の通りです。
- 投稿日時(time関数が返す値)とCGIのPID (この組み合わせで大抵は一意な値になります)
- spam 判断基準
- from botnet
- 必須項目が記載されていない場合。(大抵はランダムCGI引数に引っ掛かったspam投稿でしょう)
- needless form
- 記入してはいけないフォームに記入がある場合。
- many url
- URLがたくさん記入されている場合。
- black host ホスト名
- 禁止ホストに一致した場合。
- black word 禁止ワード
- 禁止ワードに一致した場合。
- cannot r-resolv IPアドレス
- 逆引きできない場合。
- cannot resolv ホスト名
- 逆引きで得たホスト名が正引きできない場合。
- ascii post
- 英字のみの投稿の場合。
- too fast
- フォーム表示から投稿までの間隔が短かすぎる場合。
- altered wait
- フォーム表示の時間を記録した引数が偽装されている場合。
- illegal method
- yybbs.cgiにGET/HEAD以外のメソッドでアクセスされた場合。
- illegal HTTP_HOST
- おかしな HTTP_HOST (HTTPのHost:ヘッダ) の場合。
- illegal HTTP_REFERER
- おかしな HTTP_REFERER (HTTPのReferer:ヘッダ) の場合。
- open proxy IPアドレス
- BBQチェックに引っ掛かり公開プロキシと判断された場合。(v7.6より)
- black geoip 国コード
- GeoIPによる国コードがブラックリストに一致した場合。(v7.7より)
- IPアドレスとホスト名
- 「お名前」欄
- 「Eメール」欄
- 「タイトル」欄
- 「参照先」欄
- 「メッセージ」欄
- フォームを取得したホストのIPアドレス (v7.5より)
- フォームを取得した日時 (v7.5より)
このログを使用して、先回りして禁止ワードを設定したりアクセス制限を行ったりという対策が取れるかと思います。
ログファイル閲覧用のサンプルCGIは
BBSantispam.pmのアーカイブに含まれていますが、そのCGIはアクセス制限などは一切考慮されていませんので、ご利用の際は
- Webサーバ側の機能で別途アクセス制限を行う。
- CGI名を推測できないものに変更する。
- アクセス制限機能を追加する。
などを行ってください。
管理モードのパスワードを狙うような攻撃が確認されたので、
管理モードへのリンクを隠す機能と、
管理モードの引数名(標準はadmin)を変更する機能を追加しました。
管理を行う場合は以下のようにするといいでしょう。
- yyini.cgi の $admin_mode_name = "admin"; の admin の文字列を適当なものに変更する。
- 掲示板のページを表示させ、上部の「管理用」のリンクを辿る。
- 管理モードのログイン画面をブックマークするなどする。
- yyini.cgi の $hide_admin_link = 0; の 0 を 1 に変更し、掲示板の画面から管理モードに入れないようにする。
2ちゃんねるの BBQ を利用して、公開プロキシとなっているホストから投稿を拒否します。
公開プロキシを利用したspam投稿や荒らし投稿に効果があると思われます。
当サイトにきている不審なアクセスをピックアップしてBBQチェックにかけてみると、
思いのほか高確率でヒットしたので、効果はあると思われます。
GeoIP を利用して国単位でアクセスを拒否します。
spamの投稿元が特定の国に集中していることがありますので、この機能で該当国ごと拒否すると効果的です。
この機能は標準でコメントアウトされています。
利用するには必要なものおよび手順を参照してください。
- 投稿フォームのデフォルトの名前を指定できます。
- スタイルシートを指定できます。
- タイトルの下にレジュメ(掲示板の要約)を表示できます。
- yyini.cgi先頭の設定部分をyyconf.cgiというファイルに外出しできます。
(掲示板プログラムのバージョンアップ時に手間を減らせる)
オリジナルの YY-BOARD が動作する環境に加えて、
perl の Digest::MD5 および Time::Local ライブラリが必要となります。
比較的新しい perl ならどちらも標準で提供されていると思います。
また GeoIP を利用するためには、GeoIP 自身と、perl の Geo::IP ライブラリが必要となります。
これはおそらく標準では提供されていないと思いますので、利用できるかどうかはサーバの管理者にご相談ください。
- まずは同じバージョンのオリジナルの YY-BOARD (5.8かそれ以降のバージョン)をインストールし、動作することを確認してください。
インストール方法はYY-BOARDのページをご参照ください。
- 当サイトからアーカイブをダウンロードし、展開してください。
- アンチスパム機能について BBSantispam-config.cgi で設定します。
具体的な設定方法についてはBBSantispam.pmのマニュアルのCONFIGURATIONの章をご参照ください。
- GeoIPの機能を利用する場合は、BBSantispam.pm 先頭の「use Geo::IP;」の部分と、メソッド is_black_geoip のコメントを外してください。
- 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にリネームしてください)
- 掲示板が正常に動作することを確認してみてください。
また 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スクリプト利用規定」をご参照ください。
- 特定パターンの spam 投稿には十分効果があることを確認していますが、ありとあらゆる spam 投稿に効果があるわけではありません。
- 安全に動作するように配慮してはいますが、本プログラムを使用したいかなる結果にも、当方では責任を持てませんし、持ちません。
ダウンロードの前に「CGIスクリプト利用規定」をご一読、ご理解いただいた上で、ご利用ください。
改定履歴
YY-BOARD 5.8 spam対策改造版 (version 7.7.2) (2007/02/20)