<!doctype linuxdoctr system>

<article>

<title>squid による透過型プロキシ
<!-- 
Transparent Proxy with Squid mini-HOWTO
-->
</title>

<author>Daniel Kiracofe</author>
<date>v1.3, January 2001</date>
<trans>早川 仁(cz8cb01@linux.or.jp)
<tdate>V1.3j, 2001年02月17日

<abstract>
<!-- 
This document provides information on how to setup a transparent caching
HTTP proxy server using only Linux and squid.
-->
このドキュメントは Linux と squid だけで透過型の 
HTTP キャッシングプロキシサーバーを構築する方法について説明します。
</abstract>

<toc>

<sect>
<!-- 
Introduction
-->
イントロダクション
<sect1>
<!-- 
Comments
-->
ご意見
<p>
<!-- 
Comments and general feedback on this mini HOWTO are welcome and can be
directed to its author, Daniel Kiracofe, at drk@unxsoft.com. 
-->
この mini HOWTO に関するご意見やフィードバックを歓迎します。著者である 
Daniel Kiracofe(drk@unxsoft.com) に直接送ってもらって構いません。
</p>
<sect1>
Copyrights and Trademarks 
<p>
Copyright 2000-2001 by UnxSoft Ltd (www.unxsoft.com)
</p>
<p>
（訳注：読者の利便を考え日本語訳を併記しますが、原文の Copyright が優先します）
</p>
<p>
This manual may be reproduced in whole or in part, without fee, subject
 to the following restrictions: 
</p>
<p>
以下の条件を満たせば、この文書の全体または一部分を無償で配布できます。
</p>
<p>
<itemize>
 <item>
The copyright notice above and this permission notice must be preserved
 complete on all complete or partial copies 
 <item>
Translation to another language is permitted, provided that the author
is notified prior to the translation.
 <item>
Any derived work must be approved by the author in writing
 before distribution. 
 <item>
If you distribute this work in part, instructions for obtaining the complete
 version of this manual must be included, and a means for obtaining a complete
 version provided. 
 <item>
Small portions may be reproduced as illustrations for reviews or quotes
 in other works without this permission notice if proper citation is given.
</itemize>
<itemize>
<item> すべての完全な、もしくは部分的なコピーに
上記の著作権表示とこの許可告知が完全に保存されていなければならない。
<item>他の言語に翻訳する際は事前に著者に通知すること。
<item>このドキュメントの派生物を作る場合、配布の前に著者に承認を得ること。
<item>このドキュメントの一部分を配布する場合は、
完全な版を入手する方法およびそのための手順を提供しなければならない。
<item>もし適切な引用元が表示されているならば、この許可告知なしで
ドキュメントの短かい部分を他の文書中の論評や引用で例として複製しても良い。
</itemize>
</p><p>
Exceptions to these rules may be granted for academic purposes: Write to
 the author and ask. These restrictions are here to protect us as authors, not
 to restrict you as learners and educators. Any source code (aside from the
 SGML this document was written in) in this document is placed under the GNU
 General Public License, available via anonymous FTP from the GNU archive.
</p>
<p>
教育目的の場合はこれらのルールに例外が認められることがありますから、著者に
連絡して尋ねてください。これらの制限は著者である我々を守るためのもので、学習
者および教育者のみなさんを制限するためのものではありません。このドキュメント
のすべてのソースコード (このドキュメントが書かれている SGML は除く) は 
GNU General Public License の下にあります。GPL は GNU アーカイブから 
anonymous FTP で入手できます。
</p>
<sect1>
&num;include &lt;disclaimer.h&gt;
<p>
<!-- 
No warranty, expressed or implied, etc, etc, etc...
-->
明示的、暗黙的に関わらず、無保証です。
</p>

<sect1>翻訳者謝辞
<p>
翻訳の際には以下の方々に多数の有益なコメント、校正をしていただきました。
ありがとうございました。

<itemize>
<item>加茂智之さん
<item>佐野武俊さん
<item>山下義之さん
<item>武井伸光さん
<item>中野武雄さん
</itemize>
</sect>

<sect>
<!-- 
Overview of Transparent Proxying
-->
透過型プロキシの概要

<sect1>
<!-- 
Motivation
-->
使う理由

<p>
<!-- 
In ``ordinary'' proxying, the client specifies the hostname and port number
 of a proxy in his web browsing software. The browser then makes requests to
 the proxy, and the proxy forwards them to the origin servers. This is all fine
 and good, but sometimes one of several situations arise. Either
-->
``通常'' プロキシを利用するには、利用者が web ブラウザでプロキシのホスト名と
ポート番号を指定します。ブラウザはプロキシにリクエストを行ない、次にプロキシはその
リクエストをアクセスされたサーバーへ転送します。
通常はこれで問題なく動きますが、時には以下のような場面に出くわすこともあります。
</p>
<p>
<itemize>
 <item>
<!-- 
You want to force clients on your network to use the proxy, whether they
 want to or not.
-->
有無を言わさず、ネットワークの利用者にプロキシを使わせるようにしたい。
 <item>
<!-- 
You want clients to use a proxy, but don't want them to know they're being
 proxied.
-->
利用者にプロキシを使わせたいが、プロキシを利用しているということを
知らせたくない。
 <item>
<!-- 
You want clients to be proxied, but don't want to go to all the work of
 updating the settings in hundreds or thousands of web browsers.
-->
利用者にプロキシを使わせたいが、何百、何千台という web ブラウザの設定を変更す
る手間をかけたくない。
</itemize>
</p><p>
<!-- 
This is where transparent proxying comes in. A web request can be intercepted
 by the proxy, transparently. That is, as far as the client software knows,
 it is talking to the origin server itself, when it is really talking to
 the proxy server.
-->
こういった場合に透過型プロキシが役立ちます。これを使うと web へのリクエ
ストをプロキシで透過的に扱うことができます。つまり利用者のソフトウェア
からは相手先のサーバーへ直接接続しているように見えますが、実際にはプロキ
シサーバーへと接続されています。
</p>
<p>
<!-- 
Cisco routers support transparent proxying. So do many switches. But, 
(surprisingly enough)
 Linux can act as a router, and can perform transparent proxying by redirecting
 TCP connections to local ports. However, we also need to make our web proxy
 aware of the affect of the redirection, so that it can make connections to
 the proper origin servers. There are two general ways this works:
-->
Cisco のルーターは多くのスイッチと同様に透過型のプロキシをサポートしていますが、Linux もルーター
として利用できる上に TCP のコネクションをローカルポートへリダイレクトすれ
ば透過型プロキシとして動作します。ですが web プロキシが適切な相手先のサー
バーに接続できるようにするためには、リダイレクトされていることを web プロ
キシに認識させる作業も必要となります。これには一般に以下の2 つの方法が用い
られます。
</p>
<p>
<!-- 
The first is when your web proxy is not transparent proxy aware. You can
 use a nifty little daemon called transproxy that sits in front of your web
 proxy and takes care of all the messy details for you. transproxy was written
 by John Saunders, and is available from 
<htmlurl url="ftp://ftp.nlc.net.au/pub/linux/www/" name="ftp://ftp.nlc.net.au/pub/linux/www/">
 or your local metalab mirror. transproxy will not be discussed further in this
 document.
-->
ご利用の web プロキシが透過型プロキシとして利用できない時は、web プロキ
シの前に全てのややこしい作業を代わりにやってくれる、transproxy という名
前のデーモンを利用できます。transproxy は John Saunders によって書かれま
した。これは <url url="ftp://ftp.nlc.net.au/pub/unix/transproxy/"> や
metalab のミラーから入手できます。transproxy についてはこのドキュメントで
は述べません。

(訳注：transproxy の web サイトは <url
url="http://www.transproxy.nlc.net.au/"> にあります)
</p>

<!-- (cz) ftp サイトのアドレスは移動してるので、変更してあります。-->

<p>
<!-- 
A cleaner solution is to get a web proxy that is aware of transparent proxying
 itself. The one we are going to focus on here is squid. Squid is an Open Source
 caching proxy server for Unix systems. It is available from <htmlurl url="http://www.squid-cache.org" name="www.squid-cache.org">
-->
より良い解決方法は、透過型プロキシとして利用できる web プロキシを入手す
ることです。ここで説明するのは squid です。squid はオープンソース
の Unix 用キャッシングプロキシサーバーで、<url
url="http://www.squid-cache.org"> から入手できます。
</p>
<sect1>
<!-- 
Scope of this document
-->
このドキュメントで取り扱う範囲
<p>
<!-- 
This document will focus on squid version 2.3 and linux kernel version
 2.4, the most current stable releases as of this writing (Jan 2001). It should
 also work with squids as early as 2.0, and most of the later 2.3 kernels.
 If you need information about earlier releases, you may find some earlier 
 documents at <htmlurl url="http://www.unxsoft.com" name="www.unxsoft.com">. 
-->
このドキュメントでは執筆時点(2001年01月)で最新の安定版である squid バー
ジョン 2.3 および Linux カーネルバージョン 2.4 について述べていきますが、
squid 2.0 や Linux カーネル 2.3 でもこのドキュメントの内容が通用するはず
です。それ以前のリリース版での情報が必要であれば <url
url="http://www.unxsoft.com"> からドキュメントを入手できます。

(訳注：翻訳時点(2001年02月)での安定版は squid 2.3 と カーネル 2.2.18/2.4.1 です)
</p>
<p>
<!-- 
If you want to use linux 2.3, you will have to use a thing called netfilter
 instead of ipchains. However, it is assumed that if you are running a development
 kernel, you can figure out netfilter on your own from the provided documentation.
 If not, you really shouldn't be running a development kernel (trust me on this).
 Once linux 2.4 is released, this document will be updated to cover netfilter.
Linux 2.3 を使う時には、ipchains の代わりに netfilter というものを使う必要
があります。ですが開発版のカーネルを使っているような方なら、netfilter に
関しては付属のドキュメントを読んで自力で理解できるでしょう。理解できない
のであれば開発版カーネルは使うべきではありません(本当ですよ。信じてく
ださい)。Linux 2.4 がリリースされたら netfilter についての記述をこのド
キュメントにも加えます。
-->
<!-- 
If you are using a development kernel or a development version of squid, you are on your own.  This document may help you, but YMMV.
-->
開発版のカーネルや squid を使う場合、自身の責任で使うようにしてください。
このドキュメントが助けになるかもしれませんが、保証はできません。
</p>
<p>
<!-- 
Note that this document focuses only on HTTP proxing.  I get many emails asking
about transparent FTP proxying. While it may not be theoretically impossible
to proxy FTP transparently, it is MUCH harder than HTTP, and I do not know 
of any currently available tools that can do it.  If you can figure it out, I
suggest you write your own HOWTO...
-->
このドキュメントでは HTTP のプロキシだけを扱います。透過型 FTP プロキシに
関する質問の email をたくさんもらいました。理論的には透過型 FTP プロキシは
不可能ではありませんが HTTP より*かなり*難しいですし、そのためにいま利用で
きるツールについて知りません。もし方法がわかった場合は、あなた自身で
HOWTO 文書を執筆することをお勧めします。

</p>
<sect>
<!-- 
Configuring the Kernel
-->
カーネルの設定

<p>
<!-- 
First, we need to make sure all the proper options are set in your kernel.
 If you are using a stock kernel from your distribution, transparent proxying
 may or may not be enabled.
 If you are unsure, the best way to tell is to simply skip this section, and
 if the commands in the next section give you weird errors, it's probably because
 the kernel wasn't configured properly.
-->
まず、カーネルに適切なオプションが指定されていることを確認する必要があり
ます。ディストリビューションに同梱されているカーネルを使っている場合には、
透過型プロキシが無効になっているかもしれません。よく分からない時にはこの
セクションは読み飛ばしてしまうのが良いでしょう。次のセクションで実行する
コマンドが妙なエラーを出力した場合、おそらくカーネルが正しく設定されてい
ません。
</p>

<p>
(訳注： Debian (potato) のカーネルでも、無効になっているそうです)
</p>

<p>
<!-- 
If your kernel is not configured for transparent proxying, you will need
 to recompile. Recompiling a kernel is a complex process (at least at first),
 and it is beyond the scope of this document. If you need help compiling a kernel,
 please see <htmlurl url="http://metalab.unc.edu/pub/Linux/docs/HOWTO/Kernel-HOWTO" name="The Kernel HOWTO">
-->
透過型プロキシを使えるようにカーネルが設定されていない時には再コンパイルす
る必要があります。カーネルの再コンパイルの手続きはややこしく(少なくとも、
初めての人には)、またこのドキュメントの範疇ではありません。カーネルコンパ
イルに関する情報が必要でしたら <url
url="http://metalab.unc.edu/pub/Linux/docs/HOWTO/Kernel-HOWTO"> を参照して
ください。

(訳注： 日本語訳は <url
url="http://www.linux.or.jp/JF/JFdocs/Kernel-HOWTO.html"> にあります)
</p>
<p>
<!-- 
The options you need to set in your configuration are as follows (Note:
 none of these can be built as modules)
-->
設定する必要のある項目は次の通りです(どれもモジュールにすることはできません)。
</p>
<p>
<itemize>
 <item>
<!-- 
Networking support
-->
Networking support(カーネル2.4のみ)
 <item>
Sysctl support
 <item>
<!-- 
Network packet filtering
-->
Network packet filtering(カーネル2.4のみ)
 <item>
TCP/IP networking
 <item>
<!-- 
Connection tracking (Under ``IP: Netfilter Configuration'' in menuconfig)
-->
Connection tracking (menuconfig の``IP: Netfilter Configuration''の下で
す)(カーネル2.4のみ)
<item>
IP: firewalling(カーネル2.2のみ)
 <item>
<!-- 
IP tables support 
-->
IP tables support(カーネル2.4のみ)
<item>
IP: always defragment(カーネル2.2のみ)
 <item>
<!-- 
Full NAT
-->
Full NAT(カーネル2.4のみ)
 <item>
IP: transparent proxy support(カーネル2.2のみ)
<item>
<!-- 
REDIRECT target support
-->
REDIRECT target support(カーネル2.4のみ)
 <item>
/proc filesystem support
</itemize>
<!-- 
You must say NO to ``Fast switching''
-->
``Fast switching''は NO にする必要があります(カーネル2.4のみ)
</p><p>
<!-- 
Once you have your new kernel up and running, you may need to enable IP
 forwarding. IP forwarding allows your computer to act as a router. Since this
 is not what the average user wants to do, it is off by default and must be
 explicitly enabled at run-time. However, your distribution might do this for
 you already. To check, do ``cat /proc/sys/net/ipv4/ip_forward''. If you see
 ``1'' you're good. Otherwise, do ``echo '1' &gt; /proc/sys/net/ipv4/ip_forward''.
 You will then want to add that command to your appropriate bootup scripts (depending on your distribution, these may live in /etc/rc.d, /etc/init.d, or maybe somewhere else entirely).
-->
作成したカーネルから起動したら IP フォワーディングを有効にする必要があるで
しょう。IP フォワーディングするとマシンをルーターとして動作します。普通の
ユーザーはこの機能が必要ないため、デフォルトではこの機能は無効になっていま
すから、実行時に明示的に有効にする必要があります。ただしディストリビューショ
ンによっては既に有効になっているかもしれません。確認するには ``cat 
/proc/sys/net/ipv4/ip_forward'' を実行します。``1'' が表示されれば有効になっ
ています。そうでなかったなら ``echo '1' &gt;
/proc/sys/net/ipv4/ip_forward'' を実行します。そして /etc/rc.d/ にある起動
時に実行されるスクリプトにこのコマンドを追加すると良いでしょう。

(訳注：Redhat 系であれば /etc/rc.d/rc.local に記述するか、あるいは
/etc/sysconfig/network で FORWARD_IPV4=true を記述しておけば良いでしょう。
Debian の場合、potato 以前の場合は上記と同様に ``echo '1' &gt;
/proc/sys/net/ipv4/ip_forward'' を実行します。potato 以降では 
/etc/network/options に ip_forward=no というのがあるので、ここを 
ip_forward=yes に変更すれば /etc/init.d/networking というスクリプトが 
``echo '1' &gt; /proc/sys/net/ipv4/ip_forward'' をやってくれます)
</p>
<sect>
<!-- 
Setting up squid
-->
squid の設定
<p>
<!-- 
Now, we need to get squid up and running. Download the latest source tarball
from <htmlurl url="http://www.squid-cache.org" name="www.squid-cache.org">.
Make sure you get a STABLE version, not a DEVEL version.
 The latest as of this writing was squid-2.3.STABLE4.tar.gz.
-->
squid を設定し、実行しましょう。最新の tarball を <url
url="http://www.squid-cache.org"> からダウンロードします。開発版である DEVEL バー
ジョンではなく、安定版である STABLE バージョンであることを確認してください。
執筆時点(2001年02月)の最新版は squid-2.3.STABLE4.tar.gz です。
</p>
<p>
<!-- 
Now, untar and gunzip the archive (use ``tar -xzf &lt;filename&gt;'').
 Run the autoconfiguration script (``./configure''), compile (``make'') and
 then install (``make install''). 
-->
さて、ダウンロードしたファイルを(``tar -xzf &lt;ファイル名&gt;'' を使用し
て)展開して autoconf スクリプト(``./configure'') を実行し、コンパイル
(``make'')してインストール(``make install'')しましょう。
</p>
<p>
<!-- 
Now, we need to edit the default squid.conf file (installed to /usr/local/squid/etc/squid.conf, unless you changed the defaults). The squid.conf file is heavily
 commented. In fact, some of the best documentation available for squid is in
 the squid.conf file. After you get it all up and running, you should go back
 and reread the whole thing. But for now, let's just get the minimum required.
 Find the following directives, uncomment them, and change them to the 
 appropriate values:
-->
次にデフォルトの squid.conf ファイル(変更しない限りインストール先は
/usr/local/squid/etc/squid.conf です)を編集します。squid.conf には非常に多く
のコメントが含まれています。実際、squid に関する最も良いドキュメントは
squid.conf です。全ての設定が終わり起動した後に、もう一度全体を読みなおし
た方が良いですが、今の所は最小限の設定だけを行ないましょう。次のようなディ
レクティブを探してコメント(行頭の &num;)を外し、適切な値に変更します。
</p>
<p>
<itemize>
 <item>
httpd_accel_host virtual
 <item>
httpd_accel_port 80
 <item>
httpd_accel_with_proxy on
<item>
httpd_accel_uses_host_header on
</itemize>
</p><p>
<!-- 
Finally, look at the http_access directive. The default is usually ``http_access
 deny all''. This will prevent anyone from accessing squid. For now, you can
 change this to ``http_access allow all'', but once it is working, you will
 probably want to read the directions on ACLs (Access Control Lists), and setup
 the cache such that only people on your local network (or whatever) can access
 the cache. This may seem silly, but you should put some kind of restrictions
 on access to your cache. People behind filtering firewalls (such as porn 
 filters, or filters in nations where speech is not very free) often ``hijack'' onto
 wide open proxies and eat up your bandwidth.
-->
最後に http_access ディレクティブを見てみましょう。デフォルトでは通常
``http_access deny all'' になっているため squid へのアクセスは誰もできない
状態となっています。今の所はこれを ``http_access allow all'' に変更しても
構いませんが、実際に運用する際には ACL(Access Control List) についてドキュ
メントを読み、ローカルのネットワーク(などの限定された範囲)のユーザーだけが
利用できるキャッシュを設定したほうが良いでしょう。どうでもいいことと思われ
るかも知れませんが、キャッシュへのアクセスには何らかの制限をかけた方が良い
です。フィルタリングを行なっているファイアウォール(ポルノのフィルターや言
論がそれほど自由でない国のフィルターなど)の中にいる人は、度々アクセス制限
のないプロキシを ``乗っとって'' バンド幅を食いつぶしてしまいます。
</p>
<p>
<!-- 
Initialize the cache directories with ``squid -z'' (if this is a not a
 new installation of squid, you should skip this step).
-->
キャッシュディレクトリを ``squid -z'' で初期化します(squid のバージョン
が 1.1.16 以降の時だけです。それよりも前の版の時は、飛ばして次を行なって
ください)。
</p>
<p>
<!-- 
Now, run squid using the RunCache script in the /usr/local/squid/bin/ directory.
 If it works, you should be able to set your web browser's proxy settings to
 the IP of the box and port 3128 (unless you changed the default port number)
 and access squid as a normal proxy.
-->
/usr/local/squid/bin/ ディレクトリの RunCache スクリプトで squid を起動し
ましょう。web ブラウザのプロキシ設定を squid の動作しているマシンのIP アド
レスおよびポート 3128(ポート番号をデフォルトから変更していない場合)に設定
すれば、squid を普通のプロキシとして使用できるはずです。
</p>
<p>
<!-- 
For additional help configuring squid, see the squid FAQ at <htmlurl url="http://www.squid-cache.org" name="www.squid-cache.org">
-->
設定に関するより詳細な情報は <url url="http://www.squid-cache.org"> の squid
FAQ を参照してください。

(訳注： <url
url="http://www.pa.airnet.ne.jp/~kaz/sysadm/squid/index.html"
name="squid Internet Object Cache 関連のペ−ジ"> や<url
url="http://vcsel-www.pi.titech.ac.jp/cache/Squid-FAQ-j.html"
name="squid FAQ 日本語版"> も参考になるでしょう。

</p>
<sect>
<!-- 
Setting up iptables (Netfilter)
-->
Netfilter(ipchains)の設定
<p>
<!-- 
ipchains should be installed with almost every recent distribution (anything
 based on kernel 2.2). However, should you not have ipchains, you can get it
 from ftp://ftp.rustcorp.com/ipchains/. ipchains is a very powerful tool, and
 we'll only scratch the surface here. For more information, please see http://www.rustcorp.com/linux/ipchains/HOWTO.html
 for the ipchains HOWTO.
-->
(訳注：ipchains に関する説明はカーネル 2.2 系が対象です。カーネル 2.4 系を利用す
る場合、基本的には netfilter(つまり iptablesコマンド)を使用してください。
もしカーネル 2.4 系でも ipchains を使いたい場合、modprobe ipchains.o する
ことにより ipchains を利用できます。その場合はカーネル 2.4 系に於いても 
ipchains に関する説明を参照してください)

ipchains はカーネル 2.2 ベースの、ほぼ全てのディストリビューションでインス
トール済みです。もしインストールされていない時には <url
url="ftp://ftp.rustcorp.com/ipchains/"> から入手できます。ipchains は非常
にパワフルなツールですから、ここでは上っ面しか取り上げません。詳細に関して
は <url url="http://www.rustcorp.com/linux/ipchains/HOWTO.html"
name="ipchains HOWTO"> を参照してください。

(訳注： <url
url="http://www.linux.or.jp/JF/JFdocs/ipchains-mini-HOWTO.html"> というもの
もあります。これは翻訳版ではなく、おおつかまさひとさんのオリジナルです)

<!-- 
iptables is a new thing for Linux kernel 2.4 that replaces ipchains.  
If your distribution came with a 2.4 kernel, it probably has iptables
already installed.  If not, you'll have to download it (and possibly 
compile it).  The homepage is <htmlurl url="http://netfilter.kernelnotes.org/" name="netfilter.kernelnotes.org">.
You make be able to find binary RPMs elsewhere, I haven't looked.  For the
curious, there is plenty of documentation on the netfilter site.
-->
iptables は ipchains を置き換えるもので、Linux kernel 2.4 より導入されま
した。ご利用のディストリビューションのカーネルが 2.4 の場合、既に 
iptables はインストールされているはずです(訳注：2001年02月現在では訳者が
知る限り、SuSE 7.1 と RedHat 7.0.x だけです)。インストールされていない時には
<url url="http://netfilter.kernelnotes.org/"
name="netfilter.kernelnotes.org"> から入手してください。筆者は知りません
が、バイナリの RPM もどこかにあるはずです。netfilter のサイトには詳細なド
キュメントもあります。
</p>
<p>
<!-- 
To set up the rules, you will need to know two things, the interface that
the to-be-proxied requests are coming in on (I'll use eth0 as an example) 
and the port squid is running on (I'll use the default of 3128 as an example).
-->
ルールを設定するには squid が動作しているポート番号(デフォルト
の 3128 とします)を知っておく必要があります。

また ipchains の場合は LAN 側の IP アドレス(192.168.1.1 とします)が、
iptables の場合にはプロキシを行うパケットが送られてくるインターフェース
(ここでは eth0 とします)が必要となります。
</p>
<p>
<!-- 
First, we need to allow packets destined for any actual webserver on this
 box through. We should setup both the loopback interface and the ethernet interface.
 You should not skip this step even if you no actual webserver on your box,
 as the absence of these rules can create infinite forwarding loops where the
 proxy tries to connect to itself. Use the following commands:
-->
ipchains を使う場合(訳注：つまりカーネル 2.2 あるいはカーネル 2.4 系で 
ipchains.o を使う場合)には始めに、
このサーバー経由で外部の web サーバーへ出ていく全てのパケットを許
可します。設定は loopback インターフェースとイーサネットインターフェースの
両方で行なった方が良いでしょう。プロキシサーバー上に web サーバーが動作し
ていなくても、ここでの作業は飛ばすべきではありません。
ここでのルールが設定されていないと、プロキシが自身へ接続しようとした場合
に無限ループになってしまいますから。次のコマンドを実行しましょう。
</p>
<p>
<itemize>
 <item>
ipchains -A input -p TCP -d 127.0.0.1/32 www -j ACCEPT
 <item>
ipchains -A input -p TCP -d 192.168.1.1/32 www -j ACCEPT
</itemize>
</p><p>
<!-- 
Now, the magic words for transparent proxying:
-->
透過型プロキシのための魔法の呪文はこれです。
</p>
<p>
<itemize>
 <item>
ipchains -A input -p TCP -d any/0 www -j REDIRECT 3128
</itemize>

なお iptables を使う場合は下記のコマンドだけで構いません。

<itemize>
<item>
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
</itemize>

</p><p>
<!-- 
You will want to add the above commands to your appropriate bootup script
 under /etc/rc.d/.  Readers upgrading from 2.2 kernels should note that,
as far as the author can tell, this is the only command needed.  2.2 kernels
required two extra commands in order to prevent forwarding loops.  The
author was unable to generate any loops.  If anyone can generate a forwarding
loop using this rule, please send an e-mail to drk@unxsoft.com.
-->
上記のコマンドを /etc/rc.d/ にある適切な起動スクリプトに追加しましょう。
カーネル2.2ではフォワードのループを防ぐためのコマンドが必要でしたが、カー
ネル2.4の場合は特に何もしなくても著者の環境ではループは発生しませんでし
た。もし発生した場合には drk@unxsoft.com までメールでお知らせください。
</p>
<p>
(訳注： ipchains の時にループが発生するのは、REDIRECT が指定されていると
リモートホストへのパケットであっても、ローカルへリダイレクトされるからです)
</p>

<sect>
<!-- 
Put it all together
-->
まとめ

<p>
<!-- 
If everything has gone well so far, go to another machine, change it's
 gateway to the IP of your new squid box, and surf away. To make sure that 
requests are really being forwarded through your proxy instead of straight 
to the origin server, check the log file /usr/local/squid/logs/access.log
-->
今までの所が全てうまくいったら、他のマシンの設定を行ないましょう。
ゲートウェイを squid の動作しているマシンの IP に変更し、web を回ってみ
ます。ログファイル /usr/local/squid/logs/access.log を見て、外部へ直接で
はなく、本当にプロキシ経由でリクエストがフォワードされているかどうかを確
認しましょう。

(訳注： Debian や Redhat 系の場合 /var/log/squid/access.log です)
</p>
<sect>
<!-- 
Further Resources
-->
さらに知るには

<p>
<!-- 
Should you still need assistance, you may wish to check the squid FAQ or
 the squid mailing list at www.squid-cache.org. You may also e-mail me at drk@unxsoft.com, and I'll try to answer your questions if time permits (sometimes 
it does, but sometimes it doesn't).  Please, please, please, send the output of
``iptables -t nat -L'' and relavent portions of any configuration files in your e-mail, or else I will probably not be able to help you out much...
-->
さらなる助けが必要な時には <url url="http://www.squid-cache.org"> で squid FAQ や 
squid メーリングリストを参照してください。また、私(drk@unxsoft.com) にメー
ルしても構いません。時間が許せば(許さない時もあります)、質問に答えようと思
います。その場合は、``ipchains -L''あるいは``iptables -t nat -L''の出力および設定
ファイルの関係する部分を email に記述するようにしてください。それが無いと、
おそらくあまり多くのことはわからないでしょうから。
</p>

</article>

