« 2007年03月 | メイン | 2007年09月 »
2007年06月11日
コメントスパムでブログサーバあっぷあっぷ(^◇^;)
朝起きてきたら、サーバーのハードディスクがカラカラ言ってる。 ずーっとカラカラ言いっぱなし。これって変じゃないか?障害か?
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一覧が詳しい。これを偽装してきたらひとたまりもないが、まぁその時は別の方法を考えると言うことで。
投稿者 sasapurin : 12:10 | コメント (0) | トラックバック
2007年06月02日
久しぶりのトラブルシューティング
いやぁ参ったです。全然トラブルの無かったWebサーバが留守にしている間にトラブルを起こしたらしく、アクセス出来ないとメールをいただきました。Netcraftで調べてみたら確かに変。そして調べているとどんどんはまっていく(汗まず変だったのがローカルループバックloに関するエラー。/var/log/messageにたっぷり記録されていました。こんなの原因調べる術知らないから素直に再起動してみた。凄く久しぶりの再起動。これが一つの罠。そう言えば前のトラブルも長期稼働し続けた末のチョンボだった記憶が。
起動中、NTPの時刻同期エラーが発生。っていうかログを見ると、ずっと時刻同期に失敗していたらしく時刻が5分位ずれている。なんでかな?と調べてみたらnamedが起動してないからNTPサーバへアクセス出来ないって罠。何時namedが落ちたんじゃ?しかも起動しないってなんでじゃー。とりあえずマニュアルでコマンドを入れて起動。NTPの時刻同期成功。これは原因を解決しておかんとまた繰り返すな。
加えてどうやら、DDNSの書き換えツールとして使っているddclientもcheckip.dyndns.orgの名前解決が出来ずにエラーを吐いてる。これじゃぁsasapurin.comは孤立状態じゃんか!まぁnamedが起動したらこの問題は解決した。DNSに反映されるまで15分位だったか。
少し待ってからWindowsのIEからWebサーバにアクセス。しかしこれではいかんと気づいた。我が家の場合はLAN内部はbind(named)で名前解決しているので、そのままだとプライベートアドレスが帰って来ちゃう。ネットワークのプロパティからDNS設定をプロバイダのDNSに変更して試験。これでグローバルアドレスが返ってくるハズ。そしたらルーターの認証が出てくる。そうだった、内部からグローバルアドレスでアクセスするとルーターの設定画面が応答するんだった。プロクシ噛まさないとね。サイバーシンドロームじゃ。
サイバーシンドロームで適当なプロクシを探してIEの接続プロパティを変更。80をポートフォワード設定しているから、これでルーターじゃなくてWebサーバが応答するはず。しかし、レスポンスが無い。なんで??もちろんYahoo!とかGoogleとかはちゃんと応答する。って事はWebサーバの問題かよ。
まさか、Apacheが起動してないって事は無いよな?プロセスを見るコマンドは何だっけ。psじゃなくてリアルタイムで見る奴。思い出せない。えーと、えーと。頭が錆び付いてる。しばらく考えてたらtopコマンドを思い出した。そうぢゃtopぢゃ。
# top
げげげー、Apacheが起動してないじゃん。応答するはずないよ。Webサーバーを再起動するまでは、かみさんが自分のHPにアクセスしていたから、FreeBSDの起動関係か。って事でrc.d辺りだなと考えて確認してみたら、/usr/local/etc/rc.d/apache.shの中の記述でEnableがNOになってた。うーん、そう言えばかなり前にPortの更新をした様な気がする。その時に書き換わったんだろうね。YESに書き換えておかないとまた再起動した時に同じ罠にはまるから書き換えておく。(補足:この対処方法は間違いです。)
# apachectl start
# top
apacheがプロセスとして常駐する様になった。これで問題ないだろうと思いきや、やっぱり応答してくれない。なんでーなんでーと考えていたら、アクセス制限を掛けていることを思い出した。海外からのアクセスは片っ端から蹴る様に実験がてらipfwで定義していたのだった(汗 海外の串じゃあかんやないの、日本の串ささないと。
サイバーシンドロームで日本国内の串を探してきてIEにセット。これで行けるでしょとやってみたところ、異様に時間がかかる。なんで?と思いながらも待っていたら少し画面が表示された。しかし何かが変。なんでこんなに時間がかかるねん?
ここまで調べたんだから、串を変えれば解決するんじゃないか?と思って別の串にしてみたら、普通に表示される様になった。良かったぁ~
思い返してみれば、FreeBSDサーバをいじるのってかなり久しぶりだ。再起動かけたのってもしかしたら一年位前だったかも知れない。再起動前に確認しておくべきだったな。
最近、Linuxの方に浮気気味だし、しかもGUIを使う様になっちゃってから、コマンドを忘れる傾向が強い。まぁ用途もサーバーからデスクトップに変わってきてるから、仕方ないっちゃあ仕方ないんだけど、RHCE受験で勉強した知識も錆び付いて来たって感じじゃん。ホント使わないと頭って錆びてくるね。
体調も回復して来たし、再就職にUNIX系の知識を活かそうかと思っていたけれど、身体のリハビリと同様に頭のリハビリも必用じゃんか..orz 今日は反省点とかを実感してどっと疲れがでて来たのである。いつもならトラブルシューティングが終わると達成感あるのに、今回は反省ばっかだからスッキリしないな。ああ、修行が足りん。
FreeBSDの場合、OS起動時のスタートアップ動作は、/etc/rc.conf ファイルで制御しています。確かに、/usr/local/etc/rc.d/apache.sh を書き換えても起動するのですが、それは本来の考え方を無視した結果オーライな間違った設定方法だと後に知りました。正式には下記の様にしておくのが正解というか、FreeBSD流のスタートアップ登録なのでしょう。
# vi /etc/rc.conf
apache_enable="YES" この一行を追記
これはapache1.3系の場合の話。どういう風に記述するかは、それこそ/usr/local/etc/rc.d/apache.sh に書いているので、それを確認する事です。そうすれば応用が利くので、Apacheに限らず、他のアプリケーションを自動起動させる方法も身につくというものです。