朝起きてきたら、サーバーのハードディスクがカラカラ言ってる。
ずーっとカラカラ言いっぱなし。これって変じゃないか?障害か?
Windowsパソコンを上げて、SSHでアクセスしてみた。激遅!!
ようやくtopコマンドを入れる事が出来た。
mt-comments.cgi
mt-tb.cgi
プロセス乱立...一体何個ある?こりゃ遅くもなるわいな(汗
明らかにトラックバック&コメントスパムだな
このままではどうしようもないので、ADSLルーターを再起動して、グローバルIPを変更する。こうすれば当分の間(DDNSの書き換えの間)は、スパマーからアクセスを受けなくなる。
手っ取り早く原因を調べるには、ログの確認からだ。
# cat /var/log/message
# cat /var/log/httpd/access.log
access.logを見て大凡の状況が分かった。 mt-comments.cgiとmt-tb.cgiにアクセスして、POSTしようとしている輩が集中してアクセスしているのだ。アクセス元のIPアドレスは同一では無く、これは恐らくプロキシなどを噛ましているのだろうと推測する。
ちなみにこのブログサーバは、韓国、中国などの国に割り当てられたIPアドレスはdenyするように、パケットフィルタリングしている。 それをくぐってくるという事は、それなりのプロクシを挿しているんだろう。
さて、効果的な対処方法は無いかなと、Excelに読ませて並び替えなどしてログをチェックしていると共通点に気づいた。User-Agent情報に共通点があったのだ。その一例を記す。
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4
ここで目を付けたのは、en-USという所である。Mozillaだろうが、IEだろうが、FirefoxだろうがGeckoエンジンだろうがどうでもええ。拒否したいのはUSブラウザを使っている奴なのだ。
そこで、httpd.confでUSをDenyする事にした。
具体的には下記の様にSetEnvIfと、Deny記述を追加するだけだ。
UserDir public_html
<Directory /home/*/public_html>
AllowOverride FileInfo AuthConfig Limit
SetEnvIf User-Agent en-US Bad-User-Agent
<Limit GET POST OPTIONS PROPFIND>
Order allow,deny
Allow from all
Deny from env=Bad-User-Agent
</Limit>
<Limit PUT DELETE PATCH PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
Order deny,allow
Deny from all
</Limit>
</Directory>
これでUser-Agent情報にen-USという文字が入っていたらDenyされるハズ。
手っ取り早くテストするには、Firefoxにアドイン(User Agent Switcher)を入れて、適当なブラウザ情報を装ってみる事だ。
en-USという文字をUser-Agentに入れて見たら"403 Forbidden"が返る様になった。Permission Denyである。アクセス権が有りませんって意味らしい。
httpdのエラーログには下記の様な記述が記録された(トラックバック拒否成功)
client denied by server configuration: /home/hogehoge/public_html/mt-tb.cgi
へへん、ざまあみろ。という訳で英語版のブラウザを使っている奴はとりあえず拒否出来るだろう。
こんな事を書くとバレるかな?まぁとりあえず他のブラウザを使ってアクセスして来ないと見られないだろう。それに日本語を読める可能性は低いし。でも日本語読めたらこちらの手の内がバレバレだな。まぁその時は別の対処方法を考えよう。
正常なUserAgentについては、UserAgent一覧が詳しい。これを偽装してきたらひとたまりもないが、まぁその時は別の方法を考えると言うことで。


コメント