この mini HOWTO に関するご意見やフィードバックを歓迎します。著者である Daniel Kiracofe(drk@unxsoft.com) に直接送ってもらって構いません。
Copyright 2000 by UnxSoft Ltd (www.unxsoft.com)
(訳注:読者の利便を考え日本語訳を併記しますが、原文の Copyright が優先します)
This manual may be reproduced in whole or in part, without fee, subject to the following restrictions:
以下の条件を満たせば、この文書の全体または一部分を無償で配布できます。
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.
教育目的の場合はこれらのルールに例外が認められることがありますから、著者に 連絡して尋ねてください。これらの制限は著者である我々を守るための物で、学習 者および教育者のみなさんを制限するための物ではありません。このドキュメント のすべてのソースコード (このドキュメントが書かれている SGML は除く) は GNU General Public License の下にあります。GPL は GNU アーカイブから anonymous FTP で入手できます。
明示的、暗黙的に関わらず、無保証です。
翻訳の際には以下の方々に多数の有益なコメント、校正をしていただきました。 ありがとうございました。
``通常'' プロキシを利用するには、利用者が web ブラウザでプロキシのホスト名と ポート番号を指定します。ブラウザはプロキシにリクエストを行ない、次にプロキシはその リクエストをアクセスされたサーバーへ転送します。 通常はこれで問題なく動きますが、時には以下のような場面に出くわすこともあります。
こういった場合に透過型プロキシが役立ちます。これを使うと web へのリクエ ストをプロキシで透過的に扱うことができます。つまり利用者のソフトウェア からは相手先のサーバーへ直接接続しているように見えますが、実際にはプロキ シサーバーへと接続されています。
Cisco のルーターは透過型のプロキシをサポートしていますが、Linux もルーター として利用できる上に TCP のコネクションをローカルポートへリダイレクトすれ ば透過型プロキシとして動作します。ですが web プロキシが適切な相手先のサー バーに接続できるようにするためには、リダイレクトされていることを web プロ キシに認識させる作業も必要となります。これには一般に以下の2 つの方法が用い られます。
ご利用の web プロキシが透過型プロキシとして利用できない時は、web プロキ シの前に全てのややこしい作業を代わりにやってくれる、transproxy という名 前のデーモンを利用できます。transproxy は John Saunders によって書かれま した。これは ftp://ftp.nlc.net.au/pub/unix/transproxy/ や metalab のミラーから入手できます。transproxy についてはこのドキュメントで は述べません。
(訳注:transproxy の web サイトは http://www.transproxy.nlc.net.au/ にあります)
より良い解決方法は、透過型プロキシとして利用できる web プロキシを入手す ることです。ここで説明するのは squid です。squid はオープンソース の Unix 用キャッシングプロキシサーバーで、 www.squid-cache.org から入手できます。
このドキュメントでは執筆時点(2000年3月)で最新の安定版である squid バー ジョン 2.3 および Linux カーネルバージョン 2.2 について述べていきますが、 squid 2.0 や Linux カーネル 2.1 でもこのドキュメントの内容が通用するはず です。それ以前のリリース版での情報が必要であれば www.unxsoft.com からドキュメントを入手できます。
(訳注:翻訳時点(2000年10月)での安定版は squid 2.3 と カーネル 2.2.17 です)
Linux 2.3 を使う時には、ipchains の代わりに netfilter という物を使う必要 があります。ですが開発版のカーネルを使っているような方なら、netfilter に 関しては付属のドキュメントを読んで自力で理解できるでしょう。理解できない のであれば開発版カーネルは使うべきではありません(本当ですよ。信じてく ださい)。Linux 2.4 がリリースされたら netfilter についての記述をこのド キュメントにも加えます。
このドキュメントでは HTTP のプロキシだけを扱います。透過型 FTP プロキシに 関する質問の email をたくさんもらいました。理論的には透過型 FTP プロキシは 不可能ではありませんが HTTP より*かなり*難しいですし、そのためにいま利用で きるツールについて知りません。もし方法がわかった場合は、あなた自身で HOWTO 文書を執筆することをお勧めします。
まず、カーネルに適切なオプションが指定されていることを確認する必要がありま す。ディストリビューションに同梱されているカーネルを使っている場合には、透 過型プロキシが無効になっているかもしれません(私の記憶が正しければ、 Redhat6.1 では有効になっていたと思いますが、保証はできません)。よく分から ない時にはこのセクションは読み飛ばしてしまうのが良いでしょう。次のセクショ ンで実行するコマンドが妙なエラーを出力した場合、おそらくカーネルが正しく設 定されていません。
(訳注: Debian (potato) のカーネル 2.2.13 でも、無効になっているそうです)
透過型プロキシを使えるようにカーネルが設定されていない時には再コンパイルす る必要があります。カーネルの再コンパイルの手続きはややこしく(少なくとも、 初めての人には)、またこのドキュメントの範疇ではありません。カーネルコンパ イルに関する情報が必要でしたら http://metalab.unc.edu/pub/Linux/docs/HOWTO/Kernel-HOWTO を参照して ください。
(訳注: 日本語訳は http://www.linux.or.jp/JF/JFdocs/Kernel-HOWTO.html にあります)
設定する必要のある項目は次の通りです(どれもモジュールにすることはできません)。
作成したカーネルから起動したら IP フォワーディングを有効にする必要があるで しょう。IP フォワーディングするとマシンをルーターとして動作します。普通の ユーザーはこの機能が必要ないため、デフォルトではこの機能は無効になっていま すから、実行時に明示的に有効にする必要があります。ただしディストリビューショ ンによっては既に有効になっているかもしれません。確認するには ``cat /proc/sys/net/ipv4/ip_forward'' を実行します。``1'' が表示されれば有効になっ ています。そうでなかったなら ``echo '1' > /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' > /proc/sys/net/ipv4/ip_forward'' を実行します。potato 以降では /etc/network/options に ip_forward=no というのがあるので、ここを ip_forward=yes に変更すれば /etc/init.d/networking というスクリプトが ``echo '1' > /proc/sys/net/ipv4/ip_forward'' をやってくれます)
squid を設定し、実行しましょう。最新の tarball を www.squid-cache.org からダウンロードします。開発版である DEVEL バー ジョンではなく、安定版である STABLE バージョンであることを確認してください。 執筆時点(2000年10月)の最新版は squid-2.3.STABLE4.tar.gz です。
さて、ダウンロードしたファイルを(``tar -xzf <ファイル名>'' を使用し て)展開して autoconf スクリプト(``./configure'') を実行し、コンパイル (``make'')してインストール(``make install'')しましょう。
次にデフォルトの squid.conf ファイル(変更しない限りインストール先は /usr/local/squid/etc/squid.conf です)を編集します。squid.conf には非常に多く のコメントが含まれています。実際、squid に関する最も良いドキュメントは squid.conf です。全ての設定が終わり起動した後に、もう一度全体を読みなおし た方が良いですが、今の所は最小限の設定だけを行ないましょう。次のようなディ レクティブを探してコメント(行頭の #)を外し、適切な値に変更します。
最後に http_access ディレクティブを見てみましょう。デフォルトでは通常 ``http_access deny all'' になっているため squid へのアクセスは誰もできない 状態となっています。今の所はこれを ``http_access allow all'' に変更しても 構いませんが、実際に運用する際には ACL(Access Control List) についてドキュ メントを読み、ローカルのネットワーク(などの限定された範囲)のユーザーだけが 利用できるキャッシュを設定したほうが良いでしょう。どうでもいいことと思われ るかも知れませんが、キャッシュへのアクセスには何らかの制限をかけた方が良い です。フィルタリングを行なっているファイアウォール(ポルノのフィルターや言 論がそれほど自由でない国のフィルターなど)の中にいる人は、度々アクセス制限 のないプロキシを ``乗っとって'' バンド幅を食いつぶしてしまいます。
キャッシュディレクトリを ``squid -z'' で初期化します(squid のバージョン が 1.1.16 以降の時だけです。それよりも前の版の時は、飛ばして次を行なって ください)。
/usr/local/squid/bin/ ディレクトリの RunCache スクリプトで squid を起動し ましょう。web ブラウザのプロキシ設定を squid の動作しているマシンのIP アド レスおよびポート 3128(ポート番号をデフォルトから変更していない場合)に設定 すれば、squid を普通のプロキシとして使用できるはずです。
設定に関するより詳細な情報は www.squid-cache.org の squid FAQ を参照してください。
(訳注: squid Internet Object Cache 関連のペ−ジ や squid FAQ 日本語版 も参考になるでしょう)
ipchains は(カーネル 2.2 ベースの)ほぼ全てのディストリビューションでインス トール済みですが、もし無い時には ftp://ftp.rustcorp.com/ipchains/ から入手できます。ipchains は非常 にパワフルなツールですから、ここでは上っ面しか取り上げません。詳細に関して は ipchains HOWTO を参照してください。
(訳注: http://www.linux.or.jp/JF/JFdocs/ipchains-mini-HOWTO.html という物 もあります。これは翻訳版ではなく、おおつかまさひとさんのオリジナルです)
ルールを設定するには、プロキシサーバーの IP アドレス(例では192.168.1.1 を 使用します)と squid が動作しているポート番号(例ではデフォルトの 3128 です )を知っておく必要があります。
始めに、このサーバー経由で外部の web サーバーへ出ていく全てのパケットを許 可します。設定は loopback インターフェースとイーサネットインターフェースの 両方で行なった方が良いでしょう。プロキシサーバー上に web サーバーが動作し ていなくても、ここでの作業は飛ばすべきではありません。 ここでのルールが設定されていないと、プロキシが自身へ接続しようとした場合 に無限ループになってしまいますから。次のコマンドを実行しましょう。
そして透過型プロキシのための魔法の呪文はこれです。
上記 3 つのコマンドを /etc/rc.d/ にある適切な起動スクリプトに追加しましょう。
(訳注: REDIRECT が指定されているとリモートホストへのパケットであっても、 ローカルへリダイレクトされます)
今までの所が全てうまくいったら、他のマシンの設定を行ないましょう。 ゲートウェイを squid の動作しているマシンの IP に変更し、web を回ってみ ます。ログファイル /usr/local/squid/logs/access.log を見て、外部へ直接で はなく、本当にプロキシ経由でリクエストがフォワードされているかどうかを確 認しましょう。
(訳注: Debian や Redhat 系の場合 /var/log/squid/access.log です)
さらなる助けが必要な時には www.squid-cache.org で squid FAQ や squid メーリングリストを参照してください。また、私(drk@unxsoft.com) にメー ルしても構いません。時間が許せば(許さない時もあります)、質問に答えようと思 います。その場合は、どうかお願いですから、``ipchains -L'' の出力および設定 ファイルの関係する部分を email に記述するようにしてください。それが無いと、 おそらくあまり多くのことはわからないでしょうから。