delegateでURLフィルタを(ry

会社などでインターネットするときに、業務に関係ないサイトを見れなくする為やセキュリティ対策の一環として行われるURLフィルタのせいで、有益な情報が見られないことなんていう経験をされた方って結構いらっしゃると思うんです。私もその一人。。。ということで、delegateを使った回避策を試してみました。


接続イメージは↓こんな感じ。
PC---(SSL)---Apache---(NonSSL)---DeleGate---(NonSSL/SSL)---目的のサイト


ちなみに、これやるにはインターネット上にWebサーバが必要です。できればSSL使えたほうがベターかな。(会社に通信内容を見られたくない。後ろめたいことをしているわけではないけど、気分が悪いので。)
インストール方法、自動起動の方法や設定ファイルを使った起動などは、こちらの方が簡潔にまとめてくれているので、ここを参考に。私は、delegate9.9.3.tar.gzを使いました。


まずは、delegateの起動から。目的のサイトがSSLサイトの場合にも対応するために2つdelegateを立ち上げます。(細かいACLとかは考慮してません)


# delegated -P8080 SERVER=http RELAY=delegate
# delegated STLS=fsv -P8443 SERVER=http RELAY=delegate ←一行です

次にWebサーバの設定。私は、Linux上のApacheを使ってます。ネームベースのバーチャルホストなサイトなので、既存SSLサイトに影響ないような形でやってみました。以下httpd.confはHTTPSアクセス用のディレクティブ内に記述した内容です。この例では、Non-SSLでアクセスしたときは404(Not Found)になりますのでご注意を。私の場合、問題ないので・・・また、自分しか使わないのでベーシック認証かけてます。


[httpd.conf(抜粋)]


AuthType Basic
AuthName "delegate"
require valid-user
AuthUserFile /path/to/.htpasswd
AuthGroupFile /dev/null
Order deny,allow
Allow from all

ProxyPass http://localhost:8080/
ProxyPassReverse http://localhost:8080/


AuthType Basic
AuthName "ssl-delegate"
require valid-user
AuthUserFile /path/to/.htpasswd
AuthGroupFile /dev/null
Order deny,allow
Allow from all

ProxyPass http://localhost:8443/
ProxyPassReverse http://localhost:8443/

ベーシック認証なしなら多分、

ProxyPass /proxy/ http://localhost:8080/
ProxyPassReverse /proxy/ http://localhost:8080/
ProxyPass /ssl-proxy/ http://localhost:8443/
ProxyPassReverse /ssl-proxy/ http://localhost:8443/

とかだけでも大丈夫かもです。(試してません)


で、上記にも書いたとおり既存のSSLサイトが存在しているので、DocumentRootトップの.htaccessに以下を書いておきます。(詳細は考慮してません)

RewriteEngine on
RewriteBase /
RewriteRule ^-_-https(.*) /ssl-proxy/-_-https$1 [L]
RewriteRule ^-_-(.*) /proxy/-_-$1 [L]


で、最後にhttpdを再起動(又はgraceful)してやればOKです。(どんな使い方があるかはわかりませんが、)変なことに使っちゃだめですよー。
それと、サイトによってはリダイレクトやURL書換えにうまく適用しないところ(特にログイン系)もあったりします。Cookieが使えるともうちょい便利何だけどなぁー。以上、久々の技術ネタでした。