Top |
BBSantispam
MiniBBS spam 対策改造
最新版: version 1.0 (2006/12/18)
改定履歴
ネットサーフレスキュー[Web裏技]
様の
MiniBBS (簡易BBS)
に、自作の
掲示板用アンチスパムライブラリ BBSantispam
を組み込みました。
- 追加機能
- フォーム取得時と投稿時のホストの比較 |
英字のみの投稿禁止 |
逆引きできないホストからの投稿禁止 |
逆引きで得たホスト名が正引きできない場合の投稿禁止 |
ホスト名・IPアドレスのホワイトリスト |
コメント中のURL数の制限 |
フォーム表示から投稿までの最少時間・最大時間の設定 |
spam 投稿のログ作成 |
BBQによる公開プロキシからの投稿拒否 |
GeoIPによる国単位でのアクセス拒否
- インストール・設定
- 必要なもの |
手順
- うまく動作しない時は
- 著作権とか
- 無保証です
- ダウンロード
フォーム取得時と投稿時のホストを比較し、異なる場合は投稿を拒否します。
ボットネットを利用していると思われる海外からの spam 投稿で、
- あるホストA からアクセスしてフォームの内容を取得し
- 直後にまったく別のホストB から spam を投稿する
という動作をするものがありましたので、これを拒否します。
英字のみの投稿を禁止します。
(主に海外(英語圏)からの)英語の spam 投稿を防ぎます。
日本人を対象とした掲示板を運用するのならば問題ないでしょう。
逆引き(IPアドレス→ホスト名への変換)ができないホストからの投稿を禁止します。
海外の ISP には逆引きを設定していない所が多いです。
それを利用し、逆引きできないホストからの投稿を拒否することにより、海外からの spam 投稿を防ぎます。
国内でもたまに逆引きできないホストがあったりしますが、それは後述の「IPアドレスのホワイトリスト」を利用してください。
この機能は「ホスト名やIPアドレスでのアクセス制限」と似ていますが、特に登録しなくても効果がある反面、逆引きできてしまうISPには効果がありません。
組み合わせて使うといいでしょう。
逆引きは設定されているものの、逆引きで得られたホスト名に対する正引きがちゃんと設定されていないホストからの投稿を禁止します。
(ただし逆引きと正引きの一致までは検査しません)
海外の ISP には適当な逆引き情報を設定している所もあったりします。
それを利用し、海外からの spam 投稿を防ぎます。
ここで登録したホストはIPアドレスやホスト名をベースにする制限が緩和されます。
(ワイルドカード対応、半角スペースで区切って複数列挙可能)
例えばある組織 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が大量に記載されている投稿を禁止します。
フォームを表示してから一定時間経たないと投稿を受け付けないようにします。
またフォームを表示してから一定時間以上経った場合に投稿を受け付けないようにします。
前者はフォームを取得した直後に投稿を行うタイプの spam 投稿ロボットを、
後者は予めフォームを取得し後で投稿を行うタイプの spam 投稿ロボットからの投稿を防ぎます。
2ちゃんねるの BBQ を利用して、公開プロキシとなっているホストから投稿を拒否します。
公開プロキシを利用したspam投稿や荒らし投稿に効果があると思われます。
当サイトにきている不審なアクセスをピックアップしてBBQチェックにかけてみると、
思いのほか高確率でヒットしたので、効果はあると思われます。
GeoIP を利用して国単位でアクセスを拒否します。
spamの投稿元が特定の国に集中していることがありますので、この機能で該当国ごと拒否すると効果的です。
この機能は標準でコメントアウトされています。
利用するには必要なものおよび手順を参照してください。
spam と判断した投稿のログを作成します。
spam と判断した投稿を、独立したログファイルに保存することができます。
形式はタブ区切りのテキストファイルで、項目は順番に次の通りです。
- 投稿日時(time関数が返す値)とCGIのPID (この組み合わせで大抵は一意な値になります)
- spam 判断基準
- altered antispam values
- フォーム取得時の時間を記録した引数が偽装されている場合。
- too fast
- フォーム取得から投稿までの間隔が短かすぎる場合。
- too late
- フォーム取得から投稿までの間隔が長すぎる場合。
- different host
- フォーム取得時と投稿時のホストが異なる場合。
- cannot r-resolv IPアドレス
- 逆引きできない場合。
- cannot resolv ホスト名
- 逆引きで得たホスト名が正引きできない場合。
- open proxy IPアドレス
- BBQチェックに引っ掛かり公開プロキシと判断された場合。
- black host ホスト名
- 禁止ホストに一致した場合。
- black geoip 国コード
- GeoIPによる国コードがブラックリストに一致した場合。
- black word 禁止ワード
- 禁止ワードに一致した場合。
- many url
- URLがたくさん記入されている場合。
- ascii post
- 英字のみの投稿の場合。
- IPアドレス(と、得られればホスト名)
- 「投稿者」欄
- 「Eメール」欄
- 「題名」欄
- 「内容」欄
- フォームを取得したホストのIPアドレス
- フォームを取得した日時
このログを使用して、先回りして禁止ワードを設定したりアクセス制限を行ったりという対策が取れるかと思います。
ログファイル閲覧用のサンプルCGIは
BBSantispam.pmのアーカイブに含まれていますが、そのCGIはアクセス制限などは一切考慮されていませんので、ご利用の際は
- Webサーバ側の機能で別途アクセス制限を行う。
- CGI名を推測できないものに変更する。
- アクセス制限機能を追加する。
などを行ってください。
オリジナルの MiniBBS が動作する環境に加えて、
perl の Digest::MD5 および Time::Local ライブラリが必要となります。
比較的新しい perl ならどちらも標準で提供されていると思います。
また GeoIP を利用するためには、GeoIP 自身と、perl の Geo::IP ライブラリが必要となります。
これはおそらく標準では提供されていないと思いますので、利用できるかどうかはサーバの管理者にご相談ください。
- まずは同じバージョンのオリジナルの MiniBBS (10.31)をインストールし、動作することを確認してください。
インストール方法はMiniBBSのページをご参照ください。
- 当サイトからアーカイブをダウンロードし、展開してください。
- アンチスパム機能について BBSantispam-config.cgi で設定します。
具体的な設定方法についてはBBSantispam.pmのマニュアルのCONFIGURATIONの章をご参照ください。
- GeoIPの機能を利用する場合は、BBSantispam.pm 先頭の「use Geo::IP;」の部分と、メソッド is_black_geoip のコメントを外してください。
- Webサーバに転送します。
- 挿し替える必要があるファイル
- minibbs.cgi (minibbs.cgi 先頭部分での設定は改めて行ってください)
- 新規に転送する必要があるファイル
- BBSantispam.pm BBSantispam-config.cgi
- 必要に応じて転送するファイル
- spamlog.cgi (spamのログを取る場合)
- BBSantispamのログファイル作成のためにロック機能を利用する場合は、
ロック用ディレクトリを作成してください。
BBSantispam-config.cgiの最後の方(spamlog_lockfile)で定義されており、
標準のディレクトリ名はlockです。
- 掲示板が正常に動作することと、BBSantispamによる制限が動作していること
(英字だけの投稿や、URLをたくさん列挙した投稿などが拒否されること)
を確認してみてください。
- オリジナルの MiniBBS で動作確認をしていない。
- →まずはオリジナルの MiniBBS (10.31)が動作することを確認してください。
- perl のライブラリ(Digest::MD5など)がない。
- →ISPやレンタルサーバを利用している場合はそちらに確認してください。
自宅サーバ等の場合は自分が利用しているOSのコミュニティに相談してください。
- エラーを確認する。
- ISPのレンタルスペースやレンタルサーバの場合はエラーメッセージを確認できなかったり、Webサーバのログを見れない場合があるかと思います。
その場合はこのprinterror.cgiを利用してエラーメッセージを表示させ、解決を図ってください。
- BBSantispam.pm その他 BBSantispam 関連ファイル
- 著作権は主張します。
Copyright 2006, HIRAMOTO Kouji. All Rights Reserved.
コードやアルゴリズムなどの流用は自由に行っていただいて構いませんし、
特に連絡もいりません。
しかし、丸々パクって自分の著作であると主張したりというような
恥ずかしい行為だけはご遠慮ください。
- それ以外の MiniBBS オリジナルの部分
- MiniBBSに準じます。
MiniBBSの権利などについては「スクリプト利用規定」をご参照ください。
- 特定パターンの spam 投稿には十分効果があることを確認していますが、ありとあらゆる spam 投稿に効果があるわけではありません。
- 安全に動作するように配慮してはいますが、本プログラムを使用したいかなる結果にも、当方では責任を持てませんし、持ちません。
ダウンロードの前に
「スクリプト利用規定」
および
「スクリプトの再配布について」
をご一読、ご理解いただいた上で、ご利用ください。
改定履歴
MiniBBS タイプ1 version 10.31 spam対策改造版 (version 1.0) (2006/12/18)