平成15年08月07日(木)

FreeBSDでproxyサーバー


またまた実験してみました。自宅内にWebProxyサーバーを構築しました。
先に構築したWindows2000 ProとDeleGateを使ったproxy(CPU:133MHz MEM:48Mbyte)では下り1.7MbpsでしたがFreeBSDとApacheを使ったproxy(CPU:33MHz MEM:16Mbyte)では下り2.3Mbps出ました。超々低スペックですがUNIXは軽快ですね!
proxyサーバーを通さない時は3.3Mbps出ています。
わざわざ遅くするなんて馬鹿みたいですけど、実験好きなのでしょうがないです。

参考にしたサイト: F.KIMURAのほーむぺーじ本店

JAPACHE!-mod_proxyモジュール

【はじめに】

Proxy (代理) Server とあるように、PCユーザーが外部サーバと情報のやり取りをする際、文字通りPCユーザーの代わりとなって目的のサーバにアクセスしてくれるサーバー、一種の中継サーバの事です。
proxyサーバー自身のローカルディスクにデータを一時保管 (キャッシュ) し、同じ情報を要求されるとそこから取り出すので高速で処理でき、またネット全体のトラフィックを軽減する効果があります。 (ただしキャッシュの存在しない新規外部サーバーとの情報のやり取りでは、当然ながら通信速度は遅くなります)。

 PCユーザが外部サーバと情報のやり取りをする際、PCユーザー(接続元) は外部サーバー (接続先) へ自分の環境変数 (IP、REMOTE_HOST 名、USER_AGENT 名 ブラウザの種類、アクセスした日時等) を送信しています。
 これは例えるなら、大雑把な住所氏名を書いた名札を胸につけて、街を歩いているような感じです。
 普通に利用している場合なら別にこれらの情報は相手に伝わっても特に問題はありませんが、相手 (接続先) に悪意があり、こちらのこうした情報を悪用しようとしていたら、少しばかり問題が生じます。

 特定のブラウザの特定のバージョンには、外部からアタック可能なセキュリティーホールが存在しています。
  IP アドレスが固定で常時接続環境だと思われるものだったら…ひょっとしたらネットクラッカーがやってきて、あなたのパソコンにイタズラしたり、あるいは中身をごそっと抜き取っていくかも知れません。
 ごく普通の一般ユーザーならクラッカーもメリットを感じず侵入しないかも知れませんが、企業や省庁役所、大学の端末からの情報だったら…。
 Cookie にハンドルやパスワード、メールアドレスが残っていたら、これも抜き取られ悪用されるかも知れません。

 プロクシサーバを経由すれば、プロクシサーバにはこちらの情報は伝わりますが、その先の相手には、プロクシサーバーの情報しか伝わりません (設定やプロクシサーバーの種類にもよるようです)。
 ブロードバンドの普及とともにネット上のセキュリティ確保が重要視されていますが、安全なプロクシサーバーを自分の代理とする事で、より安全なWeb閲覧が可能になります。

 あなたのPCが送信している情報の確認は、「確認くん」で、確認する事が出来ます。

【自宅のWebProxy活用イメージ】

こんな感じです。

【導入の準備】

先にルータとして構築し活用しているPCにApacheをインストールしました。
Apacheのmod_proxyを使います。FreeBSD 4.5-Release で Apache Version 1.3.XXで導入しました。
導入は例によってpackagesを使いクライアントPCをFTPサーバーにして実施しました。この場合はhttpd.conf を修正するだけで使用することができます。以下は該当部分だけを抜粋してあります。
なお、CacheRootのディレクトリ(/usr/local/www/proxy)は事前に作成しておきました。(Apacheのオーナーが書き込めるパーミッションも設定しました)
またApacheのポートは8085にしました。
※ソースからコンパイルする時はmod_proxyの準備とコンパイル時にmod_proxyを導入する引数が要るようです。

【環境設定】

[ /usr/local/etc/apache/httpd.conf ]
#
# Proxy Server directives. Uncomment the following lines to
# enable the proxy server:
#
<IfModule mod_proxy.c>
    ProxyRequests On
# プロキシを使うことができる範囲を指定します。
    <Directory proxy:*>
        Order deny,allow
        Deny from all
        Allow from all
    </Directory>
# RFC2068に指定されるVIAの設定。viaを消したいのでデフォルトを使います。
    #
    # Enable/disable the handling of HTTP/1.1 "Via:" headers.
    # ("Full" adds the server version; "Block" removes all outgoing Via: headers)
    # Set to one of: Off | On | Full | Block
    #
#    ProxyVia On
    #
    # To enable the cache as well, edit and uncomment the following lines:
    # (no cacheing without CacheRoot)
    #
    CacheRoot "/usr/local/www/proxy"
# キャッシュのサイズを書きます。単位はKbyteです。
    CacheSize 500
# キャッシュのチェックの間隔
    CacheGcInterval 4
# 有効期限
    CacheMaxExpire 24
    CacheLastModifiedFactor 0.1
    CacheDefaultExpire 1
# キャッシュをさせたくないドメインやIPアドレスを書きます。
# NoCache a_domain.com another_domain.edu joes.garage_sale.com

</IfModule>
# End of proxy directives.
少しでもはやく処理できるようにhttpd-access.logとhttpd-error.logの出力をリマークして止めサーバー負荷を軽減しました。
※外部公開サーバーでないので・・・・・・まあいいか!

※httpd-error.logはリマークしても重要なエラーは出力するようです。

【クライアントのWebブラウザ設定】

IEの設定を以下のようにしました。(アドレスにはproxyサーバーのipアドレスを入力します)
IE6のインターネット・オプションです。
「次で始まるアドレスにはプロキシを使用しない(N)」に自宅サーバーのドメイン名を入力しておかないと、例によってルータの認証画面が表示されてしまいます。
プロキシの設定です。

【戻る】

サイトトップへ