目次にジャンプページナビゲーションにジャンプ: 前のページ[アクセスキーp]/次のページ[アクセスキーn]
documentation.suse.com / SUSE Linux Enterprise Serverマニュアル / 管理ガイド / サービス / Squidキャッシュプロキシサーバ
適用項目 SUSE Linux Enterprise Server 15 SP4

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レスポンスが検出された場合、プロキシサーバは、最も短時間で応答したキャッシュまたは最も近接するキャッシュなどの要因に従ってダウンロード元のサーバを決定します。リクエストを満たすレスポンスが受信されなければ、リクエストは親キャッシュに送信されます。

注記
注記: Squidによるオブジェクトの重複の回避方法

ネットワーク上の様々なキャッシュ内でオブジェクトの重複を回避するために、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の動作が能力の限界に近づくと、サービス品質が著しく低下する可能性があります。次の各項では、システム要因を重要度に従って説明します。

  1. RAMサイズ

  2. CPU速度/物理CPUコア数

  3. ディスクキャッシュのサイズ

  4. ハードディスク/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を起動するには、次のコマンドを実行します。

> sudo systemctl 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の機能をテストするには、次のいずれかのオプションを選択します。

  • wgetcurlと同様に、Web要求への応答を出力するコマンドラインツールであるsquidclientを使用します。

    wgetcurlとは異なり、squidclientはSquidのデフォルトのプロキシ設定であるlocalhost:3128に自動的に接続します。ただし、Squidの設定を変更した場合は、それに応じてsquidclientを設定する必要があります。詳細については、squidclient --helpを参照してください。

    例 44.1: squidclientによる要求
    > squidclient http://www.example.org
    HTTP/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つの部分で構成されています。

    1. 応答のプロトコルヘッダ(空白行より前にある行)。

    2. 応答の実際の内容(空白行より後にある行)。

    Squidが使用されていることを確認するには、ヘッダの次の行を参照します。

    1

    ヘッダX-Cacheの値は、要求されたドキュメントがコンピュータmoonのSquidキャッシュに存在しなかった(MISS)ことを示します。

    上記の出力例には、X-Cacheの行が2つあります。最初のX-Cacheヘッダは、元のWebサーバの内部キャッシュソフトウェアによって生成されるため、無視しても問題ありません。

    2

    ヘッダViaの値は、HTTPバージョン、コンピュータ名、および使用されている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 systemctl reload squid

    あるいは、

    > sudo systemctl restart squid
  • YaSTの使用:

    Squidモジュールで、設定を保存してsquidを再起動するをクリックします。

Squidを停止するには、次のオプションのいずれかを使用します。

  • systemctlを使用:

    > sudo systemctl stop squid
  • YaSTの使用

    Squidモジュールで、squidを停止するをクリックします。ボタン.

Squidのシャットダウンには時間がかかることがあります。クライアントへの接続を切断し、そのデータをディスクに書き込むまでに最大30秒待つからです(/etc/squid/squid.confshutdown_lifetimeオプションを参照してください)。

警告
警告: Squidの終了

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_POLICY sysconfig変数で指定されます。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とファイアウォール

ファイアウォールを実行している場合は、DNS要求がファイアウォールを通過できることを確認してください。

44.4 YaST Squidモジュール

YaST Squidモジュールには次のタブがあります。

起動

Squidの起動方法と、どのインタフェースでどのファイアウォールポートを開くかを指定します。

HTTPポート

SquidがクライアントからのHTTP要求をリスンするすべてのポートを定義します。

更新パターン

Squidがキャッシュ内のオブジェクトをどのように処理するかを定義します。

キャッシュの設定

キャッシュメモリ、最大および最小のオブジェクトサイズなどに関する設定を定義します。

Cache Directory

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ブラウザのように動作させるには、オプションのdefaultno-queryを追加して、ICPプロトコルの使用を無効にします。

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には、次のいずれかを指定できます。

  • ディレクトリベースのストレージタイプ: ufsaufs(デフォルト)、および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_DIRECTORIESLEVEL_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_ttl0negative_dns_ttl1 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には、alllocalhostなどのデフォルト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ルールのタイプの詳細については、http://www.squid-cache.org/Versions/v3/3.5/cfgman/acl.htmlのSquidのドキュメントを参照してください。

例 44.2: ACLルールの定義
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

1

このACLは、mysurfersを、.example.comから訪問するすべてのユーザ(IPの逆引きにより決定)として定義します。

2

このACLは、teachersを、192.168.1.で始まるIPアドレスを持つコンピュータのユーザとして定義します。

3

このACLは、studentsを、192.168.7.192.168.8.、または192.168.9.で始まるIPアドレスを持つコンピュータのユーザとして定義します。

4

このACLは、lunchを、月曜日から金曜日の午後0時から午後3時までの時間として定義します。

http_access allow ACL_NAME

http_accessでは、プロキシサーバの使用を許可されるユーザと、インターネット上でどのユーザが何にアクセスできるかを定義します。このためにACLを定義する必要があります。localhostおよびallのACLについては、すでに上で定義済みです。この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のブロックとして指定します。

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の透過型プロキシモードを使用します。

  • セキュリティ上の理由から、すべてのクライアントがプロキシサーバを使用してインターネットにアクセスすることが望ましい場合。

  • すべてのクライアントが、プロキシサーバを認識しているかどうかに関係なく、プロキシサーバを使用する必要がある場合。

  • ネットワーク内のプロキシサーバが移動されても、既存のクライアントは古い設定を保持する必要がある場合。

手順 44.1: 透過型プロキシサーバとしてのSquid (コマンドライン)
  1. /etc/squid/squid.confで、パラメータtransparentを行http_portに追加します。この場合、次の2行になります。

    http_port 3128⎄
    http_port 3128 transparent
  2. Squidを再起動します。

    > sudo systemctl restart squid
  3. 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アドレスに置き換えます。

  4. すべてが正常に機能していることを確認するには、/var/log/squid/access.logのSquidログを確認します。

44.7 SquidキャッシュマネージャのCGIインタフェース(cachemgr.cgi)の使用

SquidキャッシュマネージャのCGIインタフェース(cachemgr.cgi)は、実行中のSquidプロセスによるメモリ使用状況に関する統計を表示するCGIユーティリティです。また、キャッシュを管理し、サーバのロギングなしで統計を表示できる便利な手段も提供します。

手順 44.2: の設定cachemgr.cgi
  1. システムでApache Webサーバが動作していることを確認します。第42章 「Apache HTTPサーバの説明に従って、Apacheを設定します。特に、42.5項 「CGIスクリプトの有効化」を参照してください。Apacheがすでに動作しているかどうかを確認するには、次のコマンドを実行します。

    > sudo systemctl status apache2

    ステータスがinactiveの場合は、SUSE Linux Enterprise Serverのデフォルト設定でApacheを起動します。

    > sudo systemctl start apache2
  2. 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
  3. (オプション) 必要に応じて、cachemgr.cgiに1つ以上のパスワードを設定できます。これにより、リモートからキャッシュを終了する、キャッシュの詳細情報を表示するなどのアクションにもアクセスできるようになります。アクセスできるようにするには、オプションcache_mgrcachemgr_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は、どのパスワードでどのアクションを許可するかを定義します。

    nonedisableは特別なキーワードです。noneを指定するとパスワードは不要であり、disableを指定すると機能が無条件に無効になります。

    アクションの全リストについては、cachemgr.cgiにログインした後に参照するのが一番よい方法です。設定ファイルで各操作を設定する方法を調べるには、アクションページのURLで、&operation=より後の文字列を参照してください。allは、すべてのアクションを意味する特別なキーワードです。

  4. SquidとApacheを再ロードして、変更を有効にします。

    > sudo systemctl reload squid
  5. 統計情報を表示するには、セットアップした後で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の詳細については、http://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 詳細情報

http://www.squid-cache.org/にあるSquidのホームページにアクセスしてください。ここにはSquid User Guideが置かれており、Squidに関する広範囲なFAQ集もあります。

また、http://www.squid-cache.org/Support/mailing-lists.htmlで、Squidに関するメーリングリストに登録できます。