« 2006年10月 | トップページ | 2006年12月 »

2006年11月22日

ぜろちゃんねる(0ch BBS Script)掲示板のスパム対策

1ヶ月ほど前から、うちのぜろちゃんねる掲示板に英文スパムが来襲するようになり、当初はDNSブラックリスト(DNSBL/RBL)で対処してたのですが、プロのスパム屋は新しいプロキシを次々と用意してくるわけで、ブラックリストがすべてを網羅できるわけはなく。それでも数が少ないうちはコマメに消してたのだけど、日増しにその数が増えて、やってらんねえ状態になったので、こんなふうにしてみますた、というメモ。

やってることは、2ちゃんねる BBQなどの任意のDNSBLサービスに登録されてるホストからの投稿を弾くのと、日本語文字(Shift_JISの2バイト文字)が本文に含まれない投稿を弾くこと(いわゆるひとつのBanAscii)。後者はURLだけのカキコとかも弾いてしまうわけですが、まあしょうがない。

ぜろちゃんねるスクリプトの改造は正直かなりマンドクセー('A`)わけですが、これなら改造が1箇所で済むし簡単な処理なのだけど、結構効果的なのではなかろうか、と。

追記@2007/01/30

# 0ch BBS Scriptの2005/11/13、2006/02/27、2007/01/24版で確認

# test/module/vara.plファイル内の
# IsRegulation(規制チェック)サブルーチン(2007/01/24版なら296行目あたり以降)内の
# 適当なところ(例えば「# 規制ユーザ・NGワードチェック」とある行の前)に
# 以下の「...」に囲まれている箇所を追加

# エラー番号は既存のものを流用なのでエラーメッセージも既存のもののままです
# それではワケワカランと思われる場合は、test/info/errmsg.cgiに新しい番号とメッセージを追加し
# 以下の「return」の後に続く番号をそれと取り替えるとモアベター

sub IsRegulation
{

...

  # 本文にShift_JISの2バイト文字が含まれていなければ
  # 600エラー(NGワード)

  if ($this->{'FORM'}->Get('MESSAGE') !~ /[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC]/) {
    return 600;
  }

  # 本文に<a~>または[url=や[url]が含まれていれば
  # 600エラー(NGワード)

  if ($this->{'FORM'}->Get('MESSAGE') =~ /(<a\b[^>]*?>|\[url(?:\s?=|\]))/i) {
    return 600;
  }

  # メール欄に@が含まれていれば
  # 600エラー(NGワード)

  if ($this->{'FORM'}->Contain('mail','@')) {
    return 600;
  }

  # IPアドレスが以下で指定するDNSBLのいずれかに登録されてれば
  # 997エラー(PROXY規制)
  # ブラックリスト鯖はお好みで

  my @dnsbls = (
    'niku.2ch.net',
    'bsb.spamlookup.net',
    'bbx.2ch.net'
  );

  $ENV{'REMOTE_ADDR'} =~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;
  foreach my $dnsbl_host (@dnsbls) {
    $dnsbl_host = "$4.$3.$2.$1.$dnsbl_host";
    if (gethostbyname($dnsbl_host)) {
      return 997;
    }
  }

...

}

で、昨日これを仕込んで以降24時間のうちに、以下のようなホストがスパムの投稿にやってきたわけですが、幸いすべて弾けた模様。エラーが103となってるものは「本文長すぎ」で、これは規制チェックより前に実施されるので、これに引っ掛かるヤツもいるのだけど、これで既に結構な数が弾けている。で、600エラーが本文に日本語文字が含まれなかったもの。ここまでですべて弾けてしまい、結局DNSBLのチェックにまではどいつも至ってなかったり。

来襲時刻エラーホスト名#1#2#3#4#5
11/21 20:29103c-71-230-86-217.hsd1.pa.comcast.net     US
11/22 19:13600bzq-84-110-225-57.red.bezeqint.net     IL
11/22 19:13600bzq-84-110-236-82.red.bezeqint.net     IL
11/22 19:12600bzq-84-110-231-119.red.bezeqint.net     IL
11/22 19:12600bzq-84-110-233-25.red.bezeqint.net     IL
11/22 16:4810382.137.247.132yes    SY
11/22 15:00103www.farmington.k12.mi.usyes    US
11/22 13:2210384-123-102-217.onocable.ono.com     ES
11/22 12:11600200.29.137.217yes   yesCL
11/22 12:10600218.236.45.155yesyesyes  KR
11/22 12:05600S01060040ca37ccf6.cn.shawcable.netyesyes   CA
11/22 12:05600avquarantine.sec.kq.noyesyes   NO
11/22 11:23103proxy4-jan.integrity.comyes    US
11/22 10:1710389-149-205-145.internetserviceteam.com yes   DE
11/22 09:51600218.236.111.150yesyesyesyes KR
11/22 09:3710382.137.247.131yes    SY
11/22 07:5010394.190.189.72.cfl.res.rr.com     US
11/22 06:21600ool-44c0fe41.dyn.optonline.net     US
11/22 06:02103adsl-75-52-193-66.dsl.chcgil.sbcglobal.netyes    US
11/22 04:11600bzq-84-110-226-237.red.bezeqint.net     IL
11/22 02:27103ulbcenter-04-b07.it-datacntr.louisville.edu     US
11/22 01:08103riy01che02.ae.net.sayesyesyes  SA
11/22 00:3810364.8.149.34     US
11/21 23:56600bzq-84-110-251-251.red.bezeqint.net     IL
11/21 23:56600bzq-84-110-252-72.red.bezeqint.net yes   IL
11/21 23:55600bzq-84-110-241-44.red.bezeqint.net     IL
11/21 23:31600220.119.158.14yesyesyes  KR
11/21 23:3060086.35.202.101yes yes  RO
11/21 23:29600211.207.215.84yes yes  KR
11/21 23:25600210.113.30.208yesyesyesyesyesKR
11/21 22:5310363-109-248-28.reverse.newskies.netyes yesyes US
11/21 21:1510389-149-205-145.internetserviceteam.com yes   DE

上表の「#1~5」の欄は、各ホストについて以下の各DNSBLサービスでの登録の有無です。

  1. 2ちゃんねる BBQ - niku.2ch.net
  2. SpamLookup - bsb.spamlookup.net
  3. The Spamhouse Project - sbl-xbl.spamhaus.org
  4. SpamCop.net - bl.spamcop.net
  5. RBL.JP - all.rbl.jp

ご覧の通り、どのブラックリストにも登録されていないホストが結構あり、プロのスパム屋に狙われたら、やっぱしDNSBLでの規制だけでは不十分なんだよね、ということですな。

なお、2ちゃんねる BBQはDSBLでの登録状況も併せて応答するので、上表ではDSBLは端折ってます(なので、このふたつを併用するのは無意味です)。また、ちなみにどのホストも、2ちゃんねる BBX(bbx.2ch.net)には登録されていなかったので、こちらも上表では端折ってます。

参考になったり興味深く拝見したページ

» 「ぜろちゃんねる(0ch BBS Script)掲示板のスパム対策」の続きを読む

Category: ウェブ制作
Posted 2006年11月22日 23:38

Aoaka Style Valid Aoaka