B串から完全匿名串へ
0、初めに
串、つまりProxyサーバになんらかの興味を持っている人か、UNIX系のシステムを使って自宅鯖を構築している人であれば、1度ぐらいSquidと言うソフトを聞いた事があると思います。SquidはProxyサーバソフトとしてもっとも有名、かつ使われいているソフトで非常に高速に動くProxyサーバソフトです。
ここではそのProxyを評価Bの使えない串からProxyだとわからない串へ成長(?)させる手順を自分の防備録を兼ねて御紹介します。尚、匿名串そのものを探しに来た方の御希望に沿うような情報は無いと思われますので、もし匿名串そのものをお探しの方は他をあたる事をお勧めします。1、必要な物
ブラウザ(IEよりNetscapeを推奨)
診断君
squidの動いているサーバ
※人の動いているサーバを勝手に弄るのはやめましょう。
※ここでは2.5 STABLE9-7を使って説明しています。
※※注意:HTTP_USER_AGENTを遮断・変更すると、閲覧出来なくなるサイトが出てきたり、Windows Updateが正しく機能しなくなる可能性があります。
※※注意:HTTP_REFERERを遮断すると閲覧が出来なくなったりするサイトが存在しますので御注意下さい。2、squid
squidは何も設定しないでデフォルトの状態で稼動させた場合、漏れ串として稼動しています。漏れているとはつまり環境変数のどっかに自分のIPなりホストが入っている状態の事です。どこに入っているかと言うとHTTP_X_FOWARDEED_FORと言う環境変数に入っています。
漏れ串は存在意義のよくわからないProxyです。そもそも公開されている串と言うのはIP秘匿をしたい人が使うためにあるわけではありませんが、そうで無い人にとっても存在意義がわかりません。この広帯域化されて星の数程サイトがあり、それがガンガン更新されているこの時代にわざわざProxyを経由してアクセスする理由は特に無い気がします。たしかに会社や学校等ではProxyの需要はありますが、HTTP_X_FOWARDED_FORに何かの値を入れる必要性は無いと思います。
一体何のためにあるんでしょうね。おっと話が逸れましたね。もとに戻しましょう。この手の解決方法は至って簡単です。Squidの説明をされているサイトならばどこにでも書かれている事なので、あえてここで説明する必要も無いような気がしますが、
squid.confの中の適当な場所にvisible_hostname none
forwarded_for off
と加えるだけです。こうすることにより先ほどまでforwarded_forに入っていた自分のIPアドレスがunknownになって表示されなくなります。ここまでは何処のサイトにでもあるので普通に設定していると思います。
※visible_hostnameの値は空にしないで下さい。これを空にしたりコメントアウトするとsquidが起動しなくなります。3、B串からの脱出
さて、ここまでやればとりあえずsquidは匿名串となります、が、設定した串を使って診断君で見てみればわかりますに評定はBです。下手すればB-かもしれません。評価部分に書いてあるようにそのままでも大丈夫ですが、掲示板によっては閲覧すら拒否されるケースが実際にあります。その度に串を外していては面倒なので、この際完全に匿名化してしまいましょう。やっと本題ですね。
とりあえずどこから消えて頂きましょうか?とりあえず掲示板のスクリプトの多くはX_FORWARDED_FORとHTTP_VIA(下の画像の黄色い部分)でプロキシ判定をしていることが多いのでここに消えて頂きましょう。
(Figure 01)
Proxyのアクセス拒否は荒らしに頭を痛めている掲示板で、閲覧時に1度だけされた事があります。
でも、投稿ならともかくも閲覧さえ拒否されたのは後にも先にもそこだけです。
閲覧されるのも嫌なら会員制にすればいいような気がするのは私だけでしょうか?ここを潰すのにはX_FORWARDED_FORに適当な数値を強制的にぶち込んでしまうのも手ですが、単に値が存在するだけで蹴飛ばすスクリプトもあるみたいなので、いっそ表示しないように変数ごと消えて頂きましょう。
消すにはheader_accessと言うタグを使います。
使い方は
header_access[スペース][変数名][スペース]deny[スペース]all
例:
(ブラウザ情報削除)header_access USER-AGENT deny all
(参照元の拒否)header_access REFERER deny all
です。大文字小文字は判別していません。変数名はHTTPを抜いて_[アンダーバー]は-[ハイフン]に置き換えます。なのでsquid.confの2600行目当たりに
header_access X-FORWARDED-FOR deny all
header_access VIA deny allと入力してSquidを再起動して下さい。これで先程黄色で表示されていた部分、HTTP_FORWARDED_FORとHTTP_VIAが(Figure 02)のように消えてしまいます。
(Figure 02)
確認君ではA以上ですがProxy Judgeは3しか出ません。
ちなみにHTTP_CACHE_CONTROLでアクセスを蹴っている物もあるようなので注意が必要です。これで評価がA以上の?になりましたね。殆どこれで大抵の掲示板は投稿可能になります。が、疑惑点がありますね。疑惑点の正体はHTTP_CACHE_CONTROL の max-age=259200の値です。何に使われているかは知りませんが私の知っている限り、この値はProxyしか出していません。コイツにも消えて頂きましょう。消し方は先ほどと同じように
header_access CACHE-CONTROL deny all
とさっき入力したヤツの下辺りに入力してやりましょう。これで(Figure 03)のように先ほどまであったよくわからない値が消滅しました。疑惑も0%です(IEだとIE独自の環境変数を吐き出すため0%になりませんがIEを蹴るつもりで無い限りは、そこでアクセス制限をかけてはこないでしょう)。
ちなみにさっきも例に出しましたがここで
header_access referer deny all
header_access user-agent deny all
等と入れるとHTTP_REFERERやHTTP_USER_AGENTの所が空になります。
※これらの値を遮断するとアクセス出来ないサイトが出てきたり、Windows Updateが正しく動かないことがあります。(Figure 03)
アドレスバーが出ているのは失敗では無くブラウザで串接続をしていると言う事です。
これなら逆引しないとHOST名が出ないISP(REMOTE_HOSTが無い)を使えば、
Proxy Judgeでも最高レベルの1でNo Proxy !を出す事が出来ます。
ですが、最強の匿名串が出来たところで完全に自己満足の世界です。まあ、宅鯖なんて自己満足ですが・・・えっ?何?普通に串刺さずにアクセスしているんだろ?ですか?そんなことありませんよ。NetscapeでアクセスしているのにUSER_AGENTが表示されていないのがその証拠です。上に書いてあるようにheader_access user-agent deny allしてあるのでそうなっています。
これであなたも完全匿名串の鯖主ですね。あとは自己満足に浸るなり、ポート開けて外から使うなりお好きにどうぞ。ただ、外から使う場合こういう完全匿名串は貴重な存在ですので外から使われたりしないように充分に注意しましょう。
4、IEの環境変数
IEだとIE独自の環境変数を吐き出すため、上の手順で設定を変えたとしても、IEそのものを改造しない限りは疑惑を払拭する事は出来ません。(Figure 04)
(Figure 04)
Refererが出て無いのはheader_access referer denyで弾いているからです。
リファを弾くとinfoseekのCGI等直リンク禁止のコンテンツへBookmarkから行けたり出来ますが、
アップロード掲示板等でRefererチェックしているような所だと弾かれる可能性があります。ところで、勘がいい人は
header_access ua-os deny all
注:スペースバー「_」は使ってはいけません。かならハイフン「-」に置き換えます
とかやれば消えるようなきがします。が、実際にやってみるとわかりますが、HTTP_IF_MODIFIED_SINCEしか消えません。設定の中に書いてsquidを再起動しても以下のようにエラーが出てしまいます。
Stopping squid: 2004/XX/XX 23:15:58| squid.conf line 2663: header_replace ua-cpu deny all
2004/XX/XX 23:15:58| parse_http_header_access: unknown header name ua-cpu.もちろん機能もしません。squid.confの下のブロックにある、header_replaceを使ってウソの値を入れる事も出来ません。
漏れているのはしゃくに触りますがまぁそんな細かい所までは出ていませんし、こんなもん記録しているのはshinobi.jpぐらいしかないのでこの際無視しておきましょう。嫌ならNetscape Communicator使えば出てこなくなりますのでそうしておきましょう。5、(おまけ)header_replace
TAG: header_accessの下にはTAG: header_replaceのセクションが続いています。前の所でも説明しましたが、ここで、
header_access[スペース][環境変数の名前][スペース][置き換えたい値]
【例:header_access user-agent Mozilla/2000(compatible; KanjiTalkX; 80286)】
とすると消すのでは無く任意の値を送る事が出来ます。USER_AGENT等も書き換える事が出来ます。が、書き換えられるのはあくまでHTTPから始まる物だけでvisible_hostnameやREMOTE_HOSTやREMOTE_ADDRは書き換えられないので御注意下さい。
また「HTTP_FORWARDED_FOR」等とよく表現されていますが、設定ファイルに書き込む時は「FORWARDED-FOR」となる(HTTPは付けない、_は−にする)ので御注意下さい。大文字小文字は関係ないみたいです。
ちなみにこれでリファやUser-Agentを書き変えたとしても、ブラウザそのものが書き変わったわけでは無いのでJavaScript等を使われると、隠したはずの環境変数がでてしまうことがあります。6、リファを潰せ
さて、webアプリケーションを積んでいるドメインのアクセスログを管理していると、そのコンポーネントの一部に、某有名どころのアクセス解析サイトからリクエストが来ています。私はHTTP_REFERERの切り方を載せている割に自分では切っていないため、リンクから飛んだときにREFERERが漏れたのでしょう。
これは由々しき事態です。p2なんかはBasicで一応ロックしているので簡単には入ってこれないと思いますがWebメーラは厄介です。せっかく別コンテンツで存在を秘匿してもリファで漏れていたら救いようがありません(多くのWebメーラは外のアカウントにログオン出来るためやばいのです)。なので、REFERER切りをやりたいところですが、それをやると見れなくなるサイトが出てくるので個別にはじきましょう。
では早速切ります。「/etc/squid/squid.conf(Linuxのrpmインストール場合)」を開いて、適当な場所に
acl local_ref referer_regex ^http://192\.168\. ^http://g4\.yuaiho\.com
header_access Referer deny local_refと加えます。これはaclでlocal_refがどのような環境かを定義して、(ここではリファの正規表現にhttp://192.168.〜かhttp://g4.yuaiho.com〜がマッチしたらと言うことです。)
Refererがlocal_refの条件に合ったら送信を拒否する、と言う設定です。色はコンソールの背景を黒にしてvimで開いたときの配色です。ここまで出来たら保存してsquidを再起動しましょう。そしてチェックしてみて、リファが出なければ成功です。もっともProxy通さないと意味がありませんが。(2006.01.02追記)
7、後書き
見やすくを心掛けているのですが見にくくなってしまってすいません。