プロキシサーバ入門


ここでは一般のインターネット利用者を対象としてプロキシサーバ(proxy server)について解説しています。プロキシの理解に必要な知識を効率的に得られるような構成にしてありますので、これを読めばプロキシ初心者でもプロキシを自在に利用できるようになるでしょう。

1 プロキシサーバとは

プロキシサーバとは、プロキシ(代理)という言葉が示す通り、インターネット上の目的のコンテンツ(Webページやファイル等)をユーザのコンピュータの代わりに取って来てくれる機能を提供するサーバです。これは「プロキシ」、「プロクシ」あるいは「串」などとも呼ばれています。プロキシには様々なプロトコル(HTTP、FTP、Telnet、SMTPあるいはPOP等)に対応したものが存在しますが、単に「プロキシ」という場合はHTTPプロキシ(WWWで利用可能なプロキシ)を指すのが一般的です。

1.1 プロキシサーバの原理

まず、ユーザがプロキシサーバを利用しないで目的のWebページを閲覧することを考えてみます。この場合、ユーザのコンピュータが目的のWebページの置いてあるWWWサーバに直接アクセスして、Webページを取って来ます。
ユーザのコンピュータ(要求元) ←→ WWWサーバ(要求先)
一方、ユーザがプロキシサーバを利用して目的のWebページを閲覧する場合、ユーザの代わりにプロキシサーバがWWWサーバにアクセスして目的のWebページを取って来てくれます。
ユーザのコンピュータ(要求元) ←→ プロキシサーバ ←→ WWWサーバ(要求先)
この場合、コンテンツの要求元(ユーザ)と要求先(WWWサーバ)の間にプロキシサーバを挟むことによって通信経路が多少複雑で遠回りになります。そのため、プロキシサーバを利用することは一見コンテンツの取得に関わる通信を非効率的にしてしまうだけのように思われるかもしれません。しかし、実はこれには様々なメリットが秘められているのです。

1.2 プロキシサーバの機能

プロキシを利用すると主に以下のような効果が期待できます。
  • キャッシング ・・・ コンテンツ取得の高速化、サーバ負荷の軽減、トラフィックの軽減
  • フィルタリング ・・・ コンテンツのデータ加工
  • 通信経路変更 ・・・ 通信の高速化、自宅サーバの動作確認
  • 匿名性確保 ・・・ プライバシーの保護、セキュリティの強化、アクセス制限の回避
これらについて詳しく見てみましょう。
1.2.1 キャッシング
プロキシはキャッシュ(cache)機能を実装しており、過去にサーバから受信したコンテンツを一時的にプロキシ自身のディスク内に蓄積しておくことができます。
そのため、プロキシがユーザからコンテンツのリクエストを受けたとき、そのコンテンツがすでにキャッシュされている場合、わざわざ遠くにある本来のサーバに同じコンテンツを取りに行くことなく自分自身にキャッシュされているデータをユーザに送り返すので、ユーザはコンテンツを素早く取得することが可能となります。
また、その場合プロキシは本来のサーバにアクセスしなくて済むため、そのサーバに掛かる負荷を軽減することができます。
このようにプロキシをキャッシュサーバとして利用することによって、遠くのサーバに何度もアクセスしなくて済むため、結果的にネットワークのトラフィック(回線使用量)を軽減できるのです。

このキャッシュ機能は一般的なWebブラウザにも実装されていますが、Webブラウザのキャッシュとプロキシのそれとでは規模が大きく異なります。前者は単独のユーザが取得したコンテンツをキャッシュするのに対して、後者はプロキシの全利用者が取得したコンテンツをキャッシュします。したがって、プロキシの利用者は自分が過去に一度も見たことのないコンテンツであっても素早く取得することが可能となるのです。

ただし、プロキシを介することで通信経路が遠回りになることを考えても分かるように、プロキシの利用によって必ずしもコンテンツの取得が早くなるわけではありません。実際にコンテンツの取得に掛かる時間が短縮されるためには、キャッシュが有効利用される環境や大容量の通信回線が条件となります。特に、利用者数に対して接続されているバックボーンが細いプロキシを利用すると、通信速度は逆に遅くなってしまいます(これは不特定多数のユーザに無条件に公開されている大半のプロキシに当てはまります)。

ところで、プロキシのキャッシュのデータは一体いつまで保存されるのでしょうか。もしオリジナルのWebページが更新された後であってもキャッシュからその古いコピーを取得することが可能であれば、プロキシの透過性が失われてしまいます。この問題を解決するため、キャッシュにコンテンツを保持しておく有効期限を設定しておき、その期限を過ぎたキャッシュのコンテンツは自動的に削除される仕組みになっています。
このキャッシュの有効期限はプロキシ側でも指定できますが、Webページの製作者側でも指定することができます。HTTP1.1ではHTTPレスポンスヘッダのExpiresフィールド等によりWebページの有効期限を指定することが推奨されており、そのページのコピーはここで指定されている有効期限までプロキシのキャッシュに保存されます。ただし、プロキシの透過性を保つために、コンテンツの有効期限の指定は慎重にされるべきだといえます。適切な有効期限が指定されていれば、プロキシはその透過性を保つことが可能となります。
一方、もしHTTPヘッダでページの有効期限が指定されていない場合、プロキシがコンテンツをキャッシュしておく期間はその実装に依存します。したがって、この場合プロキシの透過性は必ずしも保証されません。
1.2.2 フィルタリング
プロキシはWebブラウザ等のクライアントとWWWサーバ等の外部のサーバの間に位置しているため、基本的にこれらの間を通過する全てのデータをフィルタリングすることができます(ただしHTTPSでの暗号化された通信では不可)。つまり、プロキシはクライアントからサーバに送信されるデータ、あるいはサーバからクライアントに送信されるデータをモニタリングして、それらのデータを自由に改変したり、通信自体を妨害することができます。
このフィルタリングは主に内部ネットワーク(LAN)の効率的運用を目的として行われます。

具体的にはフィルタリングによって以下のような効果が得られます。
  • ユーザを認証することによってアクセス制限できる
    例) 特定の範囲内のIPアドレスからのアクセスのみを許可する
  • ユーザに対して特定のコンテンツの取得(閲覧)を制限できる
    例) 予め特定のサイトのURLのパターンを登録しておくことにより、それらのサイトの閲覧を禁止する
  • 受信したコンテンツをチェックできる
    例1) 受信したコンテンツに不適当な単語が含まれていないかチェックする
    例2) 受信したコンテンツがウイルスに感染していないかチェックする
    例3) 受信したコンテンツが特定の動画共有サイトの動画の実体ファイルであればそれを別途保存する
  • 受信したコンテンツを加工し付加価値を与えることができる
    例1) 受信したコンテンツの文字コードを変換した結果を返す
    例2) 受信したコンテンツを機械翻訳した結果を返す
    例3) 受信したコンテンツに広告を付加した結果を返す
    例4) 受信したコンテンツがgzip等で圧縮されている場合、展開(解凍)した結果を返す
これらの中で公開プロキシを外部から利用する一般のユーザが恩恵を受け得るフィルタリング機能は、受信したコンテンツのデータ加工についてでしょう。しかし、現在ではこの機能を持つプロキシは限られた用途にのみ利用され、一般のユーザが意識する機会はほとんどありません。
1.2.3 通信経路変更
目的のサーバにプロキシを介してアクセスする場合には、直接アクセスする場合と異なる経路で通信することになります。
例えば、日本国内のユーザが日本国内のサーバにアクセスする場合、通常は国外の通信網を経由することはありませんが、もしアメリカのプロキシを介してアクセスする場合にはアメリカの通信網を経由することになり、通信経路が遠回りになります。このため、多くの場合プロキシを介したアクセスは通信速度が遅くなります。
しかし、もしユーザと目的のサーバとの間の通信回線が細い(あるいは混雑している)場合はどうでしょうか。このような場合は大容量のバックボーンに接続されたプロキシを介して混雑している回線を迂回すれば通信速度を上げることが可能となります。学内LANやインターネット環境の整っていない国の低速回線を経由する場合などにこの方法が用いられることがあります。

また、自宅のPCでWWWサーバを立ち上げた場合、普通は公開前に実際に外部からアクセス可能かどうかを確認しますが、そのためには基本的にそのサーバに自分のPC以外からアクセスしてみる必要があります。しかし、自分のPCからプロキシを介して自宅サーバに間接的にアクセスすることにより、他のPCを使わずに簡単にサーバの動作確認を行うことができます。
1.2.4 匿名性確保
前述した通り、プロキシを利用しないでWebページを閲覧する場合、ユーザのコンピュータがWWWサーバに直接アクセスします。
ユーザのコンピュータ(要求元) ←→ WWWサーバ(要求先)
そのため、ユーザの様々な個人情報が要求先のWWWサーバやWebページ管理者に伝わってしまいます。実際にどのような情報が漏れているか確認するために、ブラウザにプロキシを設定していない状態でENV Checkerにアクセスしてみてください。インターネット上での個人情報とも言うべきあなた固有の様々な情報が筒抜けになっているはずです。例えば、ユーザのIPアドレス、ホスト名そしてブラウザやOSの種類等の情報です。
ちなみに、IPアドレスとはインターネット上でユーザのコンピュータを識別するための番号のことです。インターネットに接続されているコンピュータには全てユニークなIPアドレスが割り当てられています。一般家庭におけるインターネット接続の場合、通常は接続するたびにISP(インターネット・サービス・プロバイダ)から固有のIPアドレスがユーザのコンピュータに自動的に割り振られます。
また、IPアドレスを人間に理解しやすい文字列に変換したものがホスト名です。ホスト名は多くの場合ユーザの利用しているISP(または学校や会社)やそのアクセスポイント(地域)を示す文字列を含みます。

では、このようなユーザ固有の環境変数が接続先のサイトに伝わることによってユーザはどのような影響を受けることになるのでしょうか。
一つにはプライバシーの問題が挙げられます。サイト管理者がアクセスログを取っている場合、どの辺りの地域に住み、どの組織(またはISP)に属している人が、いつ、どのページを、どのページのリンクから、どのくらいの頻度で、どのブラウザとOSを使って閲覧したのか、という情報が知られてしまうことになります。特に、掲示板やチャットに書き込みをした場合、投稿者の環境変数のうち幾つか(ホスト名等)がサイト管理者のみならず閲覧者全員に見えるように表示されることがあります。
このように、普通にインターネットに接続していると、自分の環境や興味の対象あるいは思想等を無闇に他人に知られたり、行動を監視されたりする恐れがあるのです。これではプライバシーも何もなく、安心してインターネットに接続できないという人も居ることでしょう。

また、自分のIPアドレスを無闇に知られるとそれだけインターネットを介した様々な攻撃を受ける危険に晒されることになります。例えば、サービス拒否(DoS)攻撃を受けたり、場合によっては自分のコンピュータを遠隔操作されたりする危険性も孕んでいます。特に常時接続や専用線接続をしているユーザにとっては無視できない問題です。もちろんこのような攻撃を受ける可能性は小さいのですが、全く無いとは言い切れません。
基本的にこのような攻撃をするためには何らかの方法で対象のIPアドレスを知っておく必要があります。逆にいえば、自分のIPアドレスを知られなければインターネットを介した攻撃を受ける危険性を抑えることができます。そのため、自分のIPアドレスを他人に無闇に知らせることは避けるべきだといえます。

さて、以上のような問題を解決するための手段としてプロキシの利用があります。前述した通り、プロキシを介してWebページを閲覧する場合、プロキシがユーザの代わりにWWWサーバにアクセスして目的のWebページを取って来てくれます。つまり、ユーザはWWWサーバに直接アクセスすることなく目的のコンテンツを閲覧することができます。
ユーザのコンピュータ(要求元) ←→ プロキシサーバ ←→ WWWサーバ(要求先)
そのため、この場合WWWサーバにはユーザのIPアドレスやホスト名の情報は伝わらず、代わりにプロキシの情報が伝わることになります。したがって、プロキシを利用することによって、Webサイト管理者や掲示板閲覧者等には自分が誰なのかという情報(IPアドレスおよびホスト名)を知られなくて済み、上記の問題を解決することが可能となるのです。

ただし、ユーザ(要求元)のIPアドレスを含む環境変数をサーバ(要求先)に伝えるプロキシも多く存在します。わざわざこのような要求元の細かい環境変数を記録しているサイトは稀ですが、完全に匿名性を確保するためにはユーザのIPアドレスをどこにも漏らさない匿名プロキシを利用する必要があります(詳細についてはこちら)。
また、ほとんどの場合プロキシを介していてもブラウザの種類やリンク元の情報は接続先のサーバに伝わります。つまり、プロキシを利用することによって隠蔽できるユーザの情報は基本的にユーザが「誰」なのかだけです。
実際にプロキシを利用したときに要求先のサーバに伝わる環境変数を確認するためには、ブラウザにプロキシを設定した状態でENV Checkerにアクセスしてみてください(プロキシの利用方法については後述)。あなたのIPアドレスやホスト名等の情報がプロキシ固有の値に置き換わっているはずです。もしここであなたの本当のIPアドレスがどこにも表示されていなければ、匿名性が確保されたことになります。

ところで、プロキシによる匿名性確保には、接続元情報(IPアドレスまたはホスト名)によるアクセス制限を回避できるという副次的な効果があります。つまり、特定のサイトからアクセスを拒否された場合、そのアクセス制限の条件に合致しないプロキシを利用すれば、その制限を回避してサイトを閲覧することが可能となります。例えば日本からのアクセスを拒否する外国のサイトを閲覧する場合などにこの方法がよく用いられます。

2 プロキシサーバの利用方法

ここからは説明の対象をHTTPプロキシ(WWWにおいて利用可能なプロキシサーバ)に限定し、その具体的な利用方法について解説します。

2.1 プロキシサーバの入手と選択

一般的に、外部から自由に利用可能なプロキシを見つけることは容易ではありません。特に、当サイトを知らないインターネット利用者にとっては、そのようなプロキシを見つけることは困難な作業となっているようです。
というのは、多くの場合プロキシの寿命は短く、Web上でプロキシが掲載されたリストを見つけて実際に使おうとしてもすでに外部から利用できなくなっていることがほとんどだからです。しかも、仮に外部から利用可能なプロキシが見つかったとしても、アクセス速度や匿名性において問題があることが多く、本当に使えるプロキシの入手は困難とされています。

ところが、当サイトでは独自のプロキシ判別システムの導入により、外部から自由に利用可能な最新のプロキシのリストを常時公開することが可能となっています。さらに、プロキシの匿名性やアクセス速度などによってリストを区別しているため、ユーザの利用目的にマッチしたプロキシを自由かつ簡単に選択することができます。もちろん全て無料で利用可能です。

それでは実際に当サイトのプロキシリストの中からどれか一つプロキシを選択してみてください。

2.2 ブラウザの設定

実際にプロキシを利用してWebページを閲覧するためには、利用するプロキシをブラウザに設定する必要があります。
その方法には手動設定と自動設定の2通りが存在します。「自動設定」と聞くといかにも便利で簡単そうですが、自動設定のためには設定用スクリプトファイルを別途用意する必要があるため、個人のインターネット利用者が公開プロキシの設定を行う際は自動設定ではなく手軽な手動設定によることがほとんどです。そのため、初心者の方は手動設定の方法だけ理解すれば十分です。
2.2.1 手動設定
ブラウザにプロキシを手動設定する際に必要となるのは、プロキシの「アドレス」と「ポート番号」の情報だけです。
例えば「192.168.0.1:8080」という形式のプロキシであれば、「:」の前の「192.168.0.1」がプロキシのアドレスを、また「:」の後の「8080」がプロキシのポート番号を示します。プロキシのアドレスは基本的にIPアドレスとホスト名のどちらでも構いません。

以下では例としてWindowsで使用されている幾つかの主要なブラウザにプロキシを手動設定する方法について説明します。

■ Internet Explorer の設定
  1. 「ツール」メニュー
  2. 「インターネットオプション」
  3. 「接続」タブ
  4. 「設定」ボタン(ダイヤルアップ接続のようにISPとの接続・切断の切替えをPC側で行える場合) または 「LANの設定」ボタン(LAN等でISPの接続設定をルータ側に保存している常時接続の場合)
  5. 「~プロキシサーバーを使用する」をチェック
  6. プロキシのアドレスとポート番号を入力
  7. 「OK」ボタン
■ Mozilla Firefox の設定
  1. 「ツール」メニュー
  2. 「オプション」
  3. 「詳細」アイコン
  4. 「ネットワーク」タブ
  5. 接続→「接続設定」ボタン
  6. 「手動でプロキシを設定する」をチェックしHTTPプロキシのアドレスとポート番号を入力
  7. 「OK」ボタン
■ Google Chrome の設定
  1. 画面右上のメニュー
  2. 「設定」
  3. 画面下部の「詳細設定を表示...」リンク
  4. ネットワーク→「プロキシ設定の変更」ボタン
  5. 「接続」タブ (ここからは Internet Explorer の設定の手順3以降と同じ)
  6. 「設定」ボタン(ダイヤルアップ接続のようにISPとの接続・切断の切替えをPC側で行える場合) または 「LANの設定」ボタン(LAN等でISPの接続設定をルータ側に保存している常時接続の場合)
  7. 「~プロキシサーバーを使用する」をチェック
  8. プロキシのアドレスとポート番号を入力
  9. 「OK」ボタン
■ Safari の設定
  1. 画面右上の一般設定メニュー
  2. 「設定」
  3. 「詳細」アイコン
  4. プロキシ→「設定を変更」ボタン
  5. 「接続」タブ (ここからは Internet Explorer の設定の手順3以降と同じ)
  6. 「設定」ボタン(ダイヤルアップ接続のようにISPとの接続・切断の切替えをPC側で行える場合) または 「LANの設定」ボタン(LAN等でISPの接続設定をルータ側に保存している常時接続の場合)
  7. 「~プロキシサーバーを使用する」をチェック
  8. プロキシのアドレスとポート番号を入力
  9. 「OK」ボタン
プロキシをブラウザに設定したら、正しく設定されているかどうかをENV Checkerで確認してみましょう。ページが正常に表示され、REMOTE_ADDRの値に自分以外のIPアドレスが表示されていれば設定成功です(プロキシを設定する前の値と見比べてみましょう)。ページが正常に表示されない場合はそのプロキシは利用できないということなので、別のプロキシを設定し直してください。また、ページが正常に表示されたとしてもREMOTE_ADDRの値が設定前と何も変わらない場合はブラウザの設定が間違っているということなので、ブラウザのプロキシ設定をする箇所を再度確認してみてください。
2.2.2 自動設定
一般にあまり知られていませんが、ブラウザにプロキシを設定する方法として手動設定だけでなく自動設定も存在します。自動設定ではプロキシの自動設定用スクリプトファイル(PACファイル)を使用します。
PACファイルの中身はJavaScriptで記述され、FindProxyForURLという名前で定義された関数(引数はアクセス先URLを表す「url」とそのホスト名部分を表す「host」の2つ)の戻り値として、自動設定したいプロキシを指定します。
function FindProxyForURL(url, host) {
    return "PROXY 192.168.0.1:8080";    // プロキシ「192.168.0.1:8080」を使用
}
使用する優先順位を付けて複数のプロキシを指定することもできるため、それらのうちの1台でも稼動していれば、残りのプロキシが全てダウンしていたとしてもプロキシを介してインターネットに接続することが可能です。
function FindProxyForURL(url, host) {
    // 万一プロキシ「192.168.0.1:8080」がダウンしていれば代わりに「172.16.0.10:3128」を使用し、それもダウンしていれば直接アクセス
    return "PROXY 192.168.0.1:8080; PROXY 172.16.0.10:3128; DIRECT";    
}
また、ブラウザで利用するプロキシを様々な条件(アクセス先URL等)によって動的に変更させることも可能です。
function FindProxyForURL(url, host) {
    if(shExpMatch(url,"https://*")) {    // アクセス先URLが「https://」から始まる場合
        return "DIRECT";    // プロキシを使用せず直接アクセス
    }
    if(shExpMatch(host,"*.example.com")) {    // アクセス先URLのホスト名が「example.com」のサブドメインの場合
        return "PROXY 172.16.0.10:3128";    // プロキシ「172.16.0.10:3128」を使用
    }
    return "PROXY 192.168.0.1:8080";    // 以上の条件にマッチしなければプロキシ「192.168.0.1:8080」を使用
}
PACファイルを使用してブラウザにプロキシを自動設定する方法は、上記のようなJavaScriptコードが記述されたPACファイル(ファイル名をproxy.pacなどとするのが一般的)を用意できていれば簡単で、PACファイルが置かれているURLをブラウザの設定画面の所定の箇所に入力するだけです。ブラウザの具体的な設定箇所についてはこちらを参考にしてください。
PACファイルのURLを一度ブラウザに設定すれば、その後はブラウザの設定画面でプロキシの自動設定を無効にしない限り、常にPACファイルの内容に従ったプロキシを利用することができます。

PACファイルは基本的にWebサーバ上に置かれるもの(ただし一部のブラウザ以外ではローカルPC上に置いても正常に処理されます)であり、Webサーバ上のPACファイルを更新すればブラウザの設定を変更しなくても新たなプロキシを利用できるようになります。ただし更新が即座に反映されるわけではなく、反映のタイミングはブラウザによって異なります(通常はブラウザを再度起動した時点)。
そのように設定ファイルがWebサーバから配信される特性から、PACファイルによるプロキシの自動設定は通常は会社や学校が多数のPCで自前のプロキシを社員や学生に使わせることを目的として利用されることがほとんどであり、一般の個人のインターネット利用者がプロキシを利用する際に自動設定を利用することはほとんどありません。特に、外部から自由に利用可能な公開プロキシの自動設定に対応したPACファイルを使いたければ、基本的に多少の手間をかけて自作するしかありません。

ところが、当サイトではPACファイルを生成・配信するサービス(Proxy Autoconfig)の提供も行っていますので、手間をかけずにブラウザにプロキシを自動設定することが可能となっています。もし公開プロキシの自動設定を行いたいのであればそれを利用するとよいでしょう。

3.プロキシサーバの種類

プロキシサーバやそれに関連するソフトウェア・方式には様々な種類が存在します。基本的にプロキシを利用する上でソフトウェアの名称や機能の詳細を理解しておく必要はありませんが、ここでは教養としてその代表的なものを幾つかご紹介します。

3.1 Squid

Squid(スクイッド)はHTTPやFTPに対応した現在最も広く利用されているプロキシソフトウェアです。キャッシュ機能に特化しており、他のSquidプロキシサーバと連携することができます。
また、ファイルをダウンロードしている途中で接続を切断しても、そのファイルのダウンロードを前回の続きから再開(リスタート)できる機能(レジューム機能)を実装しています。そのため、レジュームに対応していないサーバからファイルをダウンロードする場合でも、Squidプロキシを利用すればレジュームできることがあります。
なお、Squidで標準的に使用されるポートは3128番です。
ちなみに、当サイトのプロキシ検索エンジンで「*squid*」と入力して検索すればSquidプロキシを入手できます。

【参考】 Squidの公式サイト

3.2 Apache

Apache(アパッチ)は世界中で最も広く利用されているWebサーバですが、これをプロキシサーバとして動作させることも可能です。初期設定を一部変更する(mod_proxyモジュールを有効にする)だけで簡単にプロキシサーバとして動作させられるため、プロキシとしても広く利用されています。
なお、Apacheで標準的に使用されるポートは80番です。

【参考】 Apacheの公式サイト

3.3 DeleGate

DeleGate(デリゲート)は多目的な用途に利用される純国産のプロキシソフトウェアです(ただし公式のマニュアルは英語のみ)。日本語対応のブラウザがなかった当時、日本語コード変換機能付きプロキシサーバとして広く普及しました。プロキシの透過性よりもデータを付加価値付きで中継する機能に重点が置かれて開発されています。

DeleGateには目的のコンテンツのアドレスとそのデータを中継するDeleGateプロキシのアドレスをURLとして同時に指定できる機能が実装されています。つまり、DeleGateプロキシを介してWebページを閲覧する場合、(設定によっては)そのWebページのURLとそのデータを中継するDeleGateプロキシのURLをブラウザのURL欄から同時に指定することができるのです。この場合、以下のように、DeleGateプロキシのURLと目的のWebページのURLを「-_-」という接続符号を用いて連結させた文字列をURL欄に入力します。
http://DeleGateのホスト名またはIPアドレス:ポート番号/-_-目的のURL
したがって、この機能を利用すれば、プロキシの利用が許可されていない環境下のブラウザからプロキシを介したアクセスを実現することが可能となります。ちなみにこの接続方式はカスケード接続と呼ばれています。

このカスケード接続を応用した利用方法の一つとして多段プロキシがあります。多段プロキシとは目的のサーバからコンテンツを取得する際複数のプロキシを介する接続方法です。この多段プロキシは主に複数のファイヤーウォールで閉じられた環境からインターネットに接続する際に利用されます。また、特にDeleGateのカスケード接続による多段プロキシについては、会社やインターネットカフェ等ですでにプロキシが設定されている環境から別のプロキシを介してインターネットにアクセスする際にも利用されます。
多段プロキシを実現するためには、ブラウザにプロキシを設定した状態で上記のカスケード接続を行うのが簡単です。ただし、もっと多くのプロキシを介して接続する方法もあります。そのためには以下のようにDeleGate独自の接続符号「-_-」を用いて複数のDeleGateプロキシのURLと目的のWebページのURLを連結させた文字列をブラウザのURL欄に入力します。
http://DeleGateのホスト名またはIPアドレス:ポート番号/-_-http://DeleGateのホスト名またはIPアドレス:ポート番号/-_-目的のURL
しかし残念ながら、現在ではカスケード接続が可能で不特定多数のユーザに公開されているDeleGateプロキシはほとんど見かけなくなっています。
なお、DeleGateで標準的に使用されるポートは8080番です。

【参考】 DeleGateの公式サイト

3.4 Socks

Socks(ソックス)とは内部ネットワーク(LAN)からインターネットへ接続できるようにするための方式(プロトコル)の一種です。Socksサーバはプロキシサーバのように動作しますが、普通のプロキシと異なり、一つのSocksサーバだけでHTTP、FTP、Telnet等のようなTCP/IPを利用するほとんど全てのプロトコルに対応したプロキシサーバとして利用することができます。それはSocksがOSI参照モデルにおいてTCP/IPを利用する他のプロトコル(HTTPやFTP等)よりも低い階層(第5層)で動作するからです。
ただしSocksサーバには通常プロキシのようなキャッシュ機能が実装されていないため、キャッシュによるコンテンツ取得の高速化は実現されません。
ちなみに、前述のDeleGateもSocksサーバとして使用可能です。また、高い匿名性の実現を目的として開発されている汎用プロキシTorもクライアントソフトとのインターフェイスとしてSocksを採用しています(ただし速度が極めて遅く面倒な設定も必要となるため初心者向けではありません)。
なお、Socksで標準的に使用されるポートは1080番です。

3.5 CGIプロキシ

CGIプロキシとは、ユーザからリクエストがあるたびに起動し、ユーザの代わりに目的のサーバからコンテンツを取得する機能を持つCGIプログラムの呼称です。厳密にはプロキシサーバではありませんが、プロキシと類似した機能を持つためこのように呼ばれることがあります。
また、実際にはCGIでなくてもCGIプロキシと同様の機能を持つオンラインサービスもCGIプロキシに分類される場合があります。
これは匿名性の追求や特殊なフィルタリングのために利用されることが多く、速度面でのメリットはありません。

【参考】 CGIプロキシまたはその類似機能を持つサービスを公開しているサイト

3.6 CoralCDN

CoralCDNは、P2P技術に基づきWebコンテンツを効率的にキャッシングしWebサーバへの負荷の集中を大幅に軽減することを目的としたCDN(Contents Delivery Network)であり、プロキシサーバとネームサーバの世界規模のネットワークで構成されています。これは「Coral Cache」または単に「Coral」と呼ばれることもあります。ニューヨーク大学で開発され、世界中の教育・研究機関等でCoralCDNのプロキシサーバが広く運用されています。

動作方式は一見するとCGIプロキシと似ており、ユーザはWebブラウザの設定を変更することなく、目的のコンテンツのURLのホスト名部分の直後に「.nyud.net:8090」を付け加えてアクセスするだけでそのコンテンツをCoralCDNのプロキシ経由で取得することができます。
例として当サイトのENV CheckerをCoralCDN経由で表示してみましょう。
▼ CoralCDNを使用しないURL
https://www.cybersyndrome.net/env.cgi
▼ CoralCDNを使用したURL
http://www.cybersyndrome.net.nyud.net:8090/env.cgi
CoralCDNのプロキシサーバは世界中で広く運用されており、CoralCDNがユーザからリクエストを受けた際にP2P技術によってその時点で最適な(低負荷状態の)プロキシサーバが選択されるため、下記の例のようにCoralCDN経由で別のURLのWebページにアクセスすると接続元ホストが変化する場合があります。
▼ CoralCDNを使用した別のURLの例
http://www.cybersyndrome.net.nyud.net:8090/env.cgi?2
このサービスは基本的にユーザのために用意されているのではなく、あくまでもWebサーバ運営者のために用意されています。そのため、匿名プロキシとは違い、Webサーバに対してユーザのIPアドレスを含むHTTP環境変数を出力します。
また、Webサイトを作成した際にCoralCDNを使用したURLを正式なサイトURLとして公開すれば、Webサイトの閲覧者が増加しても転送容量を最小限に抑えることができますし、Webサイトに対するDoS攻撃を防ぐことが可能となります。

【参考】 The Coral Content Distribution Network

4 プロキシサーバに関するFAQ

ここからは頻繁に寄せられるプロキシサーバ関連のご質問にお答えします。

質問1

プロキシを無断で利用すると不正アクセス禁止法に抵触するという話を聞いたのですが本当ですか?
回答
それは間違いです。
「不正アクセス行為の禁止等に関する法律」によって定義されている不正アクセス行為とは、アクセス制御機能を有するコンピュータ(つまりパスワード認証のあるコンピュータ)に他人の識別符号(つまりパスワード)や何らかの特殊なコマンドを入力して、それを不正に利用できる状態にすることです。したがって、一般に公開されている外部から自由に利用可能なプロキシはアクセス制御機能により利用を制限されているとはいえないため、それを無断で利用したとしても不正アクセス行為には該当しません。

これはインターネットの性質上当然のことだといえます。プロキシに対するアクセス方法が仕組み的にWWWサーバに対するそれと同じことから考えれば、外部から利用(閲覧)できるように設定されている以上無断で利用(閲覧)されるのが当たり前です。もしこれが違法行為とみなされるのであれば、他人のWebページを勝手に閲覧することも違法行為になってしまうでしょう。
また、もしプロキシの管理者が外部から無断で利用されることを好まないのであれば、認証機能を付けたりポートを閉じたりして対策を講じればよいだけの話です。ただ管理がずさんなために外部から自由にアクセスできるように設定されているプロキシも多いようですが…。

上述した通りプロキシを外部から無断利用すること自体は法律上問題ありませんが、あまりにも負荷が掛かるような使い方をすると業務妨害とみなされてしまう場合が考えられますので注意が必要です。

質問2

プロキシと判らせないプロキシの条件を教えてください。また、そのようなプロキシの入手方法を教えてください。
回答
そのようなプロキシの条件として、まず第一に、HTTPのリクエストヘッダにプロキシ特有の環境変数を付加しないことが挙げられます。プロキシ特有の環境変数についてはENV Checkerを参考にしてください。この条件に当てはまるプロキシは当サイトのプロキシリスト「Anonymous」から入手できます。

次に、「proxy」、「proxies」、「cache」あるいは「squid」などの文字列をホスト名に含むものはプロキシであることがほとんど明白なので、プロキシリスト「Anonymous (A)」からそれらの文字列を含むプロキシを除外したものに候補が絞り込まれます。
ただし、上記のようなホスト名に含まれていれば確実にプロキシだといえる文字列は少数であり、なんとなくプロキシと思わせる曖昧な文字列(「ns」や「www」等のようなプロキシでなくてもホスト名に含まれることがある文字列)の方が圧倒的に多いため、ホスト名に含まれる文字列によって「プロキシと判らせないプロキシ」を厳密に選別することは不可能です。特に、そのようなプロキシを必要以上に追求すると、良質のプロキシまでも排除してしまうことになりかねません。

これ以上絞り込むための基準はプロキシを判断する側のロジックに依存します。例えば、環境変数「HTTP_CONNECTION」が「keep-alive」以外のものをプロキシと判断するロジックもあります。また、ホスト名に数字が含まれないものをISP経由の接続ではないとしてプロキシとみなす強引なロジックがあるかもしれません。あるいは、プロキシかどうかを判断する側が日本人であれば、日本以外からのアクセス(jpドメイン以外のホスト名)をプロキシとみなすかもしれません。
しかしながら、これらはどれもプロキシでなくても当てはまる場合が多々あるため、常にこれらのロジックがプロキシの判断に使われるということはないでしょう。

結局のところ、何を基準にプロキシと判断するかは人によって様々なので、「プロキシと判らせないプロキシ」を入手するためには、プロキシかどうかを判断する側のロジックを考慮した上でプロキシリスト「Anonymous」からご自分の目で選別する事が最も確実だといえます。

質問3

匿名(Anonymous)プロキシと非匿名(Non-Anonymous)プロキシの違いについて教えてください。また、それぞれの長所と短所を教えてください。
回答
プロキシを介してENV Checkerにアクセスすると、プロキシからWWWサーバに対して送信される全ての環境変数を確認できます。もしここでユーザのIPアドレスがどの環境変数にも含まれていなければ、利用しているプロキシは匿名(Anonymous)プロキシということになります。一方、もし名前が「HTTP」から始まる環境変数(ほとんどの場合「プロキシ関連の情報」の欄にある環境変数)にユーザのIPアドレスが含まれていれば、利用しているプロキシは非匿名(Non-Anonymous)プロキシということになります。
つまり、両者の相違点はユーザを特定するための情報(IPアドレス)をWWWサーバに漏洩するかどうかであり、個人情報を隠蔽するだけの目的でプロキシを利用する場合においては匿名プロキシの方が非匿名プロキシよりも優位性があるといえます。

しかしながら、一般的なサイトのアクセス解析においてプロキシ関連の環境変数がチェック・記録されることはほとんどなく、必ずしも匿名プロキシの優位性が有効となるわけではありません。
また、現実には匿名プロキシの方が非匿名プロキシよりも利用者数が圧倒的に多いため、多くの場合において匿名プロキシはアクセス速度の低下が早く、すぐに利用できなくなってしまいます。
そのため、必ずしもすべての面において匿名プロキシが非匿名プロキシより優位に立つというわけではなく、遅い匿名プロキシを無理に利用するよりも速い非匿名プロキシを利用した方が有意義であることがほとんどです。

以上のことから、匿名プロキシと非匿名プロキシの長所・短所はそれぞれ次のように挙げられます。
  • 匿名(Anonymous)プロキシ
    長所 : すべてのアクセス解析においてユーザのIPアドレスがサイト管理者に知られることがない
    短所 : 一般的にアクセス速度の低下が早く寿命が短い

  • 非匿名(Non-Anonymous)プロキシ
    長所 : 一般的にアクセス速度が一定していて寿命が長い
    短所 : 一部のアクセス解析においてユーザのIPアドレスがサイト管理者に知られることがある
したがって、利用目的に応じてプロキシの種類を使い分けることがプロキシの賢い利用法といえるでしょう。特に、プロキシをキャッシュサーバとして利用したり、特定の地域のユーザからのアクセスを弾くサイトを閲覧することを主目的に利用する場合においては、匿名プロキシではなく非匿名プロキシを利用すると効果的で、同じプロキシをより長期的に快適に利用できる可能性が高くなります。

質問4

プロキシを利用すると利用料金が発生するのですか?
回答
当サイトに掲載されているプロキシは全て無料で利用可能です。いくら使っても後から利用料を請求されることはありません。
また、海外には匿名性に特化した有料のプロキシも一部存在しますが、前払い制であり後から利用料を請求されることはありません。
つまり、当サイトに掲載されているような最初から許可なく自由に利用可能なプロキシは全て無料です。