
Squidは、LinuxおよびUNIXプラットフォームで普及しているプロキシキャッシュです。これは、WebまたはFTPサーバなど、要求されたインターネットオブジェクトを、サーバよりも要求しているワークステーションに近いマシン上に格納することを意味します。Squidは、応答時間や低帯域幅の使用を最適化するために複数の階層上でセットアップされます。エンドユーザにとって透過的なモードである場合さえあります。squidGuardを利用すれば、Webコンテンツをフィルタリングすることができます。
Squidはプロキシキャッシュとして機能します。クライアント(この場合はWebブラウザ)からのオブジェクト要求をサーバにリダイレクトします。要求されたオブジェクトがサーバから到着すると、クライアントに配信され、そのコピーがディスクキャッシュに格納されます。キャッシングの利点の1つは、様々なクライアントが同じオブジェクトを要求した場合に、これらのオブジェクトをハードディスクのキャッシュから提供できることです。これにより、クライアントはインターネットから取得する場合に比べてはるかに高速にデータを受信できます。また、ネットワークトラフィックも減少します。
Squidは、実際のキャッシングとともに、プロキシサーバの通信階層にまたがる負荷の分散、プロキシにアクセスする全クライアントの厳密なアクセス制御リストの定義、他のアプリケーションを使用した特定のWebページへのアクセスの許可または拒否、ユーザのアクセスパターンの調査を目的としたアクセス回数の多いWebサイトに関する統計の生成など、多様な機能を備えています。Squidは汎用プロキシではありません。通常は、HTTP接続のみのプロキシを行います。また、FTP、Gopher、SSL、およびWAISの各プロトコルをサポートしていますが、Real Audio、news、またはビデオ会議など、他のインターネットプロトコルはサポートしていません。Squidは様々なキャッシュ間に通信を提供するUDPプロトコルのみをサポートしているため、他の多くのマルチメディアプログラムはサポートされません。
プロキシキャッシュとして、Squidは複数の方法で使用されます。ファイアウォールと組み合わせると、セキュリティに役立ちます。複数のプロキシを一緒に使用できます。また、キャッシュされるオブジェクトのタイプ、およびその期間も決定できます。
Squidをファイアウォールと併用し、プロキシキャッシュを使用して社内ネットワークを外部から保護することもできます。ファイアウォールは、Squidを除く外部サービスに対する全クライアントのアクセスを拒否します。すべてのWeb接続は、プロキシを使用して確立する必要があります。この設定では、SquidはWebアクセスを完全に制御します。
ファイアウォール設定にDMZが含まれている場合、プロキシはこのゾーン内で動作しなければなりません。「透過的な」プロキシの実装方法については、31.5項 「透過型プロキシの設定」を参照してください。この場合、プロキシに関する情報が必要とされないので、クライアントの設定が簡略化されます。
複数のSquidインスタンスを設定して、これらの間でオブジェクトを交換できます。これにより、システム全体の負荷を削減し、ローカルネットワーク内の既存のオブジェクトの検出率を高めることができます。また、キャッシュから兄弟キャッシュまたは親キャッシュにオブジェクト要求を転送できるように、キャッシュ階層を設定することも可能です。これにより、ローカルネットワーク内の他のキャッシュから、またはソースから直接、オブジェクトを取得できるようになります。
ネットワークトラフィック全体が増大することは望ましくないため、キャッシュ階層に適切なトポロジを選択することがきわめて重要です。大規模ネットワークの場合は、サブネットごとにプロキシサーバを設定して親プロキシに接続し、親プロキシはISPのプロキシキャッシュに接続すると有効です。
この通信はすべて、UDPプロトコルの最上位で実行されるICP (Internet cache protocol)により処理されます。キャッシュ間のデータ転送は、TCPベースのHTTP (hyper text transmission protocol)により処理されます。
どのサーバからオブジェクトを取得するのが最も適切であるかを検出するために、あるキャッシュからすべての兄弟プロキシにICPリクエストが送信されます。各兄弟プロキシは、オブジェクトが検出された場合はHITコード、検出されなかった場合はMISSを使用し、ICPレスポンスを介してリクエストに応答します。複数のHITレスポンスが検出された場合、プロキシサーバは、最も短時間で応答したキャッシュまたは最も近接するキャッシュなどのファクタに従ってダウンロード元のサーバを決定します。リクエストを満たすレスポンスが受信されなければ、リクエストは親キャッシュに送信されます。
ネットワーク上の様々なキャッシュ内でオブジェクトの重複を回避するために、CARP (Cache Array Routing Protocol)やHTCP (Hypertext Cache Protocol)など、他のICPプロトコルが使用されます。ネットワーク上で維持されるオブジェクトが多くなるほど、必要なオブジェクトを検出できる可能性が高くなります。
ネットワーク上で使用可能なオブジェクトがすべてスタティックであるとは限りません。動的に生成されるCGIページ、アクセス件数カウンタ、暗号化されたSSLコンテンツドキュメントが多数存在します。この種のオブジェクトは、アクセスされるたびに変化するためキャッシュされません。
その他のオブジェクトについても、キャッシュにどのくらいの期間残しておくかという問題があります。これを決定するために、オブジェクトが取り得るさまざまな状態を定義し、キャッシュ内のすべてのオブジェクトに1つの状態を割り当てます。Webサーバとプロキシサーバは、これらのオブジェクトに「Last modified」や「Expires」などのヘッダおよび対応する日付を追加することで、オブジェクトの状態を検出します。その他、オブジェクトをキャッシュしないように指定するヘッダも使用されます。
ハードディスクの空き容量不足が原因で、通常、キャッシュ内のオブジェクトはLRU (Least Recently Used)などのアルゴリズムを使用して置換されます。これは、基本的には、長期間要求されていないオブジェクトがプロキシにより消去されることを意味します。
最も重要なのは、システムにかかる最大ネットワーク負荷を判断することです。ピーク時の負荷は1日の平均負荷の4倍を超えることもあるため、負荷のピークに注意する必要があります。疑わしい場合は、システム要件を多めに見積もることをお勧めします。これは、Squidの動作状態が処理能力の限界に近づくと、サービス品質が著しく低下する可能性があるためです。次の各項では、システム要件を重要度に従って説明します。
速度はキャッシュ処理に重要な役割を果たすため、この要件には特に注意する必要があります。ハードディスクの場合、このパラメータはランダムシーク時間と呼ばれ、ミリ秒単位で計測されます。Squidがハードディスクとの間で読み書きするデータブロックは比較的少数である傾向があるため、データのスループットよりもハードディスクのシーク時間の方が重要です。プロキシに使用する場合は、回転速度の高い(つまり読取り/書込みヘッドが必要な位置に迅速に移動する)ハードディスクを選択するのが適切です。システムを高速化するには、同時に多数のディスクを使用する方法や、ストライピングRAIDアレイを使用する方法があります。
キャッシュ容量が小さいと、簡単にいっぱいになってしまい、要求頻度の低いオブジェクトが新規オブジェクトで置換されるため、HIT (要求された既存のオブジェクトの検出)の可能性は低くなります。逆に、キャッシュに1GBが使用可能で、ユーザが1日に10MB分しかアクセスしなければ、キャッシュがいっぱいになるまでに100日以上かかることになります。
必要なキャッシュサイズを判断する場合に最も簡単なのは、接続の最大転送速度を考慮することです。1MBit/sの接続の場合、最大転送速度は125KB/sになります。このトラフィックがすべてキャッシュに入ると、1時間で合計450MBとなり、このトラフィックがすべて8時間の営業時間帯にのみ発生すると仮定すれば、1日に3.6GBに達します。通常、接続が上限まで使用されることはないため、キャッシュで処理される合計データ量は約2GBと想定できます。このため、Squidで1日にブラウズされたデータをキャッシュに保持する例では、2GBのディスク容量が必要となります。
Squidに必要なメモリ容量(RAM)は、キャッシュ内のオブジェクト数に比例します。また、Squidでは、キャッシュオブジェクト参照と要求頻度の高いオブジェクトの検索を高速化するために、これらのデータがメインメモリに格納されます。ランダムアクセスメモリの方が、ハードディスクよりも高速です。
その他、Squidでは、処理された全IPアドレスの表、正確なドメインネームキャッシュ、最もアクセス頻度の高いオブジェクト、アクセス制御リスト、バッファなどのデータもメモリに保持する必要があります。
ディスクにスワップする必要があるとシステムパフォーマンスが大幅に低下するため、Squidプロセス用に十分なメモリを用意する必要があります。キャッシュメモリの管理には、cachemgr.cgiツールを使用できます。このツールの詳細については、31.6項 「cachemgr.cgi」を参照してください。
Squidは、CPU集約型のプログラムではありません。プロセッサの負荷が増大するのは、キャッシュの内容がロードまたはチェックされる間のみです。マルチプロセッサマシンを使用しても、システムパフォーマンスは向上しません。効率を高めるには、高速ディスクまたは増設メモリを購入することをお薦めします。
まだインストールしていない場合は、squidパッケージをインストールします。squidはデフォルトのSUSE® Linux Enterprise Serverインストールスコープに含まれていません。
SquidはSUSE® Linux Enterprise Serverで事前に設定されているため、インストール直後に起動できます。スムーズに起動するように、インターネットおよび少なくとも1つのネームサーバにアクセスできるようにネットワークを設定してください。ダイナミックDNS設定でダイヤルアップ接続を使用すると、問題が発生する可能性があります。このような場合は、少なくともネームサーバを明確に入力してください。というのは、/etc/resolv.conf内でDNSサーバが検出されないとSquidが起動しないためです。
Squidを起動するには、rootとしてコマンドラインで「systemctl start squid.service」と入力します。初期起動時には、最初に/var/cache/squid内でキャッシュのディレクトリ構造を定義する必要があります。この操作は、起動スクリプトにより自動的に実行され、完了までに数秒または数分かかります。右側に緑で完了と表示されたら、Squidは正常にロードされています。ローカルシステム上でSquidの機能をテストするには、ブラウザでプロキシとして「localhost」、ポートとして「3128」を入力します。
ユーザ全員にSquidおよびインターネットへのアクセスを許可するには、設定ファイル/etc/squid/squid.conf内のエントリをhttp_access deny allからhttp_access allow allに変更します。ただし、その場合は、この操作によりSquidが完全に誰でもアクセス可能になることに注意してください。したがって、プロキシへのアクセスを制御するACLを定義します。この詳細については、31.4.2項 「アクセス制御オプション」ファイルを参照してください。
設定ファイル/etc/squid/squid.confを変更した後、Squidで変更後の設定ファイルを再ロードする必要があります。それには、systemctl reload squid.serviceを使用します。または、systemctl restart squid.serviceを使用して、Squidを完全に再起動します。
プロキシが稼動しているかどうかを確認するには、systemctl status squid.serviceコマンドを使用します。Squidをシャットダウンするには、systemctl stop squid.serviceコマンドを使用します。Squidは、クライアントへの接続が切断されてデータがディスクに書き込まれるまで最大30秒(/etc/squid/squid.confのshutdown_lifetimeオプション)待機するため、終了までに少し時間がかかることがあります。
killまたはkillallを使ってSquidを終了すると、キャッシュが破損してしまう可能性があります。Squidを再起動できるようにするには、破損したキャッシュを完全に削除する必要があります。
Squidが正常に起動しても短時間で停止する場合は、ネームサーバエントリに誤りがないかどうかと、/etc/resolv.confファイルが欠落していないかどうかを確認してください。起動エラーの原因は、Squidにより/var/log/squid/cache.logファイルに記録されます。Squidをシステムのブート時に自動的にロードする必要がある場合は、systemctl enable squid.serviceを実行してサービスを有効にします。
Squidをアンインストールしても、キャッシュ階層やログファイルは削除されません。これらを削除するには、/var/cache/squidディレクトリを手動で削除します。
サーバで独自ドメインを管理しない場合も、ローカルDNSサーバをセットアップすると有効です。ローカルDNSサーバは単にキャッシュ専用ネームサーバとして機能し、特に設定しなくてもルートネームサーバを介してDNSリクエストを解決できます(22.4項 「BINDネームサーバの起動」を参照)。ローカルDNSサーバを有効にする方法は、インターネット接続の設定時にダイナミックDNSを選択したかどうかによって異なります。
通常、ダイナミックDNSを使用すると、インターネット接続の確立時にプロバイダによってDNSサーバが設定され、ローカルの/etc/resolv.confファイルが自動的に調整されます。この動作は/etc/sysconfig/network/configファイルのNETCONFIG_DNS_POLICY sysconfig変数で制御されます。YaST sysconfigエディタで、NETCONFIG_DNS_POLICYを""に設定します。次に、/etc/resolv.confファイルに、ローカルのDNSサーバとして「localhost」、そのIPアドレスとして「127.0.0.1」を入力します。このようにすれば、Squidは常に、起動時にローカルのネームサーバを検出できます。
プロバイダのネームサーバにアクセスするには、/etc/named.conf設定ファイル内のforwardersにサーバ名とそのIPアドレスを入力します。ダイナミックDNSを使用すると、sysconfig変数のNETCONFIG_DNS_POLICYを「auto」に設定することによって、この動作を接続の確立時に自動的に実行することができます。
スタティックDNSを使用する場合は、接続の確立時にいずれの自動DNS調整も行われないため、sysconfig変数を変更する必要はありません。ただし、/etc/resolv.confファイルにローカルのDNSサーバを入力する必要があります。また、プロバイダのスタティックなネームサーバにアクセスするには、/etc/named.confファイルに、サーバ名forwardersとそのIPアドレスを手動で入力する必要があります。
ただし、ファイアウォールを実行している場合は、DNSリクエストがファイアウォールを通過できることを確認してください。
Squidのプロキシサーバ設定は、すべて/etc/squid/squid.confファイル内で行います。Squidを初めて起動する場合、このファイル内で設定を変更する必要はありませんが、外部クライアントは最初はアクセスを拒否されます。プロキシはlocalhostに使用できます。デフォルトポートは3128です。プリインストール済みの/etc/squid/squid.conf設定ファイルには、オプションの詳細と多数の例が用意されています。ほぼすべてのエントリは(コメント行を示す) #記号で始まり、関連する指定が行末にあります。示されている値は、ほぼ常にデフォルト値に関係しているため、パラメータを実際に変更せずにコメント記号を削除しても、ほとんどの場合に影響はありません。サンプルはそのまま残し、変更したパラメータと共にオプションを次の行に挿入することをお勧めします。この方法では、簡単にデフォルト値に戻し、変更と比較することができます。
Squidを旧バージョンから更新した場合は、新規の/etc/squid/squid.confを編集し、旧バージョンのファイルで行った変更のみを適用することをお勧めします。旧バージョンのsquid.confファイルを使用すると、オプションが変更されたり新たな変更が加えられているために、設定が機能しなくなる危険性があります。
これは、Squidがクライアントリクエストをリスンするポートです。デフォルトポートは3128ですが、8080も一般的です。必要な場合は、複数のポート番号を空白で区切って指定します。
ここでは、たとえばISPのプロキシを使用する場合に、親プロキシを入力します。hostnameには、使用するプロキシの名前またはIPアドレスを入力し、typeには親プロキシを入力します。proxy-portには、ブラウザで使用する親の演算子でも指定されているポート番号(通常は8080)を入力します。icp-portは、7に設定するか、親のICPポートが不明で、その使用がプロバイダに無関係な場合は0に設定します。また、ICPプロトコルの使用を禁止するため、ポート番号に続けてdefaultおよびno-queryを指定することもできます。このように指定すると、Squidはプロバイダのプロキシに関する限り通常のブラウザのように動作します。
このエントリは、Squidで頻繁に求められる応答に対して使用できるメモリ容量を定義します。デフォルトは8MBです。これは、Squidのメモリ使用量を指定せず、メモリ使用量を超えても構いません。
cache_dirエントリは、すべてのオブジェクトが格納されるディスク上のディレクトリを定義します。末尾の数値は、使用される最大ディスク領域(単位MB)と第1レベルと第2レベルのディレクトリ数を示します。ufsパラメータは残しておく必要があります。デフォルトでは、/var/cache/squidディレクトリに 100MBのディスク領域を使用して 16個のサブディレクトリが作成され、各サブディレクトリにぞれぞれ 256個以上のサブディレクトリが含まれます。使用するディスク領域を指定するときには、予備のディスク領域を十分に残しておきます。ここでは、使用可能ディスク領域の50~80%が最も有効です。ディレクトリが多すぎるとパフォーマンスが低下する可能性があるため、ディレクトリに関する最後の2つの数値を増やす場合は注意してください。複数のディスクでキャッシュを共有する場合は、複数のcache_dir行を入力します。
これらの3つのエントリは、Squidによるすべてのアクションのログファイルへのパスを指定します。通常、ここでは何も変更しません。Squidの使用負荷が大きい場合は、キャッシュとログファイルを複数のディスクに分散すると有効な場合があります。
このエントリをonに設定すると、読込み可能なログファイルが生成されます。ただし、一部の評価プログラムではこの形式のログファイルを解釈できません。
このエントリを使用して、ログファイルでクライアントのIPアドレスをマスクします。ここで「255.255.255.0」と入力すると、IPアドレスの最終桁はゼロに設定されます。このようにして、クライアントのプライバシーを保護できます。
このエントリでは、Squidで匿名FTPログインに使用する必要のあるパスワードを設定します。一部のFTPサーバには電子メールアドレスの妥当性が確認されるため、ここでは有効な電子メールアドレスを指定できます。
Squidが予期せずにクラッシュした場合のメッセージ送信先となる電子メールアドレスを指定します。デフォルトはwebmasterです。
squid -k rotateを実行すると、Squidは保護されたログファイルを循環利用することができます。このプロセス中にファイルに番号が割り当てられ、指定した値に達すると最も古いファイルが上書きされます。SUSE Linux Enterprise Serverではログファイルのアーカイブと削除が設定ファイル/etc/logrotate/squid内に設定されたcronジョブより実行されるため、デフォルト値は0です。
append_domainには、未指定の場合に自動的に追加されるドメインを指定します。通常、ブラウザに「www」と入力して独自Webサーバにアクセスできるように、このエントリには独自ドメインを入力します。
このエントリをoffに設定すると、SquidではHTTPリクエストからクライアントのIPアドレスとシステム名が削除されます。設定しない場合は、次のような行がヘッダに追加されます。
X-Forwarded-For: 192.168.0.1
通常、これらのlを変更する必要はありません。ただし、ダイヤルアップ接続を使用する場合は、インターネットが一時的にアクセス不能になる場合があります。Squidは、失敗したリクエストを記録してから新規リクエストの発行を拒絶しますが、インターネット接続は再確立されています。このような場合は、minutesをsecondsに変更します。次にブラウザの更新をクリックすると、数秒後にダイヤルアッププロセスが再開されます。
Squidがインターネットからリクエストを直接取り込むのを防ぐには、上記のコマンドを使用して他のプロキシに強制的に接続します。このプロキシは、あらかじめcache_peerに入力しておく必要があります。acl_nameとしてallを指定すると、すべてのリクエストは「親」に直接転送されます。たとえば、プロキシの使用を奨励しているプロバイダや、ファイアウォールによるインターネットへのダイレクトアクセスを拒否しているプロバイダを使用している場合は、この設定が必要な場合があります。
Squidには、プロキシへのアクセスを制御する詳細システムが用意されています。ACLを実装することで、このシステムを簡単かつ包括的に設定できます。そのためには、順次処理されるルールを持ったリストが必要です。ACLは定義しなければ使用できません。allやlocalhostなどのデフォルトACLがいくつか用意されています。ただし、ACLを定義しただけで、実際に適用されるわけではありません。実際に適用するには、http_accessルールも共に定義する必要があります。
ACLの定義には、3つ以上の指定が必要です。名前<acl_name>は任意に選択できます。<type> は、/etc/squid/squid.confファイルのACCESS CONTROLSセクションにある多数のオプションから選択できます。<data>の指定は個々のACLタイプに応じて異なり、ホスト名、IPアドレス、またはURLを使用するなど、ファイルから読み込むこともできます。次に単純な例を示します。
acl mysurfers srcdomain .my-domain.com acl teachers src 192.168.1.0/255.255.255.0 acl students src 192.168.7.0-192.168.9.0/255.255.255.0 acl lunch time MTWHF 12:00-15:00
http_accessでは、プロキシの使用を許可されるユーザと、インターネット上でどのユーザが何にアクセスできるかを定義します。この場合、ACLを設定する必要があります。localhostおよびallの定義はすでに前述しており、この2つのACLではdenyまたはallowを介してアクセスを拒否または許可できます。多数のhttp_accessエントリを含むリストを作成できます。各エントリは上から下へと処理され、発生順に従って個々のURLへのアクセスが許可または拒否されます。最後のエントリは、常にhttp_access deny allにする必要があります。次の例では、localhostはすべてに自由にアクセスできますが、他のホストはいずれもアクセスを完全に拒否されます。
http_access allow localhost http_access deny all
また、このルールの使用を示す次の例では、グループteachersは常にイン^ーネットへのアクセス権を持ちます。グループstudentsは月曜日から金曜日のランチタイム中にのみアクセス権を取得します。
http_access deny localhost http_access allow teachers http_access allow students lunch time http_access deny all
http_accessエントリを含むリストは、読みやすいように/etc/squid/squid.confファイルの指定の位置にのみ入力してください。つまり、次の2つの間に入力します。
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR # CLIENTS
および最後の
http_access deny all
このオプションでは、squidGuardなど、望ましくないURLをブロックできるリダイレクタを指定します。プロキシ認証と適切なACLを利用すれば、さまざまなユーザグループ個別にインターネットアクセスを制御することができます。squidGuardを使用する場合は、個別にインストール、設定する必要があります。
プロキシ上でユーザを認証する必要がある場合は、pam_authなどの対応するプログラムを設定します。最初にpam_authにアクセスすると、ユーザ名とパスワードを入力するためのログインウィンドウが表示されます。また、有効なログインを持つクライアント以外はインターネットを使用できないように、ACLも必要です。
acl password proxy_auth REQUIRED http_access allow password http_access deny all
proxy_authの後のREQUIREDは、許可されるユーザ名のリストまたはそのリストへのパスで置き換えることができます。
ここでは、ACLで定義されたクライアントすべてについてidentリクエストを実行させ、各ユーザの識別情報を検索させます。<acl_name> に all を適用すると、すべてのクライアントに対して有効になります。また、すべてのクライアントでidentデーモンを実行する必要があります。Linuxの場合、そのためにはpidentdパッケージをインストールします。Microsoft Windowsの場合は、インターネットからダウンロードできるフリーソフトウェアが提供されています。identが正常に検索されたクライアントのみが許可されるように、対応するACLをここで定義します。
acl identhosts ident REQUIRED http_access allow identhosts http_access deny all
この場合も、REQUIREDを許可されるユーザ名のリストで置き換えることができます。identを使用すると、その検索がリクエストごとに繰り返されるため、アクセス速度が少し低下する場合があります。
一般的なプロキシサーバの作業では、Webブラウザがプロキシサーバの特定のポートに要求を送信し、プロキシが要求に応じて必要なオブジェクトを提供します。ネットワークで操作する場合には、次のような状況が発生することがあります。
セキュリティ上の理由から、すべてのクライアントがインターネットでのナビゲーションにはプロキシを使用することを推奨される場合。
すべてのクライアントが、認識するかどうかに関係なくプロキシを使用する必要がある場合。
ネットワーク上でプロキシが移動しても、既存のクライアントは古い設定を保持する必要がある場合。
いずれの場合も、透過型プロキシを使用できます。原則はきわめて簡単で、プロキシはWebブラウザのリクエストを捕捉して応答するため、Webブラウザは要求したページを出所を認識せずに受信します。透過型プロキシと呼ばれるのは、このプロセス全体が透過的に実行されるためです。
squidを透過的なプロキシとして動作させるには、メインの設定ファイル/etc/squid/squid.conf内でhttp_portタグのtransparentオプションを使用します。squidの再起動後に必要なことは、HTTPポートをhttp_portで指定されたポートにリダイレクトするようファイアウォールを再設定することだけです。次のsquid設定行では、これはポート3128になっています。
http_port 3128 transparent
ファイアウォールを介して受信するリクエストをすべて、Squidポートへのポート転送ルールに従ってリダイレクトします。そのためには、Section “Configuring the Firewall with YaST”, Chapter 15, Masquerading and Firewalls, Security Guideで説明しているように、同梱のツールであるSuSEfirewall2を使用します。このツールの設定ファイルは/etc/sysconfig/SuSEfirewall2にあります。この設定ファイルは、適切なエントリで構成されています。透過型プロキシを設定するには、次に示すようにいくつかのファイアウォールオプションを設定する必要があります。
インターネットを指すデバイス:FW_DEV_EXT="eth1"
インターネットを指すデバイス:FW_DEV_INT="eth0"
インターネットなど、信頼されない(外部)ネットワークからアクセスが許可される、ファイアウォール上のポートとサービスを定義します(/etc/servicesを参照)。この例では、外部に対してWebサービスのみが提供されます。
FW_SERVICES_EXT_TCP="www"
安全な(内部)ネットワークからのアクセスが許可される、ファイアウォール上のポートとサービス(TCPサービスとUDPサービスの両方)を定義します(/etc/servicesを参照)。
FW_SERVICES_INT_TCP="domain www 3128" FW_SERVICES_INT_UDP="domain"
この例では、WebサービスとSquid (デフォルトポートは3128)へのアクセスが許可されます。domain「サービスはDNS (ドメインネームサービス)を意味します。」このサービスは一般に使用されます。一般に公開しない場合は、単に上記のエントリから削除して次のオプションをnoに設定します。
FW_SERVICE_DNS="yes"
最も重要なのは15番目のオプションです。
# 15.) # Which accesses to services should be redirected to a local port on # the firewall machine? # # This option can be used to force all internal users to surf via # your squid proxy, or transparently redirect incoming webtraffic to # a secure webserver. # # Format: # list of <source network>[,<destination network>,<protocol>[,dport[:lport]] # Where protocol is either tcp or udp. dport is the original # destination port and lport the port on the local machine to # redirect the traffic to # # An exclamation mark in front of source or destination network # means everything EXCEPT the specified network # # Example: "10.0.0.0/8,0/0,tcp,80,3128 0/0,172.20.1.1,tcp,80,8080"
上記のコメントは、次の構文を示しています。最初に、プロキシファイアウォールにアクセスする内部ネットワークのIPアドレスとネットマスクを入力します。次に、これらのクライアントからのリクエストの送信先となるIPアドレスとネットマスクを入力します。Webブラウザの場合は、ネットワーク0/0を指定します。これは、「あらゆる場所」を意味するワイルドカードです。」その後、これらのリクエストの送信先となるオリジナルポートを入力し、最後に全リクエストのリダイレクト先となるポートを入力します。SquidはHTTP以外のプロトコルをサポートしているため、要求は他のポートからFTP (ポート21)、HTTPSまたはSSL (ポート443)などのプロキシにリダイレクトされます。この例では、Webサービス(ポート80)がプロキシポート(ポート3128)にリダイレクトされます。他にも追加するネットワークやサービスがある場合は、対応するエントリに空白1個で区切って指定する必要があります。
FW_REDIRECT="192.168.0.0/16,0/0,tcp,80,3128"
ファイアウォールとそれを使用した新規設定を開始するには、/etc/sysconfig/SuSEfirewall2ファイル内のエントリを変更します。エントリSTART_FWを"yes"に設定する必要があります。
31.3項 「Squidの起動」のように、Squidを起動します。すべてが正常に機能していることを確認するには、/var/log/squid/access.logのSquidログを確認します。 すべてのポートが正常に設定されていることを確認するには、ネットワーク外部の任意のコンピュータから、マシンのポートスキャンを実行します。Webサービス(ポート80)のみがオープンしている必要があります。nmapコマンドを使用してポートを検索する場合の構文は、nmap -O IP_addressです。
キャッシュマネージャ(cachemgr.cgi)は、実行中のSquidプロセスによるメモリ使用状況に関する統計を表示するCGIユーティリティです。また、キャッシュを管理し、サーバのロギングなしで統計を表示できる便利な手段でもあります。
最初に、システムでWebサーバを稼働させる必要があります。で説明しているように、Apacheを設定します。第29章 Apache HTTPサーバApacheがすでに稼働しているかどうかを確認するには、rootとしてsystemctl status apache2.serviceコマンドを入力します。稼働していない場合は、「systemctl start apache2.service」を入力して、SUSE Linux Enterprise Serverのデフォルト設定でApacheを起動します。最後に、cachemgr.cgiファイルをApacheのディレクトリcgi-binにコピーします。32ビットの場合は次のようになります。
cp /usr/lib/squid/cachemgr.cgi /srv/www/cgi-bin/
64ビット環境では、cachemgr.cgiファイルは/usr/lib64/squid/の下に位置しており、これをApacheディレクトリにコピーするコマンドは次のとおりです。
cp /usr/lib64/squid/cachemgr.cgi /srv/www/cgi-bin/
キャッシュマネージャの場合は、オリジナルファイル内で次のようなデフォルト設定が必要です。最初に、2つのACLを定義し、http_accessオプションがこれらのACLを使用して、CGIスクリプトからSquidへのアクセスを付与するようにします。キャッシュマネージャはcache_objectプロトコルを用いてSquidと通信するため、最初のACLが最も重要です。
acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255
次の規則によって、ApacheにSquidへのアクセス権が付与されます。
http_access allow manager localhost http_access deny manager
これらの規則は、WebサーバとSquidが同じマシンで実行されている場合を想定しています。キャッシュマネージャとSquidとの通信が他のコンピュータ上のWebサーバで開始される場合は、例31.2「アクセスルール」に示すACLを追加します。
acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl webserver src 192.168.1.7/255.255.255.255 # webserver IP
次に、例31.3「アクセスルール」に規則を追加して、Webサーバからのアクセスを許可します。
http_access allow manager localhost http_access allow manager webserver http_access deny manager
キャッシュのリモートクローズやキャッシュ詳細情報の表示など、より多数のオプションにアクセスする場合は、マネージャのパスワードを設定します。そのためには、マネージャ用のパスワードと表示するオプションのリストを指定してエントリcachemgr_passwdを設定します。このリストは、/etc/squid/squid.confにエントリのコメントの一部として表示されます。
設定ファイルを変更するたびにSquidを再起動してください。それには、systemctl reload squid.serviceを使用します。
対応するWebサイトのhttp://webserver.example.org/cgi-bin/cachemgr.cgiにアクセスします。をクリックして様々な統計情報をブラウズします。
このセクションでは、squidGuardの詳細な設定については説明しません。ごく基本的な設定のみを紹介し、squidGuardの使用法についていくつか助言するに留めます。詳細な設定については、squidGuardのWebサイトhttp://www.squidguard.orgを参照してください。
squidGuardは、Squid用の無償(GPL)で柔軟で高速なフィルタ、リダイレクタおよびアクセスコントローラプラグインです。squidGuardを利用すれば、Squidキャッシュ上にある異なるユーザグループに対して、異なる制限を持つ複数のアクセスルールを定義することができます。squidGuardは、Squidの標準リダイレクタインタフェースを使用しています。squidGuardの機能を以下に示します。
一部のユーザによるWebアクセスを、許可されているか既知のWebサーバまたはURLのリストに限定します。
リストまたはブラックリストに含まれたWebサーバまたはURLへの、一部のユーザによるアクセスをブロックします。
正規表現または語のリストと一致するURLへの、一部のユーザによるアクセスをブロックします。
ブロックしたURLを「インテリジェント」CGIベースの情報ページにリダイレクトします。
未登録ユーザを登録フォームにリダイレクトします。
バナーを空のGIFにリダイレクトします。
時刻、曜日、日付などに基づいて異なるアクセスルールを使用します。
ユーザグループごとに異なるルールを使用します。
squidGuardとSquidは、以下の用途には使用できません。
ドキュメント内のテキストの編集、フィルタ処理または検閲。
JavaScriptやVBscriptなど、HTML埋込みスクリプト言語の編集、フィルタ処理または検閲。
squidGuardを使用するにははじめに、インストールします。最小限の設定ファイルとして/etc/squidguard.confを設定します。に設定例が用意されています。http://www.squidguard.org/Doc/examples.html最小限の設定で正常に動作したら、より複雑な設定を試してみてください。
次に、クライアントがブラックリストに含まれるWebサイトを要求した場合にSquidをリダイレクトするために、ダミーの「アクセス拒否」ページまたは複雑度の異なるCGIページを作成します。Apacheを使用することをお薦めします。
ここで、squidGuardを使用するようにSquidを設定します。/etc/squid.confファイル内の次のエントリを使用してください。
redirect_program /usr/bin/squidGuard
他のredirect_childrenと呼ばれるオプションには、コンピュータ上で動作するリダイレクト(この場合はsquidGuard)プロセス数を設定します。「」 プロセスをより多く設定すると、RMMもそれだけ多く必要になります。最初は、4などの少ない数で試します。
redirect_children 4
最後に、systemctl reload squid.serviceを実行し、Squidに新規設定をロードさせます。ここで、ブラウザで設定をテストします。
Calamarisは、ASCIIまたはHTML形式でキャッシュアクティビティレポートを生成するためのPerlスクリプトです。このスクリプトはネイティブのSquidアクセスログファイルを処理します。Calamarisのホームページはhttp://Calamaris.Cord.de/にあります。このツールはSUSE Linux Enterprise Serverのデフォルトインストールスコープには含まれていません。これを使用するには、calamarisパッケージをインストールしてください。
rootとしてログインし、「cat access.log | calamaris options > reportfile」と入力します。複数のログファイルをパイプする場合は、各ログファイルを古いものから時系列順に指定する必要があります。このプログラムには、次のようなオプションがあります。
access.log.1、access.log.2 などのような類似ファイルが複数ある場合、 デフォルトのシェルbashはこれらのファイルを番号以外の順序でソートして、access.log.を一覧表示します。*. この問題を解決するには、次の構文を使用できます。access.log.{1..42}。これによって1~42の数字拡張子の付いたファイルのリストが生成されます。
使用可能な全レポートを出力
HTMLレポートとして出力
レポートヘッダにメッセージまたはロゴを挿入
各種オプションの詳細については、「mancalamaris」と入力してプログラムのマニュアルページで参照できます。
典型的な例を次に示します。
cat access.log.{10..1} access.log | calamaris -a -w \
> /usr/local/httpd/htdocs/Squid/squidreport.html
このコマンドでは、レポートがWebサーバのディレクトリに生成されます。レポートを表示するにはApacheが必要です。
にあるSquidのホームページにアクセスしてください。http://www.squid-cache.org/ここにはS「quid User Guide」が置かれており、Squidに関する広範囲なFAQ集もあります。
透過型プロキシの使用方法に関する簡潔な情報は、/usr/share/doc/howto/en/txt/TransparentProxy.gzにhowtoenhとして含まれています。また、squid-users@squid-cache.orgで、Squidに関するメーリングリストに登録できます。このアーカイブはhttp://www.squid-cache.org/mail-archive/squid-users/にあります。