36 Squidキャッシュプロキシサーバ #
Squidは、LinuxおよびUNIXプラットフォームで普及しているキャッシュプロキシサーバです。これは、WebまたはFTPサーバなど、要求されたインターネットオブジェクトを、サーバよりも要求しているワークステーションに近いマシン上に格納することを意味します。Squidは、応答時間や低帯域幅の使用を最適化するために複数の階層上でセットアップされます。エンドユーザにとって透過的なモードである場合もあります。
Squidは、キャッシュプロキシサーバとして機能します。クライアント(この場合はWebブラウザ)からのオブジェクト要求をサーバにリダイレクトします。要求されたオブジェクトがサーバから到着すると、クライアントに配信され、そのコピーがディスクキャッシュに格納されます。キャッシングの利点は、さまざまなクライアントが同じオブジェクトを要求した場合に、これらのオブジェクトをハードディスクのキャッシュから提供できることです。これにより、クライアントはインターネットから取得する場合に比べてはるかに高速にデータを受信できます。また、ネットワークトラフィックも減少します。
Squidは、実際のキャッシングのほか、次のような多様な機能を備えています。
プロキシサーバの複数の通信階層に負荷を分散
プロキシサーバにアクセスする全クライアントの厳密なアクセス制御リストの定義
他のアプリケーションを使用した特定のWebページへのアクセスの許可または拒否
インターネットの閲覧習慣の評価を目的とした、頻繁に閲覧するWebページに関する統計の生成
Squidは汎用プロキシサーバではありません。通常は、HTTP接続のみのプロキシを行います。FTP、Gopher、SSL、およびWAISの各プロトコルをサポートしていますが、ニュースプロトコルやビデオ会議プロトコルなどの他のインターネットプロトコルはサポートしていません。Squidはさまざまなキャッシュ間に通信を提供するUDPプロトコルのみをサポートしているため、多くのマルチメディアプログラムはサポートされません。
36.1 プロキシサーバに関する注意事項 #
キャッシュプロキシサーバとして、Squidは複数の方法で使用することができます。ファイアウォールと組み合わせると、セキュリティに役立ちます。複数のプロキシを一緒に使用できます。また、キャッシュされるオブジェクトのタイプ、およびその期間も決定できます。
36.1.1 Squidとセキュリティ #
Squidをファイアウォールと併用し、社内ネットワークを外部から保護することもできます。ファイアウォールは、Squidを除く外部サービスに対する全クライアントのアクセスを拒否します。すべてのWeb接続は、プロキシサーバを使用して確立する必要があります。この設定では、SquidはWebアクセスを完全に制御します。
ファイアウォール設定に非武装地帯(DMZ)が含まれている場合、このゾーン内でプロキシサーバが動作する必要があります。36.6項 「透過型プロキシの設定」では、透過型プロキシの実装方法について説明しています。この場合、プロキシサーバに関する情報が必要とされないので、クライアントの設定が簡略化されます。
36.1.2 複数のキャッシュ #
Squidのインスタンスを複数設定して、それらの間でオブジェクトを交換できます。これにより、システム全体の負荷を削減し、ローカルネットワークからオブジェクトを取得する可能性を高めることができます。また、キャッシュから兄弟キャッシュまたは親キャッシュにオブジェクト要求を転送できるように、キャッシュ階層を設定することもできます。これにより、ローカルネットワーク内の他のキャッシュに、または直接ソースに、オブジェクトを要求できるようになります。
ネットワークトラフィック全体が増大することは望ましくないため、キャッシュ階層に適切なトポロジを選択することがきわめて重要です。大規模ネットワークの場合は、サブネットごとにプロキシサーバを設定して親プロキシサーバに接続し、親プロキシサーバはISPのキャッシュプロキシサーバに接続すると有効です。
この通信はすべて、UDPプロトコルの最上位で実行されるICP (Internet cache protocol)により処理されます。キャッシュ間のデータ転送は、TCPベースのHTTP (hyper text transmission protocol)により処理されます。
オブジェクトを要求するのに最も適したサーバを検出するために、あるキャッシュからすべての兄弟プロキシにICP要求が送信されます。各兄弟プロキシは、ICPレスポンスを通じてこれらの要求に応答します。オブジェクトが検出された場合はHITコード、検出されなかった場合はMISSコードを使用します。
複数のHITレスポンスが検出された場合、プロキシサーバは、最も短時間で応答したキャッシュまたは最も近接するキャッシュなどの要因に従ってダウンロード元のサーバを決定します。要求を満たすレスポンスが受信されなければ、要求は親キャッシュに送信されます。
ネットワーク上の様々なキャッシュ内でオブジェクトの重複を回避するために、CARP (Cache Array Routing Protocol)やHTCP (Hypertext Cache Protocol)など、他のICPプロトコルが使用されます。ネットワーク上で維持されるオブジェクトが多くなるほど、必要なオブジェクトを検出できる可能性が高くなります。
36.1.3 インターネットオブジェクトのキャッシュ #
動的に生成されるページやTLS/SSLで暗号化されたコンテンツなど、ネットワーク上で使用可能な多くのオブジェクトはスタティックではありません。この種のオブジェクトは、アクセスされるたびに変化するためキャッシュされません。
オブジェクトをキャッシュにどのくらいの期間残しておくかを決めるために、オブジェクトにいくつかの状態のうち1つを割り当てます。Webサーバとプロキシサーバは、これらのオブジェクトにヘッダ(たとえば、「Last modified」または「Expires」とそれに対応する日付)を追加することでオブジェクトの状態を検出します。その他、オブジェクトをキャッシュしないように指定するヘッダも使用できます。
キャッシュ内のオブジェクトは、主としてディスクの空き容量不足が原因で、LRU(Least Recently Used)などのアルゴリズムを使用して置換されます。これは、基本的には、長期間要求されていないオブジェクトがプロキシにより消去されることを意味します。
36.2 システム要件 #
システム要件に最も影響するのは、システムにかかる最大ネットワーク負荷です。そのため、負荷のピークを調べます。なぜなら、ピーク時の負荷は1日の平均負荷の4倍を超えることがあるためです。判断に迷う場合は、システム要件よりもやや多めに見積もります。Squidの動作が能力の限界に近づくと、サービス品質が著しく低下する可能性があります。次の各項では、システム要因を重要度に従って説明します。
RAMサイズ
CPU速度/物理CPUコア数
ディスクキャッシュのサイズ
ハードディスク/SSDとそのアーキテクチャ
36.2.1 RAM #
Squidに必要なメモリ容量(RAM)は、キャッシュ内のオブジェクト数に比例します。ランダムアクセスメモリの方が、ハードディスク/SSDよりもはるかに高速です。したがって、スワップディスクを使用するとシステムのパフォーマンスが大幅に低下するため、Squidプロセス用に十分なメモリを用意する必要があります。
また、Squidでは、キャッシュオブジェクト参照と要求頻度の高いオブジェクトの取得を高速化するために、これらのデータがメインメモリに保存されます。その他、Squidでは、処理された全IPアドレスの表、正確なドメインネームキャッシュ、最もアクセス頻度の高いオブジェクト、アクセス制御リスト、バッファなどのデータもメモリに保持する必要があります。
36.2.2 CPU #
Squidは、プロセッサコアの数が比較的少ない(4~8個の物理コア)場合に、それぞれのコアがハイパフォーマンスで動作して、最高のパフォーマンスを発揮するように調整されます。ハイパースレディングなどの、仮想コアを提供する技術は、パフォーマンスを低下させます。
複数のCPUコアを最大限に活用するには、さまざまなキャッシュデバイスにデータを書き込む複数のワーカスレッドをセットアップする必要があります。多くの場合、マルチコアサポートはデフォルトで無効になっています。
36.2.3 ディスクキャッシュのサイズ #
キャッシュ容量が小さいと、キャッシュが簡単にいっぱいになってしまい、要求頻度の低いオブジェクトが新規オブジェクトに置き換えられるため、HIT(要求された既存のオブジェクトの検出)の可能性は低くなります。逆に、キャッシュに1GBが使用可能で、ユーザが1日あたりの閲覧で10MBしか使用しなければ、キャッシュがいっぱいになるまでに100日以上かかることになります。
必要なキャッシュサイズを判断するのに最も簡単な方法は、接続の最大転送速度を考慮することです。1MBit/秒接続の場合、最大転送速度は128KB/秒です。このトラフィックがすべてキャッシュに入ると、1時間で合計460MBとなります。このトラフィックは、すべて8時間の営業時間帯にのみ発生すると仮定すれば、1日に3.6GBに達します。通常、接続がデータ量の上限に達するまで使用されることはないため、キャッシュで処理される合計データ量は約2GBと想定できます。このため、この例では、Squidで1日にブラウズされたデータをキャッシュに保持するために、2GBのディスク容量が必要となります。
36.2.4 ハードディスク/SSDのアーキテクチャ #
速度はキャッシュ処理に重要な役割を果たすため、この要因には特に注意する必要があります。ハードディスク/SSDの場合、このパラメータは「ランダムシーク時間」または「ランダム読み込み性能」と呼ばれ、ミリ秒単位で計測されます。Squidがハードディスク/SSDとの間で読み書きするデータブロックは少数である傾向があるため、データのスループットよりもハードディスク/SSDのシーク時間/読み込み性能の方が重要です。
プロキシサーバに使用する場合は、回転速度の高いハードディスクを選択するかSSDを選択するのが最善の方法です。ハードディスクを使用する場合は、キャッシュディレクトリを1つずつ持つ小容量のハードディスクを複数使用して、読み込み時間が長くなりすぎないようにする方がよいこともあります。
RAIDシステムを使用すると、速度は低下しますが、信頼性を高めることができます。ただし、パフォーマンス上の理由により、(ソフトウェア)RAID5および同様の設定は避けてください。
ファイルシステムの選択は、通常は決定的な要因にはなりません。ただし、マウントオプションのnoatimeを使用すると、パフォーマンスが向上する可能性があります。Squidでは独自のタイムスタンプが使用されるので、ファイルシステムでアクセス時間を追跡する必要はありません。
36.3 Squidの基本的な使用法 #
まだインストールしていない場合は、squidパッケージをインストールします。squidは、SUSE® Linux Enterprise Serverにデフォルトでインストールされるパッケージには含まれていません。
SquidはSUSE Linux Enterprise Serverで事前に設定されているため、インストール直後に起動できます。スムーズに起動するように、インターネットおよび少なくとも1つのネームサーバにアクセスできるようにネットワークを設定してください。ダイナミックDNS設定でダイヤルアップ接続を使用すると、問題が発生する可能性があります。その場合は、少なくともネームサーバを明確に指定してください。/var/run/netconfig/resolv.conf内でDNSサーバが検出されないとSquidが起動しないためです。
36.3.1 Squidの起動 #
Squidを起動するには、次のコマンドを使用します。
tux >sudosystemctl start squid
Squidをシステムの起動時に起動する場合は、systemctl enable squidでサービスを有効にします。
36.3.2 Squidが機能しているかどうかの確認 #
Squidが機能しているかどうかを確認するには、次のどちらかの方法を選択します。
systemctlを使用:tux >systemctl status squidこのコマンドの出力で、Squidが
loadedおよびactive (running)であることが示されます。Squid自体を使用:
tux >sudosquid -k check | echo $?このコマンドの出力は
0になりますが、ほかの警告やメッセージが含まれる場合があります。
ローカルシステム上でSquidの機能をテストするには、次のどちらかの方法を選択します。
squidclientを使用してテストできます。これは、wgetまたはcurlと同様に、Web要求に対する応答を出力できるコマンドラインツールです。これらのツールと異なり、
squidclientは、Squidのデフォルトでセットアップされるプロキシであるlocalhost:3128に自動的に接続します。ただし、Squidのこの設定を変更した場合は、コマンドラインオプションによって、異なる設定を使用するようにsquidclientを設定する必要があります。詳細については、squidclient --helpを参照してください。例 36.1:squidclientによる要求 #tux >squidclient http://www.example.orgHTTP/1.1 200 OK Cache-Control: max-age=604800 Content-Type: text/html Date: Fri, 22 Jun 2016 12:00:00 GMT Expires: Fri, 29 Jun 2016 12:00:00 GMT Last-Modified: Fri, 09 Aug 2013 23:54:35 GMT Server: ECS (iad/182A) Vary: Accept-Encoding X-Cache: HIT x-ec-custom-error: 1 Content-Length: 1270 X-Cache: MISS from moon1 X-Cache-Lookup: MISS from moon:3128 Via: 1.1 moon (squid/3.5.16)2 Connection: close <!doctype html> <html> <head> <title>Example domain</title> [...] </body> </html>例36.1「
squidclientによる要求」に示す出力は、次の2つの部分に分けられます。応答のプロトコルヘッダ: 空白行より前にある行
応答の実際の内容: 空白行より後にある行
Squidが使用されていることを確認するには、ヘッダの次の行を参照します。
ブラウザを使用して、プロキシとして
localhost、ポートとして3128をセットアップします。次に、ページをロードして、ブラウザの「インスペクタ」または「開発者ツール」のパネルで、応答ヘッダを確認します。例36.1「squidclientによる要求」と同様のヘッダが、再現されます。
ユーザ全員にSquidおよびインターネットへのアクセスを許可するには、設定ファイル/etc/squid/squid.conf内のエントリをhttp_access deny allからhttp_access allow allに変更します。ただし、その場合は、この操作によりSquidが完全に誰でもアクセス可能になることに注意してください。したがって、プロキシサーバへのアクセスを制御するACL(アクセス制御リスト)を定義します。設定ファイルを変更した後、Squidを再ロードまたは再起動する必要があります。ACLの詳細については、36.5.2項 「アクセス制御オプション」を参照してください。
Squidが正常に起動しても短時間で停止する場合は、ネームサーバエントリに誤りがないかどうかと、/var/run/netconfig/resolv.confファイルが欠落していないかどうかを確認してください。起動エラーの原因は、Squidにより/var/log/squid/cache.logファイルに記録されます。
36.3.3 Squidの停止、再ロード、および再起動 #
Squidを再ロードするには、次のいずれかの方法を選択します。
systemctlを使用:tux >sudosystemctlreload squidあるいは、
tux >sudosystemctlrestart squidYaSTの使用:
Squidモジュールで、をクリックします。
Squidを停止するには、次のいずれかの方法を選択します。
systemctlを使用:tux >sudosystemctlstop squidYaSTの使用
Squidモジュールで、をクリックします。ボタン.
Squidのシャットダウンには時間がかかることがあります。クライアントへの接続を切断し、そのデータをディスクに書き込むまでに最大30秒待つからです(/etc/squid/squid.confのshutdown_lifetimeオプションを参照してください)。
killまたはkillallを使ってSquidを終了すると、キャッシュが破損してしまう可能性があります。Squidを再起動できるようにするには、破損したキャッシュを削除する必要があります。
36.3.4 Squidの削除 #
システムからSquidを削除しても、キャッシュ階層やログファイルは削除されません。これらを削除するには、/var/cache/squidディレクトリを手動で削除します。
36.3.5 ローカルDNSサーバ #
サーバで独自ドメインを管理しない場合も、ローカルDNSサーバをセットアップすると有効です。ローカルDNSサーバは単にキャッシュ専用ネームサーバとして機能し、特に設定しなくてもルートネームサーバを介してDNSリクエストを解決できます(31.4項 「BINDネームサーバの起動」を参照)。ローカルDNSサーバを有効にする方法は、インターネット接続の設定時にダイナミックDNSを選択したかどうかによって異なります。
- ダイナミックDNS
通常、ダイナミックDNSを使用すると、インターネット接続の確立時にプロバイダによってDNSサーバが設定され、ローカルの
/var/run/netconfig/resolv.confファイルが自動的に調整されます。この動作は/etc/sysconfig/network/configファイルのNETCONFIG_DNS_POLICYsysconfig変数で制御されます。設定NETCONFIG_DNS_POLICY次のように変更してください。""YaST sysconfig エディタを使用します。次に、
/var/run/netconfig/resolv.confファイルに、ローカルのDNSサーバ(名前はlocalhost、IPアドレスは127.0.0.1)を追加します。こうすれば、Squidは常に、ローカルのネームサーバを起動時に検出できます。プロバイダのネームサーバにアクセスするには、設定ファイル
/etc/named.conf内のforwardersに、ネームサーバとそのIPアドレスを指定します。ダイナミックDNSを使用すると、接続の確立時にそれらが自動的に指定されるようにすることができます。そのためには、sysconfig変数を次のように設定します。NETCONFIG_DNS_POLICY次のように変更してください。autoをインストールします。- スタティックDNS
スタティックDNSを使用する場合は、接続の確立時にいずれの自動DNS調整も行われないため、sysconfig変数を変更する必要はありません。ただし、ダイナミックDNSの説明に従って、
/var/run/netconfig/resolv.confファイルでローカルのDNSサーバを指定する必要があります。また、/etc/named.confファイル内のforwardersに、プロバイダのスタティックなネームサーバとそのIPアドレスを手動で指定する必要があります。
ただし、ファイアウォールを実行している場合は、DNSリクエストがファイアウォールを通過できることを確認してください。
36.4 YaST Squidモジュール #
YaST Squidモジュールには次のタブがあります。
Squidの起動方法と、どのインタフェースでどのファイアウォールポートを開くかを指定します。
SquidがクライアントからのHTTP要求をリスンするすべてのポートを定義します。
Squidがキャッシュ内のオブジェクトをどのように処理するかを定義します。
キャッシュメモリ、最大および最小のオブジェクトサイズなどに関する設定を定義します。
Squidがすべてのキャッシュスワップファイルを格納する、トップレベルディレクトリを定義します。
ACLグループ経由でSquidサーバへのアクセスを制御します。
接続タイムアウトとクライアントの有効期間に加えて、アクセスログファイル、キャッシュログファイル、およびキャッシュ保存ログファイルへのパスを定義します。
管理者の言語とメールアドレスを設定します。
36.5 Squid環境設定ファイル #
Squidのプロキシサーバ設定は、すべて/etc/squid/squid.confファイル内で行います。Squidを初めて起動する場合、このファイル内で設定を変更する必要はありませんが、外部クライアントは最初はアクセスを拒否されます。プロキシはlocalhostに使用できます。デフォルトポートは3128です。プリインストール済みの設定ファイル/etc/squid/squid.confには、オプションの詳細と多数の例が用意されています。
多くのエントリはコメント付きであり、コメント文字#で始まります。関連する指定は行末にあります。示されている値は、通常はデフォルト値に関係しているため、いずれのパラメータも変更せずにコメント記号を削除しても、ほとんどの場合に影響はありません。コメント付きの行はそのまま残して、オプションと変更した値を次の行に挿入することをお勧めします。この方法では、デフォルト値を簡単に簡単に戻したり、変更した値と比較したりすることができます。
Squidを旧バージョンから更新した場合は、新規の/etc/squid/squid.confを編集して、旧バージョンのファイルで加えた変更のみを適用することをお勧めします。
Squidのオプションは、追加、削除、または変更される場合があります。したがって、旧バージョンのsquid.confファイルを使用すると、Squidが正常に機能しなくなる危険性があります。
36.5.1 一般設定オプション #
次に、Squidの設定オプションの一部を示します。これがすべてではありません。Squidパッケージの/etc/squid/squid.conf.documentedに、すべてのオプションが簡単な説明とともに記載されています。
http_port PORTこれは、Squidがクライアントリクエストをリスンするポートです。デフォルトポートは
3128ですが、8080も一般的です。cache_peer HOST_NAME TYPE PROXY_PORT ICP_PORTこのオプションを使用して、連携して動作するキャッシュのネットワークを作成できます。キャッシュピアは、同様にネットワークキャッシュをホストするコンピュータであり、ユーザ自身のコンピュータと特定の関係にあります。関係のタイプは、TYPEで指定します。指定できるタイプは、
parentまたはsiblingのいずれかです。HOST_NAMEには、使用するプロキシサーバの名前またはIPアドレスを指定します。PROXY_PORTには、ブラウザで使用するポート番号(通常は
8080)を指定します。ICP_PORTは、7に設定します。または、親のICPポートが不明で、プロバイダに無関係に使用される場合は、0に設定します。SquidをプロキシサーバではなくWebブラウザのように動作させるには、ICPプロトコルの使用を禁止します。そのためには、オプションの
defaultとno-queryを追加します。cache_mem SIZEこのオプションは、Squidで頻繁に求められる応答に対して使用できるメモリ容量を定義します。デフォルトは
8MBです。これは、Squidのメモリ使用量を指定するものではありません。また、Squidのメモリ使用量を超えても構いません。cache_dir STORAGE_TYPE CACHE_DIRECTORY CACHE_SIZE LEVEL_1_DIRECTORIES LEVEL_2_DIRECTORIESオプション
cache_dirは、ディスクキャッシュに使用するディレクトリを定義します。SUSE Linux Enterprise Serverのデフォルト設定では、Squidはディスクキャッシュを作成しません。プレースホルダSTORAGE_TYPEには、次のいずれかを指定できます。
ディレクトリベースのストレージタイプ:
ufs、aufs(デフォルト)、およびdiskd。これら3つはすべて、ストレージ形式ufsの一種です。ただし、ufsはコアSquidスレッドの一部として動作しますが、aufsは別スレッドで動作し、diskdは別プロセスを使用します。つまり、最後の2つのタイプでは、ディスクI/Oに起因するSquadのブロックが回避されます。データベースベースのストレージシステム:
rock。このストレージ形式では、データベースファイルを1つ使用します。このファイルで、各オブジェクトが固定サイズのメモリユニット(「スロット」)を1つ以上占有します。
この後は、
ufsベースのストレージタイプのパラメータについてのみ説明します。rockのパラメータは多少異なっています。CACHE_DIRECTORYは、ディスクキャッシュに使用するディレクトリです。デフォルトでは、
/var/cache/squidです。CACHE_SIZEは、このディレクトリの最大サイズ(メガバイト)です。デフォルトでは100MBに設定されています。使用可能なディスク容量の50~80%(最大)の値に設定します。最後の2つの値であるLEVEL_1_DIRECTORIESとLEVEL_2_DIRECTORIESは、CACHE_DIRECTORYに作成されるサブディレクトリの数を指定します。デフォルトでは、CACHE_DIRECTORYの1つ下のレベルに16個のサブディレクトリが作成され、各サブディレクトリの下に256個ずつサブディレクトリが作成されます。ディレクトリが多すぎるとパフォーマンスが低下する可能性があるため、これらの数値を増やす場合は注意してください。
複数のディスクでキャッシュを共有する場合は、複数の
cache_dir行を指定します。cache_access_log LOG_FILE,cache_log LOG_FILE,cache_store_log LOG_FILEこれらの3つのオプションは、Squidがそのすべてのアクションを記録するパスを指定します。通常、ここでは何も変更する必要はありません。Squidの使用負荷が大きい場合は、キャッシュとログファイルを複数のディスクに分散すると有効な場合があります。
client_netmask NETMASKこのオプションを使用し、サブネットマスクを適用することにより、ログファイルでクライアントのIPアドレスをマスクできます。たとえば、IPアドレスの最終桁を
0に設定するには、255.255.255.0と指定します。ftp_user E-MAILこのオプションを使用して、Squidで匿名FTPログインに使用する必要のあるパスワードを設定できます。一部のFTPサーバでは電子メールアドレスの妥当性が確認されるため、ここでは有効な電子メールアドレスを指定します。
cache_mgr E-MAILSquidは、予期せずにクラッシュする場合、この電子メールアドレスにメッセージを送信します。デフォルトはwebmasterです。
logfile_rotate VALUEsquid-k rotateを実行すると、squidはログファイルを循環利用することができます。このプロセス中にファイルに番号が割り当てられ、指定した値に達すると最も古いファイルが上書きされます。デフォルト値は10です。この場合、0~9の番号の付いているログファイルを循環利用します。ただし、SUSE Linux Enterprise Serverでは、
logrotateと設定ファイル/etc/logrotate.d/squidを使用して自動的にログファイルの循環利用が実行されます。append_domain DOMAIN「append_domain」を使用して、ドメインが未指定の場合に自動的に追加されるドメインを指定します。通常、ここにはユーザ独自のドメインを指定します。したがって、ブラウザに「www」と指定すると、ユーザ独自のWebサーバにアクセスします。
forwarded_for STATEこのオプションを
onに設定すると、ヘッダに次のような行が追加されます。X-Forwarded-For: 192.168.0.1
このオプションを
offに設定すると、SquidでHTTP要求からクライアントのIPアドレスとシステム名が削除されます。negative_ttl TIME,negative_dns_ttl TIMEこれらのオプションを設定すると、Squidは、
404応答など、いくつかの種類のエラーをキャッシュします。それ以降は、リソースが使用可能であっても、新しい要求の発行を拒否します。デフォルトでは、
negative_ttlは0、negative_dns_ttlは1 minutesに設定されています。つまり、デフォルトでは、Web要求に対する否定応答はキャッシュされませんが、DNS要求に対する否定応答は1分間キャッシュされます。never_direct allow ACL_NAMESquidがインターネットから要求を直接取り込むのを防ぐには、オプション
never_directを使用して他のプロキシサーバに強制的に接続します。このプロキシは、あらかじめcache_peerで指定しておく必要があります。ACL_NAMEとしてallを指定すると、すべての要求はparentに直接転送されます。たとえば、使用しているプロバイダが、そのプロキシを使用するように指定している場合、またはそのファイアウォールによるインターネットへの直接アクセスを拒否している場合は、この設定が必要になる可能性があります。
36.5.2 アクセス制御オプション #
Squidには、プロキシサーバへのアクセスを制御する詳細システムが用意されています。ACLは、順次処理されるルールを持つリストです。ACLは定義しなければ使用できません。allやlocalhostなどのデフォルトACLがいくつか用意されています。ただし、ACLを定義しただけで、実際に適用されるわけではありません。実際に適用されるのは、対応するhttp_accessルールが存在する場合のみです。
オプションaclの構文を次に示します。
acl ACL_NAME TYPE DATA
この構文のプレースホルダは、次のことを表します。
名前ACL_NAMEは任意に選択できます。
TYPEは、
/etc/squid/squid.confファイルのACCESS CONTROLSセクションにある多数のオプションから選択できます。DATAの仕様は、個々のACLタイプ(たとえば、ホスト名、IPアドレス、URL)によって異なり、ファイルから読み込むこともできます。
YaST squidモジュールにルールを追加するには、モジュールを開き、タブをクリックします。ACLグループリストのをクリックして、ルールの名前、タイプ、およびそのパラメータを入力します。
ACLルールのタイプの詳細については、http://www.squid-cache.org/Versions/v3/3.5/cfgman/acl.htmlのSquidのドキュメントを参照してください。
acl mysurfers srcdomain .example.com 1 acl teachers src 192.168.1.0/255.255.255.0 2 acl students src 192.168.7.0-192.168.9.0/255.255.255.0 3 acl lunch time MTWHF 12:00-15:00 4
- http_access allow ACL_NAME
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
設定ファイル
/etc/squid/squid.confでは、読みやすいように、すべてのhttp_accessオプションをまとめて指定します。url_rewrite_program PATHこのオプションでは、URLリライタを指定します。
auth_param basic program PATHプロキシサーバ上でユーザを認証する必要がある場合は、
/usr/sbin/pam_authなどの対応するプログラムを設定します。最初にpam_authにアクセスすると、ユーザ名とパスワードを指定する必要があるログインウィンドウが表示されます。また、有効なログインを持つクライアント以外はインターネットを使用できないように、ACLも必要です。acl password proxy_auth REQUIRED http_access allow password http_access deny all
acl proxy_authオプションでREQUIREDを使用すると、有効なユーザ名がすべて受け入れられることを意味します。REQUIREDを、許可されるユーザ名のリストで置き換えることもできます。ident_lookup_access allow ACL_NAMEこのオプションを使用して、タイプ
srcのACLで定義されているすべてのクライアントについて、各ユーザの識別情報を見つけるために、ident要求を実行します。または、このオプションをすべてのクライアントに対して使用するには、ACL_NAMEとして、事前定義されているACLであるallを適用します。ident_lookup_accessの対象として指定されているすべてのクライアントは、identデーモンを実行する必要があります。Linuxでは、pidentd (パッケージpidentd)をidentデーモンとして使用できます。他のオペレーティングシステムでは、通常は使用可能なフリーソフトウェアがあります。identによる検索が成功したクライアントのみが許可されるように、対応するACLを定義します。acl identhosts ident REQUIRED http_access allow identhosts http_access deny all
acl identhosts identオプションでREQUIREDを使用すると、有効なユーザ名がすべて受け入れられることを意味します。REQUIREDを、許可されるユーザ名のリストで置き換えることもできます。identを使用すると、その検索が要求ごとに繰り返されるため、アクセス速度が低下する場合があります。
36.6 透過型プロキシの設定 #
透過型プロキシはWebブラウザの要求を捕捉して応答するため、Webブラウザは要求したページを、出所を認識せずに受信します。名前が示すように、ユーザはこのプロセスの存在をまったく認識しません。
プロキシサーバを使用する場合の一般的な動作としては、Webブラウザがプロキシサーバの特定のポートに要求を送信し、プロキシは常に、これらの要求されたオブジェクトを(オブジェクトがキャッシュに存在するかどうかに関係なく)提供します。ただし、次のような場合は、Squidの透過型プロキシモードを使用します。
セキュリティ上の理由から、すべてのクライアントがインターネットでのナビゲーションにはプロキシサーバを使用することを推奨される場合。
すべてのクライアントが、プロキシサーバを認識しているかどうかに関係なく、そのプロキシサーバを使用する必要がある場合。
ネットワーク内のプロキシサーバが移動されても、既存のクライアントは古い設定を保持する必要がある場合。
/etc/squid/squid.confのオプションhttp_portの行にパラメータtransparentを追加します。この場合、次の2行になります。http_port 3128 http_port 3128 transparent
Squidを再起動します。
tux >sudosystemctl restart squidhttp_proxyで指定されたポートにHTTPトラフィックをリダイレクトするようにファイアウォールを設定します。上記の例では、ポート3128です。次に、ファイアウォール設定を再ロードします。これは、ゾーンinternalがLANインタフェースに割り当てられていることが前提となります。tux >sudofirewall-cmd--permanent --zone=internal \ --add-forward-port=port=80:proto=tcp:toport=3128:toaddr=LAN_IPtux >sudofirewall-cmd--permanent --zone=internal --add-port=3128/tcptux >sudofirewall-cmd--reloadLAN_IPを、使用しているLANインタフェースまたはSquidがリスンしているインタフェースのIPアドレスに置き換えます。
すべてが正常に機能していることを確認するには、
/var/log/squid/access.logのSquidログを確認します。
36.7 SquidキャッシュマネージャのCGIインタフェース(cachemgr.cgi)の使用 #
SquidキャッシュマネージャのCGIインタフェース(cachemgr.cgi)は、実行中のSquidプロセスによるメモリ使用状況に関する統計を表示するCGIユーティリティです。また、キャッシュを管理し、サーバのロギングなしで統計を表示できる便利な手段でもあります。
cachemgr.cgiのセットアップ #システムでApache Webサーバが動作していることを確認します。第34章 「Apache HTTPサーバ」の説明に従って、Apacheを設定します。特に、34.5項 「CGIスクリプトの有効化」を参照してください。Apacheがすでに動作しているかどうかを確認するには、次のコマンドを実行します。
tux >sudosystemctl status apache2inactiveと表示された場合、SUSE Linux Enterprise Serverのデフォルト設定のままで、Apacheを起動できます。tux >sudosystemctl start apache2Apacheで
cachemgr.cgiを有効にします。それには、ScriptAliasの設定ファイルを作成します。ディレクトリ
/etc/apache2/conf.dにこのファイルを作成して、名前をcachemgr.confと指定します。このファイルに、次の記述を追加します。ScriptAlias /squid/cgi-bin/ /usr/lib64/squid/ <Directory "/usr/lib64/squid/"> Options +ExecCGI AddHandler cgi-script .cgi Require host HOST_NAME </Directory>
HOST_NAMEは、
cachemgr.cgiにアクセスするコンピュータのホスト名で置き換えます。これにより、そのコンピュータだけがcachemgr.cgiにアクセスできるようになります。どこからでもアクセスできるようにするには、Require all grantedで置き換えます。SquidとApache Webサーバが同一コンピュータ上で動作する場合は、
/etc/squid/squid.confを変更する必要はありません。ただし、/etc/squid/squid.confに次の行が含まれていることを確認します。http_access allow manager localhost http_access deny manager
これらの行は、マネージャインタフェースにアクセスできるのは同一コンピュータ(
localhost)のみであり、それ以外はアクセスできないことを指定します。SquidとApache Webサーバが異なるコンピュータ上で動作する場合は、CGIスクリプトからSquidへのアクセスを許可するルールを別途追加する必要があります。Webサーバを表すACLを定義します(WEB_SERVER_IPをWebサーバのIPアドレスで置き換えます)。
acl webserver src WEB_SERVER_IP/255.255.255.255
設定ファイルに次のルールが存在することを確認します。2番目の行だけが新しく追加されており、他の行はデフォルト設定です。ただし、この順序は重要です。
http_access allow manager localhost http_access allow manager webserver http_access deny manager
(オプション) 必要に応じて、
cachemgr.cgiに1つ以上のパスワードを設定できます。これにより、リモートからキャッシュを終了する、キャッシュの詳細情報を表示するなどのアクションにもアクセスできるようになります。それには、オプションcache_mgrを設定して、オプションcachemgr_passwdにマネージャが使用する1つ以上のパスワードと許可するアクションのリストを設定します。たとえば、認証なしでインデックスページ、メニュー、およびカウンタの60分平均値の表示を明示的に有効にすること、パスワード
secretpasswordを使用した場合にオフラインモードのトグルを有効にすること、およびそれ以外は完全に無効にすることを指定するには、次の設定を使用します。cache_mgr user cachemgr_passwd none index menu 60min cachemgr_passwd secretpassword offline_toggle cachemgr_passwd disable all
cache_mgrはユーザ名を定義します。cachemgr_passwdは、どのパスワードでどのアクションを許可するかを定義します。noneとdisableは特別なキーワードです。noneを指定するとパスワードは不要であり、disableを指定すると機能が無条件に無効になります。アクションの全リストについては、
cachemgr.cgiにログインした後に参照するのが一番よい方法です。設定ファイルで各操作を設定する方法を調べるには、アクションページのURLで、&operation=より後の文字列を参照してください。allは、すべてのアクションを意味する特別なキーワードです。設定ファイルを変更した後にSquidとApacheを再起動します。
tux >sudosystemctl reload squid統計情報を表示するには、セットアップした後で
cachemgr.cgiページに移動します。たとえば、http://webserver.example.org/squid/cgi-bin/cachemgr.cgiのようなURLになります。適切なサーバを選択して、ユーザ名とパスワードが設定されている場合はそれらを指定します。をクリックしてさまざまな統計情報をブラウズします。
36.8 Calamarisを使用したキャッシュレポート生成 #
Calamarisは、ASCIIまたはHTML形式でキャッシュアクティビティレポートを生成するためのPerlスクリプトです。このスクリプトはネイティブのSquidアクセスログファイルを処理します。Calamarisのホームページはhttp://cord.de/calamaris-englishにあります。このツールはSUSE Linux Enterprise Serverのデフォルトインストールスコープには含まれていません。これを使用するには、calamarisパッケージをインストールしてください。
rootとしてログインし、次のように入力します。
root # cat access1.log [access2.log access3.log] | calamaris OPTIONS > reportfile
複数のログファイルを使用する場合は、各ログファイルを古いものから時系列順に指定する必要があります。それには、上記の例のように1つずつファイルを指定するか、access{1..3}.logと指定します。
calamarisには、次のオプションを指定できます。
-a使用可能な全レポートを出力
-wHTMLレポートとして出力
-lレポートヘッダにメッセージまたはロゴを挿入
各種オプションの詳細については、「mancalamaris」と入力してプログラムのマニュアルページで参照できます。
典型的な例を次に示します。
root # cat access.log.{10..1} access.log | calamaris -a -w \
> /usr/local/httpd/htdocs/Squid/squidreport.htmlこのコマンドでは、レポートがWebサーバのディレクトリに生成されます。レポートを表示するにはApacheが必要です。
36.9 詳細情報 #
http://www.squid-cache.org/にあるSquidのホームページにアクセスしてください。ここにはS「quid User Guide」が置かれており、Squidに関する広範囲なFAQ集もあります。
また、http://www.squid-cache.org/Support/mailing-lists.htmlで、Squidに関するメーリングリストに登録できます。