学校・企業でフィルタ突破!

最近どこの学校、企業でもそうですが、エッチぃサイト見れないようにフィルタリングされてたり、
余計なポートが塞いであって、VNCつなげなかったり、掲示板見れなかったりします。
そんなこんなで見つけてきた対応策をメモしときます。
>>方法1 – webproxyを使う
はい、一番手っ取り早いですねw
「webproxy cgiproxy phpproxy」のいずれかでググればこの手のサイトは山ほど手に入ります。
ここではたくさんリストがされているサイトを紹介しときます。
ウェブプロキシ(WebProxy)の概要と設置サイト
cgiproxy – Google検索
webproxy – Google検索
phpproxy – Google検索
>>方法2 – httpトンネルを使う
たとえば、フィルタリングされてて、それがproxy経由である場合、httpトンネルが使える場合があります。
目的のサイトへSSLで暗号化してつなげるから、フィルタリングをスルー、っていうもの。
一番簡単なのが「HTTPort」というソフト。
これを起動して、適当に設定して、proxyの設定をlocalhostに向けるだけで、フィルタリングをスルーできてしまいます。
以下のページに、日本語の分かりやすい解説ページがあります。
HTTPortでファイアーウォール(プロキシ)を超えよう
HTTPort
>>方法3 – SSHトンネルを使う
VPNやらリモートデスクトップを使いたい際には、この手段が一番です。
まず、SSHで接続できるサーバを確保します。自宅サーバでもOKです。
次に、PUTTYやらTeraTermで接続ポートを設定すれば、完了です。
*詳細は後日書きます。
まぁ、こんなところで。

suPHPの設定とインストール

//概要
CGIWrapではperlCGIによるラッパー機能を提供してきた。
しかし、このラッパーではPHP容易にセキュア化したり、バーチャルホストごとの設定が困難である。
そこで、今回はsuPHPを用いてこの問題に対処する。


//suPHPとは
suPHPとは、mod_cgiwrapの後継となるもので、元々はcgiwrapのモジュール版であった。
cgiwrapをモジュール化することにより、より高速にCGIを動かす工夫がなされた。
これを発展させたのがsuPHPであり、その名のとおりPHPに対応したラッパーである。
本来の機能として、PHPを自UID/GIDで実行できる他、通常のCGIも自UID/GIDで実行することが可能だ。
さらに、mod_vhost_aliasに対応しているため、容易にバーチャルホスト毎に別UID/GIDで動作することができるのである。


//動作速度の問題
suPHPが嫌われる原因としてよく挙げられるのが、動作速度の問題である。
これは、本来PHPが高速で動作しているのはPHPインタプリタがモジュールとして動作しているためであって、
それ以外の方法で(CGIにより)動作させると少なからず動作速度が落ちてしまう、ということである。
従って、PHPをCGIモードで動作させるsuPHPが速度が落ちがちだといわれる。が、実はそうでもない。
現バージョンのsuPHPの場合は、FastCGI方式を採用しているためPHPインタプリタが常に常駐化され、
ほぼモジュール版と変わらない動作速度で動作することが可能なのである。
#これについては環境変数で出た情報のみから記述しているため、実際のところは不明。
#分かり次第(ソースがあり次第)追記することにする。

実際は、単にPHPがFastCGIに対応していただけの模様。


//設定・インストール
・ここでは、当サーバの設定を例に一連の流れを説明する。
Fedora Core 5の場合は、すでにrpmパッケージが公開されているので、yumからmod_suphpをインストールすればよい。
今回使用しているディストリビューションはCentOSだが、Fedoraのソースrpmをコンパイルして使用することにする。
*DACにあるパッケージはコンパイルの設定が違う、またソースからのインストールはパッチを当てなければならない箇所が多いため。
○ファイルのダウンロード・リビルド・インストール
基本的にFedoraとCentOSは互換性があるが、glibcのバージョンの関係上同じバイナリファイルを使用できない。
そのため、Fedora CoreのExtrasよりソースrpmをタウンロード、リビルドして使用する。
[root@www ~]# wget http://ftp.riken.jp/Linux/fedora/extras/5/SRPMS/mod_suphp-0.6.1-4.fc5.src.rpm
–21:59:08– http://ftp.riken.jp/Linux/fedora/extras/5/SRPMS/mod_suphp-0.6.1-4.fc5.src.rpm
=> `mod_suphp-0.6.1-4.fc5.src.rpm’
Resolving ftp.riken.jp… 134.160.38.1
Connecting to ftp.riken.jp|134.160.38.1|:80… connected.
HTTP request sent, awaiting response… 200 OK
Length: 375,718 (367K) [application/x-wais-source]
100%[================================>] 375,718 1.16M/s
21:59:08 (1.15 MB/s) – `mod_suphp-0.6.1-4.fc5.src.rpm’ saved [375718/375718]
[root@www ~]# rpmbuild –rebuild mod_suphp-0.6.1-4.fc5.src.rpm←ソースrpmをリビルド
……
+ umask 022
+ cd /usr/src/redhat/BUILD
+ cd suphp-0.6.1
+ rm -rf /var/tmp/mod_suphp-0.6.1-4-root-root
+ exit 0
Executing(–clean): /bin/sh -e /var/tmp/rpm-tmp.27399
+ umask 022
+ cd /usr/src/redhat/BUILD
+ rm -rf suphp-0.6.1
+ exit 0
[root@www ~]# rpm -ivh /usr/src/redhat/RPMS/i386/mod_suphp-0.6.1-4.i386.rpm←suPHPのインストール
Preparing… ########################################### [100%]
1:mod_suphp
########################################### [100%]
[root@www ~]# chmod o+rx /usr/sbin/suphp←現行パッケージのバグ対策
○suPHPの設定
suPHPの設定ファイルを開き、設定する。
[root@www ~]# vi /etc/suphp.conf
docroot=/←変更(/home/より上層での実行禁止)

docroot=/home/
umask=0077←umaskの変更(作成ファイルのデフォルトパーミッションを644にする)

umask=0022
handle_userdir=true←変更(/~以降のユーザディレクトリでも動作可能にする)
errors_to_browser=false←変更(エラーをブラウザ上に表示)

errors_to_browser=true
○Apache再設定
suPHPを適用するためApacheを再設定する。
[root@www ~]# vi /etc/httpd/conf.d/suphp.conf
suPHP_Engine off←変更(suPHPを有効にする)

suPHP_Engine on
AddType application/x-httpd-php .php←追加(〃)
AddHandler x-httpd-php .php
AddHandler x-suphp-cgi .cgi .pl

# suPHP_AddHandler x-httpd-php←コメントアウト(〃)

suPHP_AddHandler x-httpd-php
suPHP_AddHandler x-suphp-cgi←追加(〃)
[root@www ~]# mv /etc/httpd/conf.d/php5.conf /etc/httpd/conf.d/php5.conf.org←名前変更(module版PHPによる実行をストップ)
[root@www ~]# /etc/init.d/httpd restart←Apache再起動
これにより、CGI/PHPともに自UID/GIDで実行できる。
また、suPHPにより、ディレクトリやファイルのパーミッションが777である場合、実行が強制ストップされる。
(/etc/suphp.confにより変更可能)
また、mod_vhost_aliasを適用することによりバーチャルホスト毎に別UID/GIDで動作することができた。
->ユーザ毎にバーチャルホストを設定する方法


//参考サイト
suPHP – Home:
http://www.suphp.org/Home.html
サードパーティリポジトリーを使う:
http://www.geocities.jp/hoge_tomo/20050318.html

[豆知識]perl cgiの高速化 -perlcc-

perlで大掛かりに組まれたCGIの中には、モジュールをたくさん使うものなど、処理に時間がかかるものあります。
今回は、perlccを用いてあらかじめコンパイルしておき、高速化させることにしました。
*基本的にコンパイルに時間がかかる様なCGIでのみ高速化が期待きそうな感じです。
丁度いいところに貧弱なサーバで動いてる、とっても低速なawstatsがあったので、コンパイルしてみました。
ちなみに、perlccの使い方については、 man perlccコマンドで確認できます。
[root@www cgi-bin]# perlcc -B awstats.pl ↑バイトコードバックエンドを使用してコンパイル
[root@www cgi-bin]# ll
合計 2476
-rwxr-xr-x 1 root root 1966174 5月 23 01:20 a.out   ←コンパイルされたファイルが出来上がっている
-rwxr-xr-x 1 root root 5407 11月 19 2005 awredir.pl
-rwxr-xr-x 1 root root 544954 11月 25 05:11 awstats.pl
[root@www cgi-bin]# mv awstats.pl awstats.pl.org ←もしものために元ファイルを.orgとして保存しておく
[root@www cgi-bin]# mv a.out awstats.pl ←コンパイルしたファイルを元ファイル名にリネーム
[root@www cgi-bin]#
これで、サーバに設置してあるawstatsのもたつきがほぼ無くなり、スムーズに閲覧できるようになりました!
参考: perlcc – Perl プログラムから実行形式を生成