HTTPortでファイアーウォール(プロキシ)を超えよう

初出:2002/09/03
改定:2003/03/05

0.会社からインターネットに接続できないことがある!?

 会社にパソコンが設置され、インターネット接続環境がある。支給されたパソコンからブラウザでいろいろなサイトを閲覧することが出来る。
 という環境がそろっていながら、特定のファイルをダウンロードできない・メールを送受信できない・FTPソフトが使えない・VNCなどの遠隔ソフトが使えない、など、インターネットに接続できる環境が制限されてはいないだろうか?

 その原因は「ファイアーウォール」にある。



1.ファイアーウォールとは

 パソコン側回線(LAN)とインターネット側回線(WAN)が直結している場合、インターネット側からパソコンへの不正侵入やパソコン側からインターネットへの不正侵出が容易になり、セキュリティーに影響することがある。そのため、LANとインターネットの中間に「関所」を設けてそれらをチェックし、危険な場合には通信を遮断する必要がある。これを行う技術の総称が「ファイアーウォール」である。
ファイアーウォール

 このように、ファイアーウォールは危険を未然に防ぐ目的があるため、セキュリティー意識のある会社ならば当然設置されている。使いたいソフトでの通信が制限されているのも、セキュリティーを確保するために行うごく普通の措置と言える。



2.プロキシとは

 このように通信の制限を行うのがファイアーウォールの役目だが、その技術の1つに「プロキシ」がある。「プロキシ」とは、和訳すると「代理」という意味で、インターネットへの接続を代理して行う技術のことだ。
 通常、企業には何十台・何百台のパソコンがあるが、対してインターネット接続回線は一本〜数本程度しかない。これでは全てのパソコンをまかなうことは出来ない。そこで、個々のパソコンがインターネットに接続する際は、いったんプロキシへ接続し、プロキシがそのパソコンに代わってインターネットへ接続する、という形態を取る。つまり、プロキシがインターネットへの接続を一手に引き受け、各パソコンとの通信をさばいていくわけだ。
プロキシ

 ここ重要なのは、「いったんプロキシへ接続し、プロキシがインターネットへ接続する」という点だ。つまり、ファイアーウォールに必要な「関所」としての役割をプロキシに負わせることが出来る。そのため、プロキシには本来の役割である「中継地点としてのプロキシ」と「通信を制限するためのプロキシ」の2種類がある。企業の場合は、ほとんど後者のプロキシ機能を利用している。

 すなわち、使いたいソフトでインターネットに接続するには、プロキシを突破しなければならないのだ。



3.トンネルとは

 通信制限を主としたプロキシは、「通信を通さない」スタンスが基本であり、通したい通信の場合のみ許可する設定を行う。そのため、プロキシが対応していない通信機能を持ったソフトは、どうあがいても通してくれない。これを回避するために、プロキシには「トンネル」という機能がある。ファイアーウォールに穴をあけてトンネルを通すことをイメージして欲しい。トンネルを作れば、ファイアーウォールの通信制限を貫通してインターネットに接続できるのだ。
トンネル

 トンネルは、セキュリティーホールになるため、「どうしても使いたいがプロキシが対応していないソフト」を接続するために使用する。だから、プロキシの管理者に設定を変更してもらわなければならない。だが、管理者がそんな話に素直に応じるはずはない(彼らはセキュリティーの確保を第一に考えている)。ではあきらめるしかないのだろうか。



4.SSLとトンネル

 ブラウザを使ってインターネットショッピングをする際、個人情報やクレジットカード情報を入力することになるが、それらが傍受され、悪用される危険がある。そのため、通信するデータを暗号化して隠蔽する技術が必要になる。これが「SSL」だ。SSLを使ったサイトは、アドレスが「https://」から始まる。

 ところでこのSSLでプロキシに接続すると、プロキシはSSLのためにトンネルを作ってくれるのだ。これを「SSLトンネル」という。SSLトンネルは単に通信を右から左に流すだけであり、制限を受けない。そして、SSLは、ブラウザによる通信だけでなく、TCP/IPを利用したインターネット通信すべてに適用できる技術なのだ。すなわち、メール・FTP・VNC・チャットなどにもSSL通信を利用できる。
SSLトンネル



5.HTTPortでプロキシにトンネルを作る

 というわけで、プロキシの通信制限を越えて使いたいソフトをインターネットに接続するには、SSLを利用してプロキシにトンネルを作ればよいことが分かった。そのためには、SSL接続ソフト(SSLクライアント) が必要になる。数種類のソフトがあるが、ここでは扱いの比較的楽なフリーソフトの「HTTPort」を使用する(シェアウェア登録のボタンもあるが、今回使用する機能とは無関係)。

 接続の流れは以下のようになる。

使いたいソフト→SSL接続ソフト(HTTPort)→プロキシ→【SSLトンネル】→インターネット

それでは早速設定に移ろう。

  1. HTTPortを起動すると設定画面が表示されるので、「Proxy」タブを選択する。
  2. 一番上の「HTTP proxy you need to bypass(バイパスの必要があるHTTPプロキシ)」のところに突破したいプロキシを設定する。「Host name or IP address」欄にプロキシサーバーのアドレス、「Port」欄にポート番号を入力する。
    プロキシ設定の調べ方は、IE5の場合、「コントロールパネル→インターネットオプション→接続→LANの設定→プロキシサーバー」のアドレスとポート欄を見る。これをHTTPortに入力すればよい。
     プロキシ設定が自動になっている(「設定を自動的に検出する」にチェックが入っている)場合は、TCP Monitor Plusなどの通信モニターソフトを利用してプロキシサーバーのアドレスを取得するとよい。
  3. 真中の「Proxy options」の右下に「Bypass mode」欄があるので、「SSL(CONNECT)」に設定する。

 これで基本的な設定はおしまい。

HTTPort SSL設定



6.ポートマッピング

 次に、ソフトごとにポートマッピングを行う。使いたいソフトはまずHTTPortへ接続するが、ソフトとしては実はここまでで接続は終了してしまう。あとはHTTPortがインターネットへの接続を肩代わりしてくれる。ソフトはあくまでもHTTPortへつなぐだけだ。
 このため、HTTPortにインターネットへの接続先を登録しておく必要がある。例えば、ソフトAがHTTPortへ接続してきたら、あらかじめ登録しておいたソフトAの「本来の」接続先へつなぐようにする。
 ここで、どのソフトがつないできたか判別するために「ポート」を利用する。ポートとは、各ソフトがインターネットからデータを受け取る際の窓口・扉のことだ。使用するソフトによってポート番号が割り当てられており、例えばブラウザは80番、FTPソフトは21番、メールは25番などと決まっている。ポート番号を頼りにすれば、相手が接続すべきソフトを判別できるようになっている。

 HTTPortは、接続してきたソフトのポート番号を調べ、それを「本来の」ポートに変換し、インターネットへ接続する。このポート割り当てを「ポートマッピング」という。いわばポートの対照表を作るようなものだ。

 接続の流れは以下のようになる。

使用ソフト(ポート10025)→HTTPort→【対照表:ポート10025はsmtp.test.comのポート25に接続】
→プロキシ→【smtp.test.comのポート25に接続しなさい】→インターネット

ポートマッピング



7.代表的なソフトの設定例

ア)Outlook Express5
 ※重要:会社からメールを送受信したい場合、個人で使っているメールアカウントは使用できない。これは、個人で加入しているプロバイダを経由するためだ。この場合は、フリーのメールアカウントを取得する必要がある。受信する場合はPOP3、送信する場合はSMTPを提供するアカウントが必要となる。フリーのメールサービスは、検索すれば複数見つかる。ここではすでに取得済みという前提で設定を紹介する。

  1. Outlook Expressを起動する。インターネット接続ウィザードが表示される。
  2. 出ない場合は、メニューから「ツール→アカウント→追加→メール」を選択する。
  3. ウィザードで「電子メール サーバー名」の設定が表示されたら、「受信メール(POP3)」「SMTPメール(SMTP)」の双方に「localhost」と入力する。
    メールサーバー
  4. あとは普通にウィザードを進めて完了させる。
  5. メニューから「ツール→アカウント」を選択し、作成したアカウント名をダブルクリックする。
  6. 詳細設定タブを選択し、「サーバーのポート番号」設定で、送信メール(SMTP)に「10025」、受信メール(POP3)に「10110」を入力する。
    メールポート
  7. HTTPortを起動し、「Port mapping」タブを選択する。
  8. 「Add」ボタンを押す。
  9. 左に「New mapping」というツリーが表示されるので、右クリックして「Edit」を選択、名前を「SMTP」に変更する。
  10. 同様に「Local port」の「0」を「10025」に変更する。
  11. 同様に「Remote host」の「remote.host.name」をフリーメールサービスから提供されたSMTPサーバー名に変更する。
  12. 同様に「Remote port」の「0」を「25」に変更する。
    SMTPのマッピング設定
  13. 「Add」ボタンを押す。
  14. 左に「New mapping」というツリーが表示されるので、右クリックして「Edit」を選択、名前を「POP3」に変更する。
  15. 同様に「Local port」の「0」を「10110」に変更する。
  16. 同様に「Remote host」の「remote.host.name」をフリーメールサービスから提供されたPOP3サーバー名に変更する。
  17. 同様に「Remote port」の「0」を「110」に変更する。
    POP3のマッピング設定

イ)FTPクライアント
 ここでは代表的なフリーのFTPクライアント「FFFTP」を例に紹介する。
 FTPの場合は、複数のサーバーへ接続する可能性があるため、固定的なポートマッピングではなく「SOCKSサーバー」を経由する。HTTPortにはSOCKS4サーバーが内蔵されている。

  1. FFFTPのメニューから「オプション→環境設定」を選択する。
  2. 「FireWall」タブを選択する。
  3. 「FireWallのタイプ」を「SOCKS4」、「FireWallホスト」を「localhost」、「ポート」を「1080」に設定する。
    FFFTPのファイアーウォール設定
  4. あらかじめ作成したホストの設定を表示し「拡張」タブを選択する。
  5. 「FireWallを使う」と「PASVモードを使う」にチェックを入れる。
    FFFTPの拡張設定
  6. HTTPortを起動し、「Port mapping」タブを選択する。
  7. 「Built-in SOCKS4 server」の「Run SOCKS server(port 1080)」にチェックを入れる。
    HTTPortのSOCKS設定

ウ)VNCビューア
 VNCビューアにはプロキシ設定がないため、通常はプロキシを超えられない。しかしHTTPortを使えば、簡単にプロキシを超えてVNCサーバーへ接続できる。なお、VNCサーバーやブロードバンドルーターなどの設定はすでに終了しており、プロキシさえなければ外部(インターネット)から接続できる環境になっているものとする。

  1. VNCビューアを起動する。
  2. 「VNC Server」を「localhost:590x」にする。xにはディスプレイ番号が入る。(老婆心ながら、VNCサーバーの前にブロードバンドルーターがある場合は、590xポートを空ける必要がある。)
    VNCビューアの設定
  3. HTTPortを起動し、「Port mapping」タブを選択する。
  4. 「Add」ボタンを押す。
  5. 左に「New mapping」というツリーが表示されるので、右クリックして「Edit」を選択、名前を「VNC」に変更する。
  6. 同様に「Local port」の「0」を「590x」に変更する。
  7. 同様に「Remote host」の「remote.host.name」を接続先のVNCサーバー名に変更する。
  8. 同様に「Remote port」の「0」を「590x」に変更する。
    VNCビューアのマッピング設定

エ)ブラウザ(InternetExplorer5)
 ブラウザの場合は、不特定のサイトへ接続するので、固定的なポートマッピングではなく「SOCKSサーバー」を経由する。HTTPortにはSOCKS4サーバーが内蔵されている。

  1. IEのメニューから「ツール→インターネットオプション」を選択する。
  2. 「接続」タブを選択し、「LANの設定」ボタンを押す。
  3. 「プロキシサーバー」欄にある「詳細」ボタンを押す。
  4. 「サーバー」欄の一番下に「Socks」があるので、そこへ「localhost」と入力し、ポートへ「1080」と入力する。灰色で入力できないときは、「全てのプロトコルに同じプロキシサーバーを使用する」のチェックを外す。
  5. 「HTTP」の欄のアドレスとポートを削除する。
    IEのプロキシ設定
  6. 全部のウィンドウを「OK」ボタンを押して閉じる。
  7. HTTPortを起動し、「Port mapping」タブを選択する。
  8. 「Built-in SOCKS4 server」の「Run SOCKS server(port 1080)」にチェックを入れる。

オ)その他
 上記例のように、接続先が決まっている場合はポートマッピングを、不特定ならばSOCKSを使用する。ただしSOCKSに対応していないソフトの場合は、ポートマッピングを使用する。他のソフトに関しては、HTTPortのFAQページを参照して欲しい。英語で書かれているが、つなぎたい一心があれば解読できるだろう。



8.接続してみよう

 接続するには、Proxyタブの右下にある「Start」ボタンを押す。あとは使用したいソフトを立ち上げて普通に接続するだけだ。Port mappingタブで作成した名前をクリックすると、真中に送受信したデータのバイト数が表示されるので、うまく接続していると分かる。
スタート 接続状況

 いかがだろうか。無事接続できたときの喜びは感動的だ。なお、プロキシ管理者の接続制限をすり抜けているわけだから、決して口外してはならない。同僚や愛する人にさえ言ってはならない。なんせ会社のセキュリティーを突破しているわけだから。運悪く見つかった場合は(うしろから覗き見されるなど案外ばれやすい)、やはり相応の覚悟は必要だ。
 なお、SSLを使用しているといっても送受信するデータは暗号化されない。あくまでもプロキシに対してトンネルを作成させるために、SSLの「CONNECT」を利用しているにすぎない。

<うまくつながらない場合>

  1. Systemタブを選択し、下にある「Also display server message and warnings(サーバーからのメッセージと警告も表示する)」にチェックを入れる。
  2. 再度接続すると、何らかのメッセージが表示されるはずだ。

 その他のエラーは、、HTTPortのFAQページを参照して欲しい。



9.Remote Hostの使用

 運悪くSSLトンネルをサポートしないプロキシの場合は、次の手段として「Remote Host」を使用する。これは、HTTPort独自の機能で、HTTPort専用の公開サーバーに接続し、そこから目的のサーバーへ代理で接続してもらう手法だ。これならばSSL方式を使わずにに通信が出来る。

 接続の流れは以下のようになる。

使いたいソフト→HTTPort(Remote Hostモード)→プロキシ→【インターネット】
→Remote Hostサーバー→目的の接続先

 設定方法は以下の通り。

  1. HTTPortを起動して「Proxy」タブを選択する。
  2. 真中の「Proxy options」の右下に「Bypass mode」欄があるので、「Remote host」に設定する。
  3. もし「Use personal remote host at」に何か入力されていたら、空欄にしておく。
    HTTPortのRemote Host設定

 とまあ、非常に簡単に設定できる。これで自動的に公開Remote Hostに接続してくれる。早速つないでみて欲しいが、実はこの公開Remote Hostは非常に速度が遅い。かなり込み合っているそうだ。メールの送受信くらいならなんとか我慢すれば問題ないが、リアルタイム性を要求されるソフトの場合は使い物にならない。また、公開サーバーはFTP接続をサポートしていない(ちなみにシェアウェア登録すると専用サーバーに接続するため、速度が速くなってFTP制限も解除されるとのこと)。
 そのため、速度を求めたりFTPを使用したければ、自分専用の「Personal Remote Host」を作る必要がある。ただし自分でサーバーを1台設置する必要があるため、多少の手間はかかる。

<Personal Remote Hostの作り方>
※注意:プロバイダからプライベートIPアドレスが割り当てられている場合は、作成できない。グローバルIPアドレスが必要。

  1. サーバーを1台設置する。とはいっても専用サーバーである必要はなく、普段使っているパソコンでもよい。要は常時接続で電源が入りっぱなしのパソコンを設置できればよい(使い古しのノートPCなど)。
  2. HTTHostをダウンロードする。
  3. 使用するサーバーでHTTHostを起動し、「Options」タブを選択する。
  4. 一番上の項目の「Bind listning to IP」の横にある「Port」に任意のポート番号を入力する。80番が推奨されているが、超えたいプロキシがポート制限をしていなければ何番でもよい。
  5. すぐ下の「Personal password」に任意のパスワードを入力する。
  6. 「Apply」ボタンを押す。
    HTTHost設定
  7. ブロードバンドルーターやファイアーウォールソフトの設定で、HTTHostと同じポートを空けておく。
  8. フレッツADSLなどを利用する場合はIPアドレスが変わるため、フリーのDynamicDNSに登録して固定のホスト名を取得する。さらに、フリーソフトの「DiCE」を利用して、IPアドレスが変わった場合にDynamicDNSへ自動再登録するようにしておく。
  9. HTTPortを起動し、「Proxy」タブを選択する。
  10. 一番下の「Use personal remote host at」に作成したサーバーのグローバルIPアドレス、HTTHostで設定したポートとパスワードを入力する。
    HTTPortのPersonal Remote Host設定

 これでプライベートリモートホスト経由で接続できるようになる。これでも遅いが、なんとか耐えられる範囲にはなる。

 初めてサーバーを立てる人にとっては上記の説明だけでは何を言っているのか分からないだろう。「DynamicDNS」「家庭内サーバー」辺りで検索して調べてほしい。どうしても無理な場合は、PCに詳しくて常時接続な友人・知人をまるめこんで、友人宅に設置してもらうのも手だ。

 <HTTP CONNECTサポートエラーが出る場合>
 HTTPortを全く初めて使用するとき、エラーメッセージに「CONNECT failed with retcode 503 (service unavailable) - your proxy does not support HTTP CONNECT method」と表示されてつながらない場合がある。これは、プロキシがHTTP CONNECTをサポートしていないためにSSLトンネルを作れないという意味だ。
 こうなるとRemoteHostを経由するしかないが、一度だけPersonal Remote Hostを作成してここを経由させれば、次回からはエラーが出ずにSSLトンネルを使って通信できることがある。一度だけで構わない(使うたびにRemoteHost経由する必要はない)ので、試してみる価値はある。

 <VNCを使用する場合>
 VNCビューアを起動すると「Local loop-back connections are disabled.」というメッセージが表示される場合がある。
Loopbackの警告
 この場合は、以下の設定をサーバー側のレジストリに加える。

REGEDIT4

[HKEY_LOCAL_MACHINE\SOFTWARE\ORL\WinVNC3]
"AllowLoopback"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\ORL\WinVNC3\Default]
"AllowLoopback"=dword:00000001




10.まとめ

 いかがだったろうか。通信に関する多少の知識は必要だが、つなぎたい一心があればそんなに難しくはない。
 通信方式に関しては、なるべくSSL方式を模索してほしい。RemoteHost方式だと通信内容がプロキシの接続ログに残る可能性がある。
 再度念を押すが、本来制限されていることを突破しているのだから、慎重に行って欲しい。周囲に覗き見(ちらっと見)する人間がいないことを確認してから接続すべきだ。決してWinMXなどやらないように。相手に会社のIPアドレスが丸見えだ。

 つながらない場合は、HTTPortのFAQや掲示板を頑張って読んで欲しい。

 ※質問などは一切受け付けておりません。

表紙へ戻る


Copyright © 2002-2003 H'Imagine.
All rights reserved.