コメントスパムやトラックバックスパムによる過負荷を防ぐにはどうしたらいいですか。スクリプトを設置しない、MTをやめる、という回答は×。


MovableTypeと掲示板を設置していたら、毛唐から異常なほどのspamが毎日万単位で送信され、「サーバーが過負荷だからcgiを停止しました」と連絡が来ました。
そもそも、サーバーが過負荷になったのはspamテロリストどもの絨毯爆撃をくらったからであって、責任は100%、紅毛人スパマーにあります。スクリプトの更新やNG語の追加などできる限りのことはやってきましたが、それを上回る物量攻撃によって過負荷になったのです。
絨毯爆撃をくらったら、少なくともサーバーにアクセスはあります。CGIでスパム排除するとしても、CGIは動いてしまいます。
そこで質問です。何とかspam攻撃を有効に排除する方法はないのでしょうか。
.htacceessでIPで弾くのも、常時変化し続ける毛唐攻撃者のIPには対処できません。

できれば米軍には、スパマーをアルカイダ認定して空爆していただきたいところですが、スパムをCGIにたどり着かせないための専守防衛策を教えてください。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/11/25 16:48:11
  • 終了:2006/11/30 09:20:29

回答(8件)

id:inudaisho No.1

inudaisho回答回数2ベストアンサー獲得回数02006/11/25 17:06:49

ポイント10pt

http://q.hatena.ne.jp/1164440889

URLはダミーです。

情報戦の段階で負けています。

敵に察知されて絨毯爆撃をくらうようでは

何を言っても負け犬の遠吠え。

そういうあなたにはCGIのファイル名の書き換えをすすめます。

BBSやMovableTypeであると敵に察知されないように書き換えてください。敵はプログラムですから、決まった事以外はできません。当然ですが、CGI内部でファイル名を使っているところがあればそこも書き換えてくださいね。

健闘を祈る!

id:matsunaga

ファイル名書き換えは済んでいます。

そもそもamezo.cgiだったりします。

敵はファイル名検出プログラムを持っています。

2006/11/25 18:15:58
id:masashi0316 No.2

masashi0316回答回数16ベストアンサー獲得回数02006/11/25 17:24:43

ポイント3pt

毛唐からということで、かつ、日本語のサイトであれば、一番単純なのはIPアドレスで日本以外からのアクセス制限をかけるというのはどうですか?

http://mikeneko.creator.club.ne.jp/~lab/web/htaccess/access.html

日本のIP

http://www.cgis.biz/tools/access.php

id:matsunaga

台湾・香港からの有意義なアクセスも多いので、排除できません。

というか、こういう鎖国的技法は使いたくありません。

2006/11/25 18:16:48
id:kronecker No.3

kronecker回答回数88ベストアンサー獲得回数102006/11/25 17:28:20

ポイント3pt

海外からのアクセスを全部はじくのなら、

.htacceessを次のように設定すればよいかと。

order deny,allow

deny from all

allow from .jp

参考 http://q.hatena.ne.jp/1161772210

コメント欄で指摘されているようにパフォーマンスが落ちる可能性があります。

id:matsunaga

同上

2006/11/25 18:17:06
id:masashi0316 No.4

masashi0316回答回数16ベストアンサー獲得回数02006/11/25 17:33:02

ポイント3pt

http://q.hatena.ne.jp/

もうひとつ思いつきました。

URLはダミーです。

こちらはポイント必要なしで。。

もし、SPAMが英語圏からのものであれば、恐らく2バイト文字は使用しないと思うので以下のような正規表現でマッチしなければNGというような内容をスクリプト内にはさめば、コメントは蹴れるかもしれません。

トラックバックは機能がよくわかってないので、どうかわかりませんが。。

/[^0-9a-zA-Z!"#\$%&\'\(\)=\-~\^|\\\`@{\[\+;\*:}\]<,>\.\?\/_\n\r\t\s]/

id:matsunaga

そのように「正規表現」で判断している時点で、CGIが稼働しているわけです。もちろんページ再構築しないだけマシではありますが。

ちなみに、MTのスパム判定ルーチンは現在極めて優秀で、ほとんどの迷惑コメント・トラックバックを弾いてくれています。弾いてはいるけれども、そもそもそういうspamが一日に何万とやってくること自体、サーバー負荷の原因となっています。

2006/11/25 18:21:36
id:inudaisho No.5

inudaisho回答回数2ベストアンサー獲得回数02006/11/25 18:31:30

ポイント10pt

http://q.hatena.ne.jp/

.cgiが残ってますよ!

これも書き換えないと!

cgiハンドラの拡張子に適当なモノを付け足して

試してください。

id:kurukuru-neko No.6

kurukuru-neko回答回数1844ベストアンサー獲得回数1552006/11/25 19:19:05

ポイント20pt

サービスを停止されるのが一番の痛手と

思われます。

SPAMの接続を禁止しない限りサーバリソースは

使われるので対策はIPリソース規制しかない。

鎖国的な方法であれサービスを守るのであれば

該当IPからの接続拒否しか対策はないと思います。

接続した後では相手に情報を与えることになり対策

されるだけなので、接続された段階で負けです。

専守防衛には、接続させない以外手はない。

1.特定IPからのCGIで一定時間に限度超えた場合又は、

  無効な投稿をした場合該当IPからの投稿を

  自動的に一定期間自動規制をようなCGIを作成

・.htaccess又は、IPレベルでの自動接続禁止

  

2.上記方法で問題のあるIPからの接続があった場合

  処理の速度を極端に遅くする。

  (早く処理できる=相手の思う壺)  

  ・処理優先度下げ負荷を下げ、最終的にエラーで

   終わる。

3.CGIは変更しないで定期的にログを解析

  して不正なアクセスサービスを動的に禁止

・.htaccess又は、IPレベルでの自動接続禁止

  

4.CGIの拡張子を".cgi"以外に取り合えず変える

5.正規のCGIを呼び出し元(HTML等)では、

  CGIのパラメータ文字列をサーバ側で管理して

  一定時間内のみ該当文字列での投稿を1回だけ

  認めるようにする。 同時に1.~4.の対策

  (データは全てPOSTで処理をする)

6.普通使われない方法で端末の認証をする。

  例えば端末に表示されるHTMLに

  画像(gif等)がある場合通常ファイル名のみが

  指定されているがサーバで動的にパラメータを

  生成することにより端末がそのHTMLを

  表示した場合パラメータを指定してサーバを

  呼び出すことになる。

  このときのパラメータによりサーバの投稿

  可能条件とする。

  aaaa.gif?1234455

  (4.の応用パターン)

===============================================

http://www.nurs.or.jp/~sug/homep/spam/spam2.htm

http://flatray.com/bbs-antispam/yy-board/

id:matsunaga

鎖国的な方法が使えないというのは、実は、世界中にまともな利用者がいるという問題があるからなのです。

イスパニヤ人が全員侵略者と判断できるなら鎖国に踏み切ってもいいのでしょうが、そうでないならユーザーを弾くわけにもいかない……。

ただ、1~4の対策は有効そうな気がします。

問題は、自分でスクリプトを組めるわけではないということです。

2006/11/25 23:25:54
id:shg No.7

shg回答回数16ベストアンサー獲得回数12006/11/25 23:09:39

ポイント20pt

私もコメント・トラックバックスパムに悩まされて、以下のmagicvox.netにて

紹介されていたCAPTCHAを用いた対策の導入を検討しています。ご参考まで♪

CAPTCHAによるトラックバックスパム対策

http://www.magicvox.net/archive/2006/06211659/

CAPTCHA によるコメントスパム対策

http://www.magicvox.net/archive/2005/06012241/

id:matsunaga

ひみこーどタイプの対策ですね。

これが汎用で簡単に使えるとなると、応用範囲は広いと思います。

もっとも、サーバー負荷そのものは完全に解消できないわけですけど。

2006/11/26 10:03:35
id:ymch No.8

やちまう回答回数36ベストアンサー獲得回数52006/11/26 06:52:55

ポイント74pt

WebサーバがApacheでしたら、CGI起動のプロセスに至らないようにするためには「.htaccess」での防御が主になると思いますが、「.htaccess」で弾くことが出来る条件は「IPアドレス」だけではありません。


ご自身のサイトのApacheアクセスログを閲覧することは可能ですか?

まずは敵を知ることから始めなくてはならないと思います。


Apacheで一般的なcombinedログ形式でしたら…

  • ホスト名(IPアドレス)
  • リモートログ名(Ident)
  • 認証ユーザー名
  • 時刻
  • リクエスト内容
  • ステータスコード
  • 転送量
  • リファラ
  • ブラウザ名(User-Agent)

…が記録されていることと思います。


万単位で押し寄せて来るような迷惑行為の場合は、殆どの場合、自動化するためのツールを用いています。アクセスログからそれらの特徴を見抜くことで、完全ではありませんが被害を減らすことは可能だと思います。


例えば、自動投稿ツールのバグなのか、ブラウザ名として「User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)」というすっとぼけた痕跡を残していくマヌケな仕様のツールによるアクセスも数多く(私のところでも1日に数百アクセス)あります。まともなブラウザなら「User-Agent」なんていう文字列はブラウザ名に含まれません。


当然ながら、そんな奴らは…

SetEnvIf User-Agent "User-Agent" spammer

Order deny,allow

deny from env=spammer

…で追い出してしまえば良いわけです。


また、トラックバックの場合、真っ当なトラックバックであればブラウザを名乗るようなアクセスはあり得ません。そういった迷惑ツールを「運用していく中でアクセスログから見出して追記」していくだけで、相当な数のトラックバックスパムをCGI起動プロセスに至る前に排除することが出来ます。


(例:mt-tb.cgiがトラックバック受信用のCGIだとしたとき)

<Files mt-tb.cgi>

<limit GET POST>

SetEnvIf User-Agent "Mozilla/4\.0 \(compatible; MSIE 6\.0; Windows NT 5\.1\)" tb_spam

SetEnvIf User-Agent "Mozilla/4\.0 \(compatible; MSIE 5\.5; Windows NT\)" tb_spam

SetEnvIf User-Agent "Mozilla/5\.0 compatible /1\.00 \(i686-pc-linux\)" tb_spam

SetEnvIf User-Agent "Microsoft URL Control - 6\.00\.8862" tb_spam

Order Allow,Deny

Allow from all

Deny from env=tb_spam

</limit>

</Files>

(※参考 http://gigazine.net/index.php?/news/comments/20060901_trackbacks...


コンテンツが日本語メインでしたら、日本語を表示できないブラウザにはお引き取り願うという方法もアリだと思います。その際には、エラーメッセージで「日本語を表示できる環境にしてからアクセスしてね」というのを表示してあげれば、一応、来訪者側にも対処の余地があるってことで。迷惑投稿ツールは多分、画像で作成されているエラーメッセージの解釈はしないでしょう。


SetEnvIf Accept-Language "ja" Japanese_OK

Order Deny,Allow

Deny from all

Allow from env=Japanese_OK

ErrorDocument 403 /messages/HowToPost.gif #←ブラウザの言語設定の方法を説明した画像ファイル


ちなみに、SetEnvIfで弾いたアクセスが一般のアクセスログに混ざると腹立たしいので、

私は別ログに記録する形でログを分離させています。


さらに(極論ですが)、ユーザー名とパスワードを誰でも分かる場所に「公然と画像で掲示」しておいて、投稿用のスクリプトにBASIC認証をかけてしまうという方法を用いるとか。(BASIC認証はファイル単体にもかけられます。)


<Files bbspost.cgi>

<limit GET POST>

AuthType Basic

AuthName "User=hoge Password=fuga" #←ここにも認証情報を宣言しちゃう…(^_^;)

AuthUserFile /path/to/.htpasswd # ←もちろん、あらかじめ作成しておきます。

AuthGroupFile /dev/null

order deny,allow

require valid-user

</limit>

</Files>


他にも正規表現を駆使したりとか、色々なアイデアがありそうですが…。

私は頭があまり良くないせいか思い付きません…(^_^;)

id:matsunaga

User-Agent!!!!!!!!!!!!!!!!

これは、連中が気づかない間は有力な対策になりそうですね。

別サイト(spam対策されていると思われるサーバー)の直近のログを見たところ、確かにUser-Agentが含まれているようです。それにしても数百とか数千とか連続で送ってきてアホか南蛮人は。

2006/11/26 12:00:29

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません