2008年08月21日
.htaccesを削除出来ない
知人の商売のHPの相談に乗っていて、お高いレンタルサーバから安くてサービスの質の良い所に引っ越す事になりました。それで今まで使っていたレンタルサーバのFTPのアクセス情報を得て、引っ越しの案内を表示させるようにしたり、新しいサイトへのリダイレクトをしました。
どうせだから.htaccessでもリダイレクトしようと思って301エラーのリダイレクトをhtaccess.txtに記してFFFTPでアップロード。その後、.htaccessにリネームしたら、FFFTPから消えてしまった。なぁんも操作出来ない。
しかも、サーバーがredirectに対応していないらしく(と言うか.htaccess未サポート)、Internal Server Errorがでてどうしようも無くなりました。ちなみに記したのはこんな一行。
redirect 301 / http://www.example.com/
FFFTPからは削除出来ないし、上位ディレクトリごと削除を試みたのですが失敗。これじゃあどうやっても無理じゃないかと、電話でサポートに相談したのですが。
理解せるのに何度も同じ説明をしなくてはならないし、それはソフトウェアの使い方に関する事ですからこちらでは分かりかねますとか言うので、「お前バカちんっ」と 言いたくなるのを押さえて、.htaccessは御社のWebサーバーで使われているApacheの設定に関係する標準的なファイルなのですよと説明して、最悪全部削除していいから.htaccessを削除して下さいなと頼んだ。
んで何時までにやってくれるのか?と確認したら(期限を切るのはビジネスでは常識でしょ?)、ちょっと調べてみないと分からないとかうだうだ言うので、仕方なく目処が付いたら連絡をもらうことにした。
こんなクソレンタルサーバ止める様にアドバイスして大正解だったなとマジに思う。高い金取っているくせに全然なってない。サポートのスキルが低すぎて話にならない。いつ電話がかかって来るか期待も出来ないので自力で出来ることはやってみる事にした。こんなんで法人相手にサーバーレンタルをよくやってるよなぁとある意味感心してしまった。良くないサービスは淘汰されていかないといけないと思う。でもだまされる人(良いサービスを選べない人)っているんだろうなぁ。
さて理屈からすれば、UNIX系サーバなら.htaccessの様に、.から始まるファイルは隠し属性を持つ事になるお約束なので、FFFTPで「htaccess.txt」を「.htaccess」にリネームした直後から見えなくなったのは正常とも言える。かと言ってFFFTPで隠し属性のファイルを表示させる方法を知らない。もしかしたら設定で表示出来るようになっているのかも知れないがFFFTPはあんまり好きじゃないからそれ以上は調べたくない。
面倒なのでWindowsのFTPコマンドを使う事にした。家はLinuxマシンとBSDマシンが常時稼働しているのでそこからやっても良かったのだが、WindowsにFTPコマンド有ったよなぁ?という疑問を解消する為に試して見たのだ。
コマンドプロンプトから下記のようにしてみたら、結果的に削除出来て、Internal Server Errorも回避出来るようになった。ポイントはlsコマンドに-aオプションをつけるというところだろうか。GUIは手軽さでは便利だけど細かい操作になるとCUIの方が格段に便利だ。というかUNIX系の快適さに慣れたらGUIは回りくどい。コマンドを知らなかったら何も出来無かったとは恐ろしいなと思えてくる。UNIX系の勉強をしていて良かったというか、知らない人は躓くんだろうなあと思ったりする。
という訳でここんちのクソサーバーは、.htaccessが使えないと見るのが正解だろう。本当に使えねぇサーバーだ。既存ファイルバックアップの時にもFTPがめちゃくちゃ遅いし接続は切れるし、良い点は何一つ無いと思った。(ファイル数30弱、ほんの数メガなのにですよ)
Microsoft Windows 2000 [Version 5.00.2195] (C) Copyright 1985-2000 Microsoft Corp. C:\>ftp ftp> open example.com Connected to example.com. 220 ProFTPD 1.2.8 Server (ProFTPD Default Installation) [vs38.nolnet.ne.jp] User (example.com:(none)): xyu06251 331 Password required for xyu06251. Password: 230 User xyu06251 logged in. ftp> ls 200 PORT command successful 150 Opening ASCII mode data connection for file list css.css footer.jpg header.jpg main.jpg map.htm map.jpg index.htm 226 Transfer complete. ftp: 305 bytes received in 0.08Seconds 3.91Kbytes/sec. ftp> cd /httpd/htdocs 250 CWD command successful. ftp> ls 200 PORT command successful 150 Opening ASCII mode data connection for file list cgi-bin 226 Transfer complete. ftp: 18 bytes received in 0.01Seconds 1.20Kbytes/sec. ftp> rm .htaccess 550 .htaccess: Not a directory ftp>ls -la 200 PORT command successful 150 Opening ASCII mode data connection for file list drwxrwxr-x 6 root yxr1275 1024 Aug 21 14:45 . drwxrwxr-x 4 root yxr1275 512 Aug 7 2003 .. -rw-r--r-- 1 xyu06251 yxr1275 42 Aug 21 14:15 .htaccess drwxrwxr-x 2 root yxr1275 512 Aug 21 13:22 cgi-bin 226 Transfer complete. ftp: 421 bytes received in 0.03Seconds 13.58Kbytes/sec. ftp> rm .htaccess 550 .htaccess: Not a directory ftp> mv .htaccess htaccess.txt Invalid command. ftp>del .htaccess 250 DELE command successful. ftp> ls 200 PORT command successful 150 Opening ASCII mode data connection for file list . .. cgi-bin 226 Transfer complete. ftp: 25 bytes received in 0.03Seconds 0.81Kbytes/sec. ftp> bye 421 No Transfer Timeout (300 seconds): closing control connection. C:\>
そういう訳でこのレンタルサーバーには、新しく引っ越した先への引っ越し案内とリダイレクトの仕組みを組み込んだ、index.htmlファイルを一つだけ残してそれ以外は全て削除した。
参考
エヌオーエルネット(http://www.nolnet.ne.jp/)
株式会社ネクサス(http://www.nexus.co.jp/)
チカッパレンタルサーバー(http://chicappa.jp/)
投稿者 sasapurin : 17:04 | コメント (0) | トラックバック
2007年12月14日
.htaccessが使えない
先月、FreeBSDの4.11から6.2に移行させて自宅Web鯖を運用していたのだが、掲示板へのスパムが相変わらず鬱陶しいので、面倒だけど対策せねばと作業していてひょっこり変な事に気づいた。ApacheのIndexesが効いていて、ディレクトリ指定されるとファイルが丸見えになっているのだ(汗
こんな状態じゃ何やっても無駄だし、一ヶ月恥書きっぱなしかよと思いつつ、Apache22のconf書き換え格闘開始。FreeBSD 4.x系ではApache1.3系を使っていたので、Apache2x系が面倒に感じる。なんで一々confファイルを分割すんねんっ。鬱陶しいわ。とか文句言いながらやっていてもらちがあかないので(何故か設定が効かない)、.htaccessで対処する事にした。
しかし、.htaccessが効かないっ。なんで?なんで?
Option Indexes を外したりしたけど、どうしてもファイルが丸見えになってしまう。
30分ばかりかかって一通り調べてようやく分かった。
鯖の復旧(移行)作業時に端折って、DocumentRootをそのまま(放置)にしていたのが原因の発端だ。今まで使っていたドキュメントルートはさして重要ではないから復元せずにHDDに保存したままにしている。Apacheはディレクティブが別れているので、ドキュメントルートはそのままでも関係ないと思いきや、なんの全部それが反映されるという仕組みだ。つまり子ディレクティブや.htaccessで何やっても意味がない。あー紛らわしいっ。
AllowOverride None
httpd.confに書かれた、たったこの一行が全てのUserDir、つまりはバーチャルホストにも影響していたという訳だ。
AllowOverride All
なぜ最初からこうしておいてくれないのか?マジにconfファイルを分割したの鬱陶しい。1.3系の方に慣れてるから仕方ないんだけど絶対に2.x系のconfiファイルは不便過ぎる。
.htaccessにはもちろんこう書いた
Options -Indexes
という訳で自分の確認不足が露呈してしまったのだが、1.3系で細工していたのが殆ど機能せず、構成ファイルが丸見えになっていたのは情けなさ過ぎるというか間抜けというか。まぁこれが半年先とかにならなかったのが不幸中の幸いかも知れないのだが。横着せずに全部のチェックしていかないと駄目って事か。いやぁ、たかがWebサーバ、されどWebサーバですな。 Apacheを全然使いこなせてないじゃん..orz
投稿者 sasapurin : 16:23 | コメント (0) | トラックバック
2007年09月01日
Wake On LanをWebブラウザで行う
先のエントリーでWOL(Wake On Lan)に成功したことを記したが、それをより効果的に利用出来るように考えて成功したので備忘録しておく。
要するに常時起動のVine Linuxマシンから、TVサーバのマシンの電源ONの制御をしようって考えだ。それをWebブラウザを使ってやりたいと言う話。
もちろんこの方法なら、ルーター越しのWOLも可能だということだ。職場などの出先のPCからはもちろん、最近の携帯電話ならブラウザが付いているのでそれも可能だと思う。技術的には大した事無いが一つの方法として参考になれば幸いである。
問題は私がPerlを全く理解していない事である。よってCGIもシェルスクリプトで書かざるを得ない。でも本当にそれって可能なのだか?調べてみたら同じことをやっている方のブログで「ルーターの外からwol」を発見したので、シェルスクリプトでCGIを書くのも可能なんだなと裏づけが取れたので実践することにした。
しかし、シェルスクリプトでCGIを書くのって本当は良くない方法らしいから、せめてベーシック認証をかけたディレクトリに設置することにした。ついでにhtmlファイルを置いてちょっとだけ見栄えもよくしてみる。実行ボタンをクリックするだけなんだが。
注意:下記にURLが出てきますが架空のものです。ハックしようとかしないでね。そもそも存在しないURLを例にしていますから、認証を破ってやろうなんて事は無駄です。
まず、wolコマンドを実行するシェルスクリプトを書いてしまおう。
難しいのは嫌なので極めてシンプルに書いてしまう。
$ which sh
/bin/sh
$ cd
$ vi wol.sh
wol.sh という名前で保存するとする
-----------------------------------------------
#!/bin/sh
wol 192.168.1.255 xx:xx:xx:xx:xx:xx
-----------------------------------------------
本当にwolが動くか確認しておこう
$ chmod 705 wol.sh
$ ./wol.sh
リモートで起動することに成功したら次のステップに進もう
既に公開しているWebサーバにスクリプトと、簡単なhtmlのページを作る。
ちなみに私はpublic_htmlディレクトリをベーシック認証して設置することにした。
(ベーシック認証についてはどこかに記した記憶があるので、ここでは書きません)
$ cd public_html/
$ vi wol.cgi
wol.cgi という名前で保存する(Perlではなくshで書いてる)
-------------------------------------------------
#!/bin/sh
echo Content-type: text/html
echo
echo "<title>sending wol</title>"
echo "<p>"
echo "sending wol to fluorite"
echo "..."
sh /home/wol/wol.sh
echo "..."
echo "</p>"
echo "<p>"
echo "done."
echo "</p>"
-------------------------------------------------
$ chmod 705 wol.cgi
Webブラウザ用にHTMLのページを作っておくとちょと自己満足に浸れそう(w
$ vi wol.html
wol.html という名前で保存する
-------------------------------------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>WOL-SH</title>
</head>
<BODY BGCOLOR="#ffe0c0">
<H3 align="center">WOL-SH</H3>
<HR>
<p align="center">テレビサーバの電源をWake on LANで入れるっちゃ</p>
<form action="./wol.cgi" method="post" name="wol" id="wol">
<div align="center">
<input type="submit" name="Submit" value="送信">
</div>
</form>
<HR>
</body>
</html>
-------------------------------------------------
これで出来たのでWebブラウザからアクセスしてみた
http://www.sasapurin.com/~wol/wol.html
ベーシック認証がかかっていて、ユーザー名とパスワードを入力した
極めてシンプルなページとボタンが一個出てきたので、ボタンをクリックする。
Internal Server Error .......
なんじゃそりゃ~
httpdのエラーログ確認
Resource temporarily unavailable:
couldn't spawn child process: /home/wol/public_html/wol.cgi
チャイルドプロセスが作れないとかぬかしてるな..
そもそもシェルで書いたCGIは機能するんか?
$ ./wol.cgi
あらら、ちゃんとWOLでリモート起動がかかってメッセージも出てきた
Content-type: text/html
<title>sending wol</title>
<p>
sending wol to fluorite
...
...
</p>
<p>
done.
</p>
って事は、シェルスクリプト(sh)でCGIを書いているから、Apacheが拒否してるって感じだろうな。
そういえば、ExecCGIとかのところに、CGIファイルの拡張子を定義するところ(AddHandler)があったはず。
$ su -
# less /etc/httpd/conf/httpd.conf
/AddHandler
みぃつけた(w
けど待てよ..ここを書き換えちゃうと、Apache全体に適用されちゃうよな。それはまずいな。
ってことで、.htaccessを利用することに決定。既にベーシック認証の為に設置してるから追記するだけでいけるはず。
# exit
$ cd ~/public_html
$ vi .htaccess
AddHandler cgi-script .cgi.sh
気を取り直して、もう一度テストをやってみた
http://www.sasapurin.com/~wol/wol.html
ボタンをクリック!
カチン、ピコッという音と共に電源ファンの音が鳴って、LEDが点灯した!
やったぜ成功!!やるじゃん俺(w
という訳でWebブラウザでWOLに成功したのでありました。
実は、メールを送ってそれをトリガーにしてシェルを実行させるって方法も考えたんだけどね。それはまたの機会にしようかな。とりあえず上手く出来てよかった。
冗長しますが、上記のURLは架空のもので存在しません。わざわざ秘密の入り口をネットで公開するほど間抜けではないっす(w
投稿者 sasapurin : 18:41 | コメント (0) | トラックバック
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年02月27日
掲示板スパム対策
何年もHPを運営していて、BBSを設置していると、掲示板のURLがボットによって収集されているらしく、嫌になるほどスパムな書き込みが繰り返される。LQによるアクセス制限など細工をしてみたが、完全には対処しきれないし、結局はイタチごっこになるのは避けられない。
しかし、もっと根本的なところで対策出来るのではないかと思いつき、実際やってみたら非常に効果がある事が分かった。敵の立場になってみれば簡単な答えだったと思うのだが、まっとうに運営している人ほど、スパマーの気持ちなどに気づかないと思う。
さて、具体的にスパムに対して有効な対策をまず記述しよう。手っ取り早いのは掲示板のURLを変更してしまうことだ。多くの場合はCGIで掲示板を動かしていると思う。この掲示板CGIのスクリプトファイル名を変更するなり、ディレクトリ名を変更するなりすれば良いのだ。
もちろんこの変更に伴って、HPに設置してある掲示板へのリンクボタンなどに設定してあるハイパーリンクも変更しなくてはならない。しかしそれほどの手間はかからないのではないかと思う。一日に10以上のスパム書き込みが有る人は、試しにURLを変更してみて欲しい。
ではなぜBBSのURLを変更するだけで効果があるのだろうか。これはスパマーの気持ちになって考えれば答えが出てくる。なぜなら奴らは、「楽して儲けたい」と考え、「効率の良い方法を常に求めている」のだ。ある意味「極道」である。そういう人種が、Webブラウザを使って、いちいちHPにアクセスし、BBSへのリンクボタンをクリックしてBBSへ書き込んでいるハズが無いのである。
一年以上前は、まだそれほどスパムの被害も深刻ではなかった。恐らくお気に入りなどから直接アクセスされているのだろうと思っていたのだが、現在、私のHPに設置してあるBBSは、明らかに異常なアクセス頻度である。連続書き込みも後を絶たない。現在はLQによってアクセス制限をかけているので、9割以上のスパムを弾いているのだが、そのログを見るだけでもうんざりする程である。絶対に奴らは手作業ではなく、自動化した「スクリプト」や「巡回ツール」でスパムな書き込みを行っているに違いないと気づいたのだ。
私は現時点ではプログラミングと呼べるような大層な事は出来ないのだが、理屈からすれば大した技術が無くても作れてしまうという事は想像出来る。そんな人様の迷惑を考えないツールを作って販売し、懐に金をしまい込んでいる輩もきっと存在するに違いない。また、活きているBBSのURL情報、使われている掲示板CGIの種類の情報などを収集して売買している輩も居るに違いないと思う。そうでなければこの異常なまでの書き込み、そしてBBSのURLを変更しただけでアクセスが無くなる事の説明がつかない。
BBSへのスパム書き込みに日々悩まされている管理者には、駄目元でURLを変更してみることをお勧めしたい。この方法は極めて原始的な方法だが、いくらプログラミング技術が進んだとしても、追従するのは困難だし、仮に追従してくるツールを開発するにしても、プログラマーにかなりの労務を強いることになるからして、現状はかなり効果的だと思う。(恐らく当面は巡回リストから除外され嘘の様にスパムが減るだろう。)
「己を守るためには敵を知る事も重要」だということは以前から知識として持っていたが、まさかこんなに身近なところに答えが有ったとは驚きである。個人的には定期的にURLを変更していこうと思う。URLを変更すると欠点もあるが、BBSへ直接お気に入りからアクセスしてくる人の中にまっとうな人は、まず居ないと考えても良いと思う。私も人様のBBSへのダイレクトアクセスは極力避けようと思う次第である。
投稿者 sasapurin : 16:22 | コメント (0) | トラックバック
2005年11月21日
Webサーバをインターネットに公開するには
自宅サーバでWebサーバを構築したら、ホームページやブログを書いて、やはりインターネットに公開したいと思うのが人情でしょう。私ももちろん同じ気持ちでした。でもちょっと待って下さい。インターネットに公開するには、少々危険が伴いますし、ネットワークの種類によっては公開出来ないかも知れません。
インターネットに公開する為には、IPアドレスがグローバルアドレスでなくてはなりません。一部のケーブルテレビ会社や、マンションタイプのネットワークでは、グローバルアドレスではなくプライベートアドレスを割り当てられるケースがあります。残念ながらプライベートアドレスが割り当てられている環境では、インターネットに公開することは出来ません。
次にインターネットに公開する際の危険性について少しだけ触れておきます。インターネットは世界中に繋がっている為、日本人に限らず、ネットワークを通じてサーバーにアクセスすることが出来ます。もしもネットワーク回線を直接サーバに繋いでしまうと、ハッカー(コンピュータのプロフェッショナル)やクラッカー(コンピュータに詳しい悪人)が、侵入してしまう危険性があります。「侵入されても重要なデータは無いよ」というのはちょっと違います。もしサーバを乗っ取られたら、貴方の自宅サーバを遠隔操作して、色々な所に悪さをするためにアクセスするかも知れません。これを「踏み台にされる」と言います。
ネットワーク犯罪は日々高度になって来ていますので、今後どんな悪さをされるか想像も付きません。もし乗っ取られてしまい悪事を働かれると、全て貴方の責任になってしまいます。なぜなら被害を受けた「企業」や「個人」などは、貴方の家のネットワークから攻撃を受けたという証拠を突きだしてくるからです。タチの悪い事に悪事を働く人は、自分の痕跡を残さないようにログを消去してしまい証拠隠滅を怠りません。故に貴方はサーバを乗っ取られたと言う証拠が無くて、全ての責任を負わなくてはならなくなります。非常に怖い事ですね。
などと脅しの様なことを書いてしまいましたが、安心して下さい。現在は手軽にこのようなことを防ぐ方法があります。それはブロードバンドルータというネットワーク機器をインターネット回線とパソコンの間に入れる事で可能となります。上記リンク先の図を良く見て下さい。
これで完璧とは言えませんが、かなりの確率で防御出来るようになるでしょう。なぜならハッカーやクラッカーは面倒な事が嫌いだから、ルーターで防御している環境だと知れば他の所に行ってしまいます。ルーターについては、もちろんそれなりに勉強が必用になりますが、現在の製品はWebブラウザでリモート設定出来るので、比較的簡単に理解出来ると思います。参考になるサイトも検索すればいっぱい見つかります。
ここまで書くとおわかり頂けると思いますが、私は強くブロードバンドルータの導入をお勧めします。今や1万円位で購入出来ますし、万一自分が被害者でありながら加害者になって訴えられた時の事を考えると、非常にお安い投資だと思います。お金で安全を買えるんですから買わない手は無いでしょう。ここの部分をケチってしまう人は、自宅サーバーを公開するのは止めた方が良いとキッパリと言わせて頂きます。(技術が有る人でFWを自作出来る人などはもちろん当てはまりません)