google 等の検索エンジンからこのページへ来た方へ
お手数ですがトップページの 注意書きをお読み下さい。
IP アドレス、ドメイン名等は全て仮のものです。

前ふり

Proxy サーバは、クライアントからの HTTP や FTP などの要求を中継して目的のサーバにアクセスして、 その結果をまた中継してクライアントに返します。
言うなれば「代理人」といったところでしょうか。
データの流れは次の図のようになります。

proxy のイメージ

(1) クライアントが WWW サーバや FTP サーバにアクセスしようとすると、 まず Proxy サーバにアクセス要求を出します。
(2) これを受けて Proxy サーバは目的のサーバにアクセスします。
(3) Proxy サーバは目的のサーバからデータを受け取ります。
(4) Proxy サーバはクライアントにデータを渡します。

Proxy を使うメリットは (1) インターネットに直接つながっていないマシンからの要求を、 インターネットに中継する。
(2) Proxy サーバ上で過去の要求とその結果をキャッシュすることで、 回線のトラフィックを減少し、 アクセス効率を上げることができる。
(3) クライアントからの不適切な要求に対し、 フィルタをかけることができる。

もっとも (1) については NAT を使えば解決できるので、 それほど大きなメリットにならないかもしれません。
(2) は過去のアクセス結果を蓄えておけば、 あとで同じ要求があった時にデータをインターネットに要求せずに済むので、 アクセス効率を上げることができます。
(3) はクライアントにアクセスさせたくない URL などをリストアップしておくことで、 ユーザからの要求をフィルタリングし、 アクセス制限をかけることをできます。

Proxy にサーバには各種ありますが、今回は Squid を使います。

Squid のインストール & 設定

Squid は FreeBSD の ports (package) に入っています。
ですので、インストールは非常に簡単です (今回は ports を例に説明します)。
なお、 squid-2.4.STABLE6 以降のバージョンを使用して下さい。
これ以前のバージョンにはセキュリティホールが存在します。
最新の ports は squid-2.4.STABLE7 (以降) を使用するようになっています。

    # cd /usr/ports/www/squid24
    # make install

これでソースを取ってきて、コンパイルして、インストールまでしてくれます。
次に設定ファイル /usr/local/etc/squid/squid.conf を編集します。
最低限設定しておいた方が良い (と思われる) ものを以下に示します (行頭の数字は説明のために入れたものです。 実際には入力しません)。

 1:  hierarchy_stoplist cgi-bin ?
 2:  acl QUERY urlpath_regex cgi-bin \?
 3:  no_cache deny QUERY
 4:  cache_dir ufs /var/spool/squid 512 16 256
 5:  cache_access_log /var/log/squid/access.log
 6:  cache_log /var/log/squid/cache.log
 7:  cache_store_log /var/log/squid/store.log
 8:  pid_filename /var/run/squid.pid
 9:  cache_mgr webmaster
10:  cache_effective_user www
11:  cache_effective_group www
12:  ftp_user hoge@provider.xx.jp
13:  http_port 3128
14:  acl all src 0.0.0.0/0.0.0.0
15:  acl localnet src 192.168.0.0/24
16:  http_access allow localnet
17:  http_access deny all

1〜3 行目はとりあえずこうしておいてください。

4 行目はキャッシュデータを格納するのディレクトリとその容量です。
ここでは /var/spool/squid 以下にキャッシュデータを格納します。
その後の数字はキャッシュディレクトリの容量に関する設定です。
"512" の部分を変更するとキャッシュの容量を変更できます。
"1024" とすれば、 1GB になります。
当然ながら、キャッシュディレクトリを作成するファイルシステムには、 十分な空き容量が必要です。

5〜8 行目はログファイル等に関する設定です。
9 行目は squid がクラッシュしたときにメールを受け取る、 ローカルキャッシュマネージャのメールアドレスです。
デフォルトは webmaster です。

10〜11 行目は squid を実行するユーザです。
セキュリティ上、 squid は root で起動した場合に、 そのプロセスの所有者をここで指定した UID と GID のユーザに変更します。
また当然のことながら、 この UID と GID がシステムに存在する必要があります。
なお、 この項目は必ず設定する必要があります。

12 行目は anonymous FTP でのログインパスワードとなるメールアドレスです。
13 行目はクライアントからの接続を受け付けるポートを指定します。
デフォルトは 3128 です。

14〜17 行目はアクセス制御に関する設定です。
15, 16 行目で IP アドレスが 192.168.0.0/24 のネットワークからのアクセスを許可します。
14, 17 行目でこれ以外の全てのネットワークからのアクセスを拒否します。

次にキャッシュディレクトリとログディレクトリを作成します。

    # mkdir /var/spool/squid
    # mkdir /var/log/squid
    # chown www:www /var/spool/squid
    # chown www:www /var/log/squid

そうしたら、キャッシュディレクトリを初期化します。
しばらくすると完了します。

    # /usr/local/sbin/squid -z

squid を起動します。

    # /usr/local/etc/rc.d/squid.sh start

あとはクライアント (ブラウザ) を proxy 経由になるように設定すれば完了です。
Internet Exploer は 「ツール」→「インターネットオプション」→「接続」→「LAN の設定」 で、 Netscape は 「編集」→「設定」→「詳細」をダブルクリック→「プロキシ」 で、 Opera は 「ファイル」→「設定」→「ネットワーク」 で設定できます (全て Windows 版)。

2003/02/10 追記
/usr/local/bin/squid -k rotate
を実行することで、 squid のログをローテートすることができます。
自動で行なわせるには、 /etc/crontab に
0 5 * * * root /usr/local/sbin/squid -k rotate
などと (上記の例では毎朝 5 時) 書けば、 自動でログをローテートします。

クライアントの情報漏洩に手を加える

実はこのままだと ローカルの IP アドレスなんかが丸見え になっています。
これらは squid.conf に次の設定を追加することにより、 ある程度は抑制することが可能です (行番号は先程の続きです)。

18: forwarded_for off
19: visible_hostname unknown
20: fake_user_agent Nutscrape/1.0 (CP/M; 8-bit)
21: anonymize_headers deny From Referer Server
22: anonymize_headers deny User-Agent WWW-Authenticate Link

18 行目の設定で squid はクライアントのローカル IP を http サーバに渡さなくなります。
19 行目はエラーメッセージなどに表示するホスト名を設定します。
20 行目の設定でクライアントの種類に関わらず、 ここに書かれている文字列が http サーバの環境変数 HTTP_USER_AGENT に渡されます。
21 行目以降は http サーバへの要求に対して、 どのヘッダを取り除くか (または許可するか) 設定します。
/usr/local/etc/squid/squid.conf.default に、 この anonymize_headers タグの設定例があります。

ただし、上の設定はやりすぎると Web ページに設置されているカウンターが動かない、 http サーバからアクセスを拒否される、 などの弊害が出るので注意が必要です。

Top Top へ戻る