Squidによる透過型プロキシの設定 |
| Squidとは、プロキシサービスに必要な代理アクセスや分散キャッシュの機能を提供するソフトです。 このSquidを使うことにより、クライアントからのWWWサーバーへのアクセスをプロキシサーバーが一手に引き受けることによりクライアントのセキュリティを向上させ、さらにプロキシサーバーが取得したオブジェクトをキャッシュすることにより、 同様のリクエストに対するアクセスを高速化することができます。 しかしながら、プロキシサーバーは便利で強力である反面、クライアント側の設定が面倒ですので、透過型プロキシを導入することにしました。 透過型プロキシサーバーを構築するには、ipchainsとSquidを組み合わせます。 すなわち、クライアントからにWWWサーバーへアクセスするため、プロキシサーバーの80/TCPポート宛にパケットが届いた場合、ipchainsのinputチェインでSquidが監視するポート3128にパケットを転送し、Squidはそれを受けて代理アクセスを行うようにします。 こうすることにより、クライアント側では特に設定を行うこともなく、プロキシを意識せずにWWWサーバーへアクセスすることができ、Squidのhttpdアクセラレータ機能によりアクセスを高速化することもできます。 それでは、この透過型プロキシを利用するための、ipchainsとSquidの設定方法を説明しましょう。 ・透過型プロキシのための ipchains の設定先に触れたようにipchainsの役割は、透過型プロキシサーバーに届いたWWWサーバー宛のパケットをSquidが監視する3128のポートに転送することです。ただ、それだけでは自らのWWWサーバー宛へのパケットも転送してしまいますので、そのパケットは通過させるようにします。 具体的には、下記のコマンドをターミナル画面より打ち込みます。
1行目及び2行目が自らのWWWサーバー宛のパケットを通過させるルールで、3行目がwwwサーバー宛のパケットを3128のポートに転送するルールです。 なお、3行目のルールを最初に設定すると、自らのWWWサーバー宛へのパケットも転送されてしまいますので、注意してください。 そして、このルールについて、サーバーを再起動したときに自動的に有効となるよう/etc/sysconfig/ipchainsに保存しておきます。
なお、ipchainsのオプション等の説明については、当サイトの「ipchainsの設定」を参照してください。 ・透過型プロキシのための Squid の設定Squidの設定は、「/etc/squid/squid.conf」ファイルで行います。基本的な設定は、デフォルトのままで使えますので、ここでは必要な部分のみ説明することにします。 なお、以下の設定は、viやgedit、emacs等のお好きなエディタで/etc/squid/squid.conf に追加してください。 まず、アクセスコントロールに関する設定を行います。 プロキシサーバーをインターネットから見える場所に置きますので、セキュリティのためにローカルネットワークからしか利用できないようにアクセスコントロールリスト ( acl ) とHTTPアクセスコントロールにより制限を設けます。 /etc/squid/squid.conf の「# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS」と書かれている行の下に、下記の太字の行を加えます。
これで、「192.168.0.0 〜 192.168.0.255」(すなわち、gw.e-ryocihi.netのホスト)と「192.168.1.0 〜 192.168.1.255」(すなわち、e-ryoichi-home.netのホスト)、及び「127.0.0.1」(localhost) からしかアクセスできないようになりました。 一応これだけでもプロキシサーバーとすることができますが、透過型プロキシサーバーとするために、httpdアクセラレータ機能を利用します。 httpdアクセラレータとは、クライアントからのリクエストをWWWサーバーの代わりにSquidが受け取り、要求されたオブジェクトがキャッシュされていて、かつ更新されていない場合には、キャッシュ内のオブジェクトをクライアントに返し、キャッシュされていなかったり、更新されている場合には、本来のWWWサーバーにリクエストを送り、取得したオブジェクトをクライアントに返すという機能です。 具体的な設定は、「# HTTPD-ACCELERATOR OPTIONS」に下記の太字部分を追加します。 なお、私の修正方法は、デフォルトの内容をそのまま残し、修正する内容を新たに追加する方法をとっています。
以上で、透過型プロキシサーバーの設定が完了です。 Squidのデーモンであるsquidは、
で起動します。 ・SquidのキャッシュマネージャについてSquidは、「/var/log/squid/access.log」、「/var/log/squid/cache.log」、「/var/log/squid/store.log」の3種類のログを作成します。これらのログを分析し、Squidの統計情報を出力するのが、キャッシュマネージャと呼ばれるCGIプログラムであり、Red Hat Linuxでは「/usr/lib/squid/cachemgr.cgi 」としてインストールされています。 ただし、このままではCGIプログラムであるcachemgr.cgiを実行して、その内容をブラウザで見ることができません。 そこで、自らのWWWサーバー上ですでにCGIが使えるように設定しているディレクトリに、cachemgr.cgi専用のディレクトリを作成し、そこにcachemgr.cgi をコピーします。
(注)mkdir の「/○○○○」のディレクトリは、Apacheで指定している DocumentRoot のディレクトリです。 そして、Apacheの設定ファイルである /etc/httpd/conf/httpc.conf でセキュリティを守るため、外部からはアクセスできないように修正を行います。 具体的には、次の記述を加えました。
以上で準備が整いましたので、httpd に設定ファイル(/etc/httpd/conf/httpd.conf) の再読み込み(/etc/init.d/httpd reload) を行い、ブラウザからURL( http://192.168.0.2/cgi-bin/squid/cachemgr.cgi )を指定して、キャッシュマネージャにアクセスします。 (注) URLの「 192.168.0.2 」は、Squidを稼動させているサーバーのアドレスです。 キャッシュマネージャにアクセスすると、次のような画面が表示されます。 ![]() 本来、「Manager name」と「Password」の欄には、セキュリティを守るために何らかの登録を行い、認証することになっていると思うのですが、当サーバーでは空白でも、適当な値を入力しても、「Continue」をクリックすると、次の画面が表示されます。 少し、やばい感じがします。(~_~;) ![]() この画面の各項目をクリックして表示される内容については、今のところ「ふ〜ん、そうなの。(+_+)」という状態です。 ということで、今回のところは、ここまでにしておきます。(~_~;) このページをご覧になっている方で、何か知っていることがあれば、メールやBBSで教えてください。 よろしくお願いします m(__)m |