« SERVER改築録 | メイン | 就活モード »

2005年02月16日

●串鯖の簡単な建て方

ちょいと前、某所からアクセス規制をされた時に串を刺したりして回避しようとしていたのだが…
どこぞから入手できる串鯖リストの殆どは公開串の特徴を吐くので弾かれてしまった。
串情報を吐かない鯖の多くは反応がなかったり、遅かったりと使えるようなモノではなかった。


…そこで、考えたのが「自分で串を用意してみよう」と言う試み。
グーグル様のお力をお借りして調べて見ると…
検索結果の大概は「Unix」で動作するモノだった。
…串だけのタメにUnix導入するのは面倒だ。(´Д`;)

困り果てたところへ、彼の人から助言が。

彼の人「Rubyを使えば簡単に串鯖が建てられる」

Rubyとは
Rubyは、手軽なオブジェクト指向プログラミングを実現するための
種々の機能を持つオブジェクト指向スクリプト言語です。
本格的なオブジェクト指向言語であるSmalltalk、EiffelやC++などでは
大げさに思われるような領域での……… (続きはこちらで)

簡単に言うと掲示板を動かすCGIに使われる「Perl」みたいなモノです。
Perlよりも汎用性が高くて扱いが簡単なのが特徴。

で、どうやったら串が動くのか。

---------------------------------------------------------------------------

#!/usr/local/bin/ruby //
require 'webrick/httpproxy'
CLIENT_HOST='自分のIPアドレスを記述'

auth_proc = Proc.new do |req, res|
raise WEBrick::HTTPStatus::Unauthorized unless req.peeraddr.include?(CLIENT_HOST)
end

s = WEBrick::HTTPProxyServer.new({
:Port => 8080,
:ProxyAuthProc => auth_proc,
:ProxyVia => false
})
Signal.trap('INT') do
s.shutdown
end

s.start

---------------------------------------------------------------------------

と、記述し拡張子「.rb」で保存すれば終了。
telnetか何かでこのファイルを動作させれば立派な串です。
Rubyがインストールされてる鯖ならどこでも動くはず。
注意としては1行目は設置する環境によって違うので"$ which ruby"とかで調べる。

特徴としては、proxy特有のヘッダを出さない上に
自分のIPアドレスだけを受け付けるので悪用されることも無い。
これだけで非公開な串の完成。
とんでもなくウマー(゚Д゚)なRubyです。

で、やろうと思えばもっと短いスプリクトでも鯖が建てられる。

---------------------------------------------------------------------------
#!/usr/local/bin/ruby
require 'webrick'
require 'webrick/httpproxy'
s = WEBrick::HTTPProxyServer.new({})
Signal.trap('INT') do
s.shutdown
end
s.start
---------------------------------------------------------------------------

はい、公開串の完成。
詳細が記述されて無いのでどっかに晒されたら乱用されたい放題ですね。=(
ちなみに短いスクリプトの方は自鯖を建てて実験したワケでは無いので動作確認してません。
スクリプトが長い方はruby 1.8.2 [i386-mswin32]で実行させて動作確認取りました。


…あれやこれやしてるうちに規制解除されたのは内緒。(´・ω・`)