Top |
BBSantispam
ASKA BBS spam 対策改造
最新版: version 1.2 (2006/03/14)
改定履歴
KENT WEB
様の
ASKA BBS
に、自作の
掲示板用アンチスパムライブラリ BBSantispam
を組み込みました。
- ASKA BBS 標準の spam 対策機能
- 追加機能
- CGI引数名のランダム化 |
英字のみの投稿禁止 |
不適切な語句を含む投稿の禁止
逆引きできないホストからの投稿禁止 |
逆引きで得たホスト名が正引きできない場合の投稿禁止 |
ホスト名・IPアドレスのホワイトリスト |
コメント中のURL数の制限 |
フォーム表示から投稿までの最少時間の設定 |
GET/HEAD以外での記事表示の禁止 |
おかしなHost:ヘッダの拒否 |
おかしなReferer:ヘッダの拒否 |
URLの自動リンクに rel="nofollow" を挿入する |
spam 投稿のログ作成
- インストール・設定
- 必要なもの |
手順
- うまく動作しない時は
- 著作権とか
- 無保証です
- ダウンロード
ASKA BBS 3.3 には標準で「ホスト名やIPアドレスでのアクセス制限」「連続投稿制限」「他サイトから投稿排除」といった機能があります。
CGIの引数名としてランダムな文字列を使用します。
オリジナルの ASKA BBS は、例えば名前の引数名は name、本文のは comment というように、引数名が固定されています。
この場合、aska.cgi に POST のみを行うような単純な spam 投稿ロボットにすら狙われてしまいます。
またボットネットを利用していると思われる海外からの spam 投稿で、
- あるホストA から aska.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が大量に記載されている投稿を禁止します。
フォームを表示してから一定時間経たないと投稿を受け付けないようにします。
aska.cgiにアクセスしてフォームを取得した直後に投稿を行うタイプの spam 投稿ロボットからの投稿を防ぎます。
GET/HEAD以外のHTTPメソッドで記事表示することを禁止します。
現在当方にきているspam投稿ロボットが、最初にとりあえずPOSTメソッドでアクセスすることが多いので、この機能を追加してみました。
環境変数 HTTP_HOST (HTTPのHost:ヘッダ)に通常ありえないホスト名や文字列が入っている場合に、投稿を拒否します。
環境変数 HTTP_REFERER (HTTPのReferer:ヘッダ)に通常ありえないリファラーや文字列が入っている場合に、投稿を拒否します。
「URLの自動リンク」を有効にしている($autolink = 1)場合、リンクに「rel="nofollow"」という属性を追加します。
Google・Yahoo!・Microsoft(msn)など大手サーチエンジンは、この属性が含まれているリンクをページの重要度(Googleでいう所のページランク)の計算から除外します。
つまり spam を投稿しても検索結果の順位向上に繋がらなくなるので、spammer の攻撃する気を多少なりとも削ぐことができるかもしれません。
(単に URL を撒き散らし掲示板の訪問者に踏ませるのが目的の場合はあまり意味がないでしょうけど)
spam と判断した投稿のログを作成します。
spam と判断した投稿を、独立したログファイルに保存することができます。
形式はタブ区切りのテキストファイルで、項目は順番に次の通りです。
- 投稿日時(time関数が返す値)とCGIのPID (この組み合わせで大抵は一意な値になります)
- spam 判断基準
- from botnet
- 必須項目が記載されていない場合。(大抵はランダムCGI引数に引っ掛かったspam投稿でしょう)
- many url
- URLがたくさん記入されている場合。
- black word パターン
- 禁止ワードに一致した場合。
- cannot r-resolv IPアドレス
- 逆引きできない場合。
- cannot resolv ホスト名
- 逆引きで得たホスト名が正引きできない場合。
- ascii post
- 英字のみの投稿の場合。
- too fast
- フォーム表示から投稿までの間隔が短かすぎる場合。
- altered wait
- フォーム表示の時間を記録した引数が偽装されている場合。
- illegal method
- GET/HEAD以外のメソッドで記事表示しようとした場合。
- illegal HTTP_HOST
- おかしな HTTP_HOST (HTTPのHost:ヘッダ) の場合。
- illegal HTTP_REFERER
- おかしな HTTP_REFERER (HTTPのReferer:ヘッダ) の場合。
- IPアドレスとホスト名
- 「お名前」欄
- 「Eメール」欄
- 「タイトル」欄
- 「参照先」欄
- 「メッセージ」欄
このログを使用して、先回りして禁止ワードを設定したりアクセス制限を行ったりという対策が取れるかと思います。
ログファイル閲覧用のサンプルCGIは
BBSantispam.pmのアーカイブに含まれていますが、そのCGIはアクセス制限などは一切考慮されていませんので、ご利用の際は
- Webサーバ側の機能で別途アクセス制限を行う。
- CGI名を推測できないものに変更する。
- アクセス制限機能を追加する。
などを行ってください。
オリジナルの ASKA BBS が動作する環境に加えて、perl の Digest::MD5 ライブラリが必要となります。
比較的新しい perl ならどちらも標準で提供されていると思います。
- まずは同じバージョンのオリジナルの ASKA BBS (3.3かそれ以降のバージョン)をインストールし、動作することを確認してください。
インストール方法はASKA BBSのページをご参照ください。
- 当サイトからアーカイブをダウンロード、展開します。
- アンチスパム機能について BBSantispam-config.cgi で設定します。
具体的な設定方法についてはBBSantispam.pmのマニュアルのCONFIGURATIONの章をご参照ください。
- Webサーバに転送します。
- aska.cgi (当方で配布しているもの)
- 古い aska.cgi と挿し替える場合は、先頭部分の ASKA BBS の設定を、既存のものに合わせて改めて変更してください。
- BBSantispam.pm , BBSantispam-config.cgi
- aska.cgiと同じパーミッションで転送します。
- spamlog.cgi
- askalog.cgiと同じパーミッションで転送します。(spamのログを取る場合のみ必要です)
- 掲示板が正常に動作することを確認してみてください。
また Webブラウザで掲示板の HTML ソースを表示させ、CGI の引数が次の例のようにランダムパターンになっていることを確認してみてください。
<td nowrap><b>おなまえ</b></td>
<td><input type=text name=a046da9e160548ba74df0ff493d1afd70 size=28 value=""></td>
- オリジナルの ASKA BBS で動作確認をしていない。
- →まずはオリジナルの ASKA BBS (3.3かそれ以降のバージョン)が動作することを確認してください。
- perl のライブラリ(Digest::MD5)がない。
- →ISPやレンタルサーバを利用している場合はそちらに確認してください。
自宅サーバ等の場合は自分が利用しているOSのコミュニティに相談してください。
- エラーを確認する。
- ISPのレンタルスペースやレンタルサーバの場合はエラーメッセージを確認できなかったり、Webサーバのログを見れない場合があるかと思います。
その場合はこのprinterror.cgiを利用してエラーメッセージを表示させ、解決を図ってください。
- BBSantispam.pm その他 BBSantispam 関連ファイル、aska.cgi の改造部分
- 著作権は主張します。
Copyright 2006, HIRAMOTO Kouji. All Rights Reserved.
コードやアルゴリズムなどの流用は自由に行っていただいて構いませんし、
特に連絡もいりません。
しかし、丸々パクって自分の著作であると主張したりというような
恥ずかしい行為だけはご遠慮ください。
- それ以外の aska.cgi オリジナルの部分
- ASKA BBSに準じます。
ASKA BBSの権利などについては「CGIスクリプト利用規定」をご参照ください。
- 特定パターンの spam 投稿には十分効果があることを確認していますが、ありとあらゆる spam 投稿に効果があるわけではありません。
- 安全に動作するように配慮してはいますが、本プログラムを使用したいかなる結果にも、当方では責任を持てませんし、持ちません。
ダウンロードの前に「CGIスクリプト利用規定」をご一読、ご理解いただいた上で、ご利用ください。
改定履歴
ASKA BBS 3.3 spam対策改造版 (version 1.2) (2006/03/14)