44 Squidキャッシュプロキシサーバ #
Squidは、LinuxおよびUNIXプラットフォームで普及しているキャッシュプロキシサーバです。これは、WebまたはFTPサーバなど、要求されたインターネットオブジェクトを、サーバよりも要求しているワークステーションに近いマシン上に格納することを意味します。Squidは、応答時間や低帯域幅の使用を最適化するために複数の階層上でセットアップされます。エンドユーザにとって透過的なモードである場合もあります。
Squidは、キャッシュプロキシサーバとして機能します。クライアント(この場合はWebブラウザ)からのオブジェクト要求をサーバにリダイレクトします。要求されたオブジェクトがサーバから到着すると、クライアントに配信され、そのコピーがディスクキャッシュに格納されます。キャッシングの利点は、さまざまなクライアントが同じオブジェクトを要求した場合に、これらのオブジェクトをハードディスクのキャッシュから提供できることです。これにより、クライアントはインターネットから取得する場合に比べてはるかに高速にデータを受信できます。また、ネットワークトラフィックも減少します。
Squidは、実際のキャッシングのほか、次のような多様な機能を備えています。
- プロキシサーバの複数の通信階層に負荷を分散 
- プロキシサーバにアクセスする全クライアントの厳密なアクセス制御リストの定義 
- 他のアプリケーションを使用した特定のWebページへのアクセスの許可または拒否 
- インターネットの閲覧習慣の評価を目的とした、頻繁に閲覧するWebページに関する統計の生成 
Squidは汎用プロキシサーバではありません。通常は、HTTP接続のみのプロキシを行います。FTP、Gopher、SSL、およびWAISの各プロトコルをサポートしていますが、ニュースプロトコルやビデオ会議プロトコルなどの他のインターネットプロトコルはサポートしていません。Squidはさまざまなキャッシュ間に通信を提供するUDPプロトコルのみをサポートしているため、多くのマルチメディアプログラムはサポートされません。
44.1 プロキシサーバに関する注意事項 #
キャッシュプロキシサーバとして、Squidは複数の方法で使用することができます。ファイアウォールと組み合わせると、セキュリティに役立ちます。複数のプロキシを一緒に使用できます。また、キャッシュされるオブジェクトのタイプ、およびその期間も決定できます。
44.1.1 Squidとセキュリティ #
Squidをファイアウォールと併用し、社内ネットワークを外部から保護することもできます。ファイアウォールは、Squidを除く外部サービスに対する全クライアントのアクセスを拒否します。すべてのWeb接続は、プロキシサーバを使用して確立する必要があります。この設定では、SquidはWebアクセスを完全に制御します。
ファイアウォール設定に非武装地帯(DMZ)が含まれている場合、このゾーン内でプロキシサーバが動作する必要があります。44.6項 「透過型プロキシの設定」では、透過型プロキシの実装方法について説明しています。この場合、プロキシサーバに関する情報が必要とされないので、クライアントの設定が簡略化されます。
44.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プロトコルが使用されます。ネットワーク上で維持されるオブジェクトが多くなるほど、必要なオブジェクトを検出できる可能性が高くなります。
44.1.3 インターネットオブジェクトのキャッシュ #
動的に生成されるページやTLS/SSLで暗号化されたコンテンツなど、ネットワーク上で使用可能な多くのオブジェクトはスタティックではありません。この種のオブジェクトは、アクセスされるたびに変化するためキャッシュされません。
オブジェクトをキャッシュにどのくらいの期間残しておくかを決めるために、オブジェクトにいくつかの状態のうち1つを割り当てます。Webサーバとプロキシサーバは、これらのオブジェクトにヘッダ(たとえば、「Last modified」または「Expires」とそれに対応する日付)を追加することでオブジェクトの状態を検出します。その他、オブジェクトをキャッシュしないように指定するヘッダも使用できます。
キャッシュ内のオブジェクトは、主としてディスクの空き容量不足が原因で、LRU(Least Recently Used)などのアルゴリズムを使用して置換されます。これは、基本的には、長期間要求されていないオブジェクトがプロキシにより消去されることを意味します。
44.2 システム要件 #
システム要件に最も影響するのは、システムにかかる最大ネットワーク負荷です。そのため、負荷のピークを調べます。なぜなら、ピーク時の負荷は1日の平均負荷の4倍を超えることがあるためです。判断に迷う場合は、システム要件よりもやや多めに見積もります。Squidの動作が能力の限界に近づくと、サービス品質が著しく低下する可能性があります。次の各項では、システム要因を重要度に従って説明します。
- RAMサイズ 
- CPU速度/物理CPUコア数 
- ディスクキャッシュのサイズ 
- ハードディスク/SSDとそのアーキテクチャ 
44.2.1 RAM #
Squidに必要なメモリ容量(RAM)は、キャッシュ内のオブジェクト数に比例します。ランダムアクセスメモリの方が、ハードディスク/SSDよりもはるかに高速です。したがって、スワップディスクを使用するとシステムのパフォーマンスが大幅に低下するため、Squidプロセス用に十分なメモリを用意する必要があります。
また、Squidでは、キャッシュオブジェクト参照と要求頻度の高いオブジェクトの取得を高速化するために、これらのデータがメインメモリに保存されます。その他、Squidでは、処理された全IPアドレスの表、正確なドメインネームキャッシュ、最もアクセス頻度の高いオブジェクト、アクセス制御リスト、バッファなどのデータもメモリに保持する必要があります。
44.2.2 CPU #
Squidは、プロセッサコアの数が比較的少ない(4~8個の物理コア)場合に、それぞれのコアがハイパフォーマンスで動作して、最高のパフォーマンスを発揮するように調整されます。ハイパースレディングなどの、仮想コアを提供する技術は、パフォーマンスを低下させます。
複数のCPUコアを最大限に活用するには、さまざまなキャッシュデバイスにデータを書き込む複数のワーカスレッドをセットアップする必要があります。マルチコアサポートはデフォルトで無効になっています。
44.2.3 ディスクキャッシュのサイズ #
    キャッシュ容量が小さいと、キャッシュが簡単にいっぱいになってしまい、要求頻度の低いオブジェクトが新規オブジェクトに置き換えられるため、HIT (要求された既存のオブジェクトの検出)の可能性は低くなります。逆に、キャッシュに1GBが使用可能で、ユーザが1日あたりの閲覧で10MBしか使用しなければ、キャッシュがいっぱいになるまでに100日以上かかることになります。
   
必要なキャッシュサイズを判断するのに最も簡単な方法は、接続の最大転送速度を考慮することです。1MBit/秒接続の場合、最大転送速度は128KB/秒です。このトラフィックがすべてキャッシュに入ると、1時間で合計460MBとなります。このトラフィックは、すべて8時間の営業時間帯にのみ発生すると仮定すれば、1日に3.6GBに達します。通常、接続がデータ量の上限に達するまで使用されることはないため、キャッシュで処理される合計データ量は約2GBと想定できます。このため、この例では、Squidで1日にブラウズされたデータをキャッシュに保持するために、2GBのディスク容量が必要となります。
44.2.4 ハードディスク/SSDのアーキテクチャ #
速度はキャッシュ処理に重要な役割を果たすため、この要因には特に注意する必要があります。ハードディスク/SSDの場合、このパラメータは「ランダムシーク時間」または「ランダム読み込み性能」と呼ばれ、ミリ秒単位で計測されます。Squidがハードディスク/SSDとの間で読み書きするデータブロックは少数である傾向があるため、データのスループットよりもハードディスク/SSDのシーク時間/読み込み性能の方が重要です。
プロキシサーバに使用する場合は、回転速度の高いハードディスクを選択するかSSDを選択するのが最善の方法です。ハードディスクを使用する場合は、キャッシュディレクトリを1つずつ持つ小容量のハードディスクを複数使用して、読み込み時間が長くなりすぎないようにする方がよいこともあります。
RAIDシステムを使用すると、速度は低下しますが、信頼性を高めることができます。ただし、パフォーマンス上の理由により、(ソフトウェア)RAID5および同様の設定は避けてください。
    ほとんどの場合、ファイルシステムの選択は重要ではありません。ただし、マウントオプションのnoatimeを使用すると、パフォーマンスが向上する可能性があります。Squidでは独自のタイムスタンプが使用されるので、ファイルシステムでアクセス時間を追跡する必要はありません。
   
44.3 Squidの基本的な使用法 #
squidは、SUSE® Linux Enterprise Serverにデフォルトでインストールされていないため、システムにパッケージがインストールされていることを確認してください。
  
   SquidはSUSE Linux Enterprise Serverで事前に設定されているため、インストール直後に起動できます。起動時の問題を避けるため、ネットワークがインターネット接続に接続され、少なくとも1つのネームサーバがあることを確認してください。ダイナミックDNS設定でダイヤルアップ接続を使用すると、問題が発生する可能性があります。その場合は、少なくともネームサーバを指定してください。/var/run/netconfig/resolv.conf内でDNSサーバが検出されないとSquidが起動しないためです。
  
44.3.1 Squidの起動 #
Squidを起動するには、次のコマンドを実行します。
>sudosystemctl start squid
    システム起動時にSquidを起動するには、systemctl enable squidでサービスを有効にします。
   
44.3.2 Squidが機能しているかどうかの確認 #
Squidが実行されているかどうかを確認するいくつかの方法があります。
- 使用 - systemctl:- >- systemctl status squid- この出力で、Squidが - loadedおよび- active (running)であることが示されます。
- Squid自体を使用: - >- sudo- squid -k check | echo $?- 出力は - 0にする必要がありますが、警告などの追加メッセージを含めることもできます。
ローカルシステム上でSquidの機能をテストするには、次のいずれかのオプションを選択します。
- wgetや- curlと同様に、Web要求への応答を出力するコマンドラインツールである- squidclientを使用します。- wgetや- curlとは異なり、- squidclientはSquidのデフォルトのプロキシ設定である- localhost:3128に自動的に接続します。ただし、Squidの設定を変更した場合は、それに応じて- squidclientを設定する必要があります。詳細については、- squidclient --helpを参照してください。例 44.1:- squidclientによる要求 #- >- 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>- 例44.1「 - squidclientによる要求」に示す出力は、次の2つの部分で構成されています。- 応答のプロトコルヘッダ(空白行より前にある行)。 
- 応答の実際の内容(空白行より後にある行)。 
 - Squidが使用されていることを確認するには、ヘッダの次の行を参照します。 
- ブラウザを使用して、プロキシとして - localhost、ポートとして- 3128をセットアップします。次に、ページをロードして、ブラウザの「インスペクタ」または「開発者ツール」のパネルで、応答ヘッダを確認します。例44.1「- squidclientによる要求」と同様のヘッダが、再現されます。
    ローカルシステムおよび他のシステムのユーザがSquidおよびインターネットにアクセスできるようにするには、設定ファイル/etc/squid/squid.conf内のエントリをhttp_access deny
    allからhttp_access allow allに変更します。ただし、これによりSquidは誰でも完全にアクセスできるようになります。したがって、プロキシサーバへのアクセスを制御するACL(アクセス制御リスト)を定義します。設定ファイルを変更した後、Squidを再ロードまたは再起動する必要があります。ACLの詳細については、44.5.2項 「アクセス制御オプション」を参照してください。
   
    Squidが短時間のうちに動作しなくなった場合は、ネームサーバエントリが間違っているか、/var/run/netconfig/resolv.confファイルがないかどうかを確認します。起動エラーの原因は、Squidにより/var/log/squid/cache.logファイルに記録されます。
   
44.3.3 Squidの停止、再ロード、および再起動 #
Squidを再ロードするには以下の2つの方法があります。
- 使用 - systemctl:- >- sudo- systemctlreload squid- あるいは、 - >- sudo- systemctlrestart squid
- YaSTの使用: - Squidモジュールで、をクリックします。 
Squidを停止するには、次のオプションのいずれかを使用します。
- 使用 - systemctl:- >- sudo- systemctlstop squid
- YaSTの使用 - Squidモジュールで、をクリックします。ボタン。 
    Squidのシャットダウンには時間がかかることがあります。クライアントへの接続を切断し、そのデータをディスクに書き込むまでに最大30秒待つからです(/etc/squid/squid.confのshutdown_lifetimeオプションを参照してください)。
   
killまたはkillallを使ってSquidを終了すると、キャッシュが破損してしまう可能性があります。Squidを再起動できるようにするには、破損したキャッシュを削除する必要があります。
    
44.3.4 Squidの削除 #
    システムからSquidを削除しても、キャッシュ階層やログファイルは削除されません。これらを削除するには、/var/cache/squidディレクトリを手動で削除します。
   
44.3.5 ローカルDNSサーバ #
サーバで独自ドメインを管理しない場合も、ローカルDNSサーバをセットアップすると有効です。その場合、そのサーバはキャッシュ専用のネームサーバとして動作し、特別な設定を必要とせずにルートネームサーバ経由でDNS要求を解決することもできます(39.4項 「BINDネームサーバの起動」を参照してください)。ローカルDNSサーバを有効にする方法は、インターネット接続の設定時にダイナミックDNSを選択したかどうかによって異なります。
- ダイナミックDNS
- 通常、ダイナミックDNSを使用すると、インターネット接続の確立時にプロバイダによってDNSサーバが設定され、ローカルの - /var/run/netconfig/resolv.confファイルが自動的に調整されます。この動作は- /etc/sysconfig/network/configファイルの- NETCONFIG_DNS_POLICYsysconfig変数で指定されます。YaST sysconfigエディタで、- NETCONFIG_DNS_POLICYを- ""に設定します。- 次に、 - /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要求がファイアウォールを通過できることを確認してください。
44.4 YaST Squidモジュール #
YaST Squidモジュールには次のタブがあります。
- Squidの起動方法と、どのインタフェースでどのファイアウォールポートを開くかを指定します。 
- SquidがクライアントからのHTTP要求をリスンするすべてのポートを定義します。 
- Squidがキャッシュ内のオブジェクトをどのように処理するかを定義します。 
- キャッシュメモリ、最大および最小のオブジェクトサイズなどに関する設定を定義します。 
- Squidがキャッシュスワップファイルを格納するための最上位ディレクトリを定義します。 
- ACLグループ経由でSquidサーバへのアクセスを制御します。 
- 接続タイムアウトとクライアントの有効期間に加えて、アクセスログファイル、キャッシュログファイル、およびキャッシュ保存ログファイルへのパスを定義します。 
- 管理者の言語とメールアドレスを指定します。 
44.5 Squid環境設定ファイル #
   Squidのプロキシサーバ設定は、/etc/squid/squid.confファイルに保存されます。Squidを初めて起動する場合は、ファイルに変更を加える必要はありませんが、外部クライアントは最初はアクセスを拒否されます。プロキシはlocalhostに使用できます。デフォルトポートは3128です。プリインストール済みの設定ファイル/etc/squid/squid.confには、オプションの詳細と多数の例が用意されています。
  
   コメント文字#を使用すると、多くのエントリが無効になります。関連する指定は行末にあります。示されている値は、通常はデフォルト値に関係しているため、いずれのパラメータも変更せずにコメント記号を削除しても、ほとんどの場合に影響はありません。コメント付きの行はそのまま残して、オプションと変更した値を次の行に挿入することをお勧めします。この方法では、デフォルト値を簡単に簡単に戻したり、変更した値と比較したりすることができます。
  
    Squidを旧バージョンから更新した場合は、新規の/etc/squid/squid.confを編集して、旧バージョンのファイルで加えた変更のみを適用することをお勧めします。
   
    Squidのオプションは、追加、削除、または変更される場合があります。したがって、旧バージョンのsquid.confファイルを使用すると、Squidが正常に機能しなくなる危険性があります。
   
44.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ブラウザのように動作をさせるには、 - defaultおよび- no-queryオプションを追加して、ICPプロトコルの使用を無効にします。
- cache_mem SIZE
- このオプションは、Squidで頻繁に求められる応答に対して使用できるメモリ容量を定義します。デフォルトは - 8 MBです。これは、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%(最大)の値に設定します。- 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-MAIL
- Squidがクラッシュすると、指定された電子メールアドレスにメッセージが送信されます。デフォルトはwebmasterです。 
- logfile_rotate VALUE
- squid- -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_NAME
- Squidがインターネットから要求を直接取り込むのを防ぐには、オプション - never_directを使用して他のプロキシサーバに強制的に接続します。このプロキシは、あらかじめ- cache_peerで指定しておく必要があります。ACL_NAMEとして- allを指定すると、すべての要求は- parentに直接転送されます。たとえば、使用しているプロバイダが、そのプロキシを使用するように指定している場合、またはそのファイアウォールによるインターネットへの直接アクセスを拒否している場合は、この設定が必要になる可能性があります。
44.5.2 アクセス制御オプション #
    Squidは、アクセス制御リスト(ACL)を使用してプロキシサーバへのアクセスを制御できます。ACLは、順番に処理されるルールを含むリストです。ACLは定義しなければ使用できません。Squidには、allやlocalhostなどのデフォルトのACLが含まれています。ただし、ACLを有効にするには、対応するhttp_accessルールが必要です。
   
    オプションaclの構文を次に示します。
   
acl ACL_NAME TYPE DATA
この構文のプレースホルダは、次のことを表します。
- ACL_NAMEには任意の名前を指定できます。 
- TYPEには、 - /etc/squid/squid.confファイルの- ACCESS CONTROLSセクションで利用可能なオプションから選択します。
- DATAでの指定は、ホスト名、IPアドレス、URLなど、個々のACLタイプによって異なります。 
YaST Squidモジュールにルールを追加するには、モジュールを開き、タブをクリックします。ACLグループリストのをクリックして、ルールの名前、タイプ、およびそのパラメータを入力します。
ACLルールのタイプの詳細については、https://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の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のブロックとして指定します。
- 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を使用すると、その検索が要求ごとに繰り返されるため、アクセス速度が低下する場合があります。
44.6 透過型プロキシの設定 #
透過型プロキシはWebブラウザの要求を捕捉して応答するため、Webブラウザは要求したページを、出所を認識せずに受信します。名前が示すように、ユーザはこのプロセスの存在をまったく認識しません。
プロキシサーバを使用する場合の標準的な動作としては、Webブラウザがプロキシサーバの特定のポートに要求を送信し、プロキシは常に、これらの要求されたオブジェクトを(オブジェクトがキャッシュに存在するかどうかに関係なく)提供します。ただし、次のような場合は、Squidの透過型プロキシモードを使用します。
- セキュリティ上の理由から、すべてのクライアントがプロキシサーバを使用してインターネットにアクセスすることが望ましい場合。 
- すべてのクライアントが、プロキシサーバを認識しているかどうかに関係なく、プロキシサーバを使用する必要がある場合。 
- ネットワーク内のプロキシサーバが移動されても、既存のクライアントは古い設定を保持する必要がある場合。 
- /etc/squid/squid.confで、パラメータ- transparentを行- http_portに追加します。この場合、次の2行になります。- http_port 3128⎄ http_port 3128 transparent 
- Squidを再起動します。 - >- sudo- systemctl restart squid
- HTTPトラフィックを - http_proxyで指定されているポート(上記の例ではポート3128)にリダイレクトするように、ファイアウォールを設定します。次に、ファイアウォール設定を再ロードします。これは、ゾーン- internalがLANインタフェースに割り当てられていることが前提となります。- >- sudo- firewall-cmd--permanent --zone=internal \ --add-forward-port=port=80:proto=tcp:toport=3128:toaddr=LAN_IP- >- sudo- firewall-cmd--permanent --zone=internal --add-port=3128/tcp- >- sudo- firewall-cmd--reload- LAN_IPを、使用しているLANインタフェースまたはSquidがリスンしているインタフェースのIPアドレスに置き換えます。 
- すべてが正常に機能していることを確認するには、 - /var/log/squid/access.logのSquidログを確認します。
44.7 SquidキャッシュマネージャのCGIインタフェース(cachemgr.cgi)の使用 #
   SquidキャッシュマネージャのCGIインタフェース(cachemgr.cgi)は、実行中のSquidプロセスによるメモリ使用状況に関する統計を表示するCGIユーティリティです。また、キャッシュを管理し、サーバのロギングなしで統計を表示できる便利な手段も提供します。
  
cachemgr.cgi #- システムでApache Webサーバが動作していることを確認します。第42章 「Apache HTTPサーバ」の説明に従って、Apacheを設定します。特に、42.5項 「CGIスクリプトの有効化」を参照してください。Apacheがすでに動作しているかどうかを確認するには、次のコマンドを実行します。 - >- sudo- systemctl status apache2- ステータスが - inactiveの場合は、SUSE Linux Enterprise Serverのデフォルト設定でApacheを起動します。- >- sudo- systemctl start apache2
- Apacheで - 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設定ファイルを変更する必要はありません。ただし、ファイルに次の行が含まれていることを確認してください。- 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 - 設定ファイルに次のルールが存在することを確認します。順序が重要であることに注意してください。 - 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はユーザ名を定義します。- cache_mgrは、どのパスワードでどのアクションを許可するかを定義します。- noneと- disableは特別なキーワードです。- noneを指定するとパスワードが不要になり、- disableを指定すると機能が無条件に無効になります。- アクションの全リストについては、 - cachemgr.cgiにログインした後に参照するのが一番よい方法です。設定ファイルで各操作を設定する方法を調べるには、アクションページのURLで、- &operation=より後の文字列を参照してください。- allは、すべてのアクションを意味する特別なキーワードです。
- SquidとApacheを再ロードして、変更を有効にします。 - >- sudo- systemctl reload squid
- 統計情報を表示するには、セットアップした後で - cachemgr.cgiページに移動します。たとえば、- http://webserver.example.org/squid/cgi-bin/cachemgr.cgiのようなURLになります。- 正しいサーバを選択します。ユーザ名とパスワードが設定されている場合は、それらを指定します。をクリックして利用可能な統計情報をブラウズします。 
44.8 Calamarisを使用したキャッシュレポート生成 #
   Calamarisは、ASCIIまたはHTML形式でキャッシュアクティビティのレポートを生成するためのPerlスクリプトです。このスクリプトはSquidアクセスログファイルを処理します。このツールはSUSE Linux Enterprise Serverのデフォルトインストールスコープには含まれていません。これを使用するには、calamarisパッケージをインストールしてください。Calamarisの詳細については、https://cord.de/calamaris-englishを参照してください。
  
rootとしてログインし、次のように入力します。
  
# cat access1.log [access2.log access3.log] | calamaris OPTIONS > reportfile
   複数のログファイルを使用する場合は、各ログファイルを古いものから時系列順に指定する必要があります。それには、上記の例のように1つずつファイルを指定するか、access{1..3}.logと指定します。
  
calamarisは次のオプションを受け付けます。
  
- -a
- 使用可能な全レポートを出力 
- -w
- HTMLレポートとして出力 
- -l
- レポートヘッダにメッセージまたはロゴを挿入 
   各種オプションの詳細については、「man calamaris」と入力してプログラムのマニュアルページで参照できます。
  
典型的な例を次に示します。
# cat access.log.{10..1} access.log | calamaris -a -w \
> /usr/local/httpd/htdocs/Squid/squidreport.htmlこのコマンドでは、レポートがWebサーバのディレクトリに保存されます。レポートを表示するにはApacheが必要です。
44.9 詳細情報 #
https://www.squid-cache.org/にあるSquidのホームページにアクセスしてください。ここには「Squid User Guide」が置かれており、Squidに関する広範囲なFAQ集もあります。
また、https://www.squid-cache.org/Support/mailing-lists.htmlで、Squidに関するメーリングリストに登録できます。