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を起動するには、次のコマンドを実行します。
>
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の機能をテストするには、次のいずれかのオプションを選択します。
wget
やcurl
と同様に、Web要求への応答を出力するコマンドラインツールであるsquidclient
を使用します。wget
やcurl
とは異なり、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つの部分で構成されています。応答のプロトコルヘッダ(空白行より前にある行)。
応答の実際の内容(空白行より後にある行)。
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 squidYaSTの使用:
Squidモジュールで、
をクリックします。
Squidを停止するには、次のオプションのいずれかを使用します。
systemctl
を使用:>
sudo
systemctl
stop squidYaSTの使用
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_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要求がファイアウォールを通過できることを確認してください。
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で頻繁に求められる応答に対して使用できるメモリ容量を定義します。デフォルトは
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%(最大)の値に設定します。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ルールのタイプの詳細については、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
の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の透過型プロキシモードを使用します。
セキュリティ上の理由から、すべてのクライアントがプロキシサーバを使用してインターネットにアクセスすることが望ましい場合。
すべてのクライアントが、プロキシサーバを認識しているかどうかに関係なく、プロキシサーバを使用する必要がある場合。
ネットワーク内のプロキシサーバが移動されても、既存のクライアントは古い設定を保持する必要がある場合。
/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
--reloadLAN_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
はユーザ名を定義します。cachemgr_passwd
は、どのパスワードでどのアクションを許可するかを定義します。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の詳細については、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のホームページにアクセスしてください。ここにはS「quid User Guide」が置かれており、Squidに関する広範囲なFAQ集もあります。
また、http://www.squid-cache.org/Support/mailing-lists.htmlで、Squidに関するメーリングリストに登録できます。