34 Squidプロキシサーバ #
Squidは、LinuxおよびUNIXプラットフォームで普及しているプロキシキャッシュです。これは、WebまたはFTPサーバなど、要求されたインターネットオブジェクトを、サーバよりも要求しているワークステーションに近いマシン上に格納することを意味します。Squidは、応答時間や低帯域幅の使用を最適化するために複数の階層上でセットアップされます。エンドユーザにとって透過的なモードである場合もあります。squidGuardなどの追加のソフトウェアを利用すれば、Webコンテンツをフィルタリングすることができます。
Squidはプロキシキャッシュとして機能します。クライアント(この場合はWebブラウザ)からのオブジェクト要求をサーバにリダイレクトします。要求されたオブジェクトがサーバから到着すると、クライアントに配信され、そのコピーがディスクキャッシュに格納されます。キャッシングの利点は、さまざまなクライアントが同じオブジェクトを要求した場合に、これらのオブジェクトをハードディスクのキャッシュから提供できることです。これにより、クライアントはインターネットから取得する場合に比べてはるかに高速にデータを受信できます。また、ネットワークトラフィックも減少します。
Squidは、実際のキャッシングのほか、次のような多様な機能を備えています。
プロキシサーバの複数の通信階層に負荷を分散
プロキシにアクセスする全クライアントの厳密なアクセス制御リストの定義
他のアプリケーションを使用した特定のWebページへのアクセスの許可または拒否
インターネットの閲覧習慣の評価を目的とした、頻繁に閲覧するWebページに関する統計の生成
Squidは汎用プロキシではありません。通常は、HTTP接続のみのプロキシを行います。FTP、Gopher、SSL、およびWAISの各プロトコルをサポートしていますが、ニュースプロトコルやビデオ会議プロトコルなどの他のインターネットプロトコルはサポートしていません。Squidはさまざまなキャッシュ間に通信を提供するUDPプロトコルのみをサポートしているため、多くのマルチメディアプログラムはサポートされません。
34.1 プロキシキャッシュに関する注意事項 #
プロキシキャッシュとして、Squidは複数の方法で使用されます。ファイアウォールと組み合わせると、セキュリティに役立ちます。複数のプロキシを一緒に使用できます。また、キャッシュされるオブジェクトのタイプ、およびその期間も決定できます。
34.1.1 Squidとセキュリティ #
Squidをファイアウォールと併用し、プロキシキャッシュを使用して社内ネットワークを外部から保護することもできます。ファイアウォールは、Squidを除く外部サービスに対する全クライアントのアクセスを拒否します。すべてのWeb接続は、プロキシを使用して確立する必要があります。この設定では、SquidはWebアクセスを完全に制御します。
ファイアウォール設定にDMZが含まれている場合、このゾーン内でプロキシが動作する必要があります。34.6項 「透過型プロキシの設定」では、透過型プロキシの実装方法について説明しています。この場合、プロキシに関する情報が必要とされないので、クライアントの設定が簡略化されます。
34.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プロトコルが使用されます。ネットワーク上で維持されるオブジェクトが多くなるほど、必要なオブジェクトを検出できる可能性が高くなります。
34.1.3 インターネットオブジェクトのキャッシュ #
動的に生成されるページやTLS/SSLで暗号化されたコンテンツなど、ネットワーク上で使用可能な多くのオブジェクトはスタティックではありません。この種のオブジェクトは、アクセスされるたびに変化するためキャッシュされません。
オブジェクトをキャッシュにどのくらいの期間残しておくかを決めるために、オブジェクトにいくつかの状態のうち1つを割り当てます。Webサーバとプロキシサーバは、これらのオブジェクトにヘッダ(たとえば、「Last modified」または「Expires」とそれに対応する日付)を追加することでオブジェクトの状態を検出します。その他、オブジェクトをキャッシュしないように指定するヘッダも使用できます。
キャッシュ内のオブジェクトは、主としてディスクの空き容量不足が原因で、LRU(Least Recently Used)などのアルゴリズムを使用して置換されます。これは、基本的には、長期間要求されていないオブジェクトがプロキシにより消去されることを意味します。
34.2 システム要件 #
システム要件に最も影響するのは、システムにかかる最大ネットワーク負荷です。そのため、負荷のピークを調べます。なぜなら、ピーク時の負荷は1日の平均負荷の4倍を超えることがあるためです。判断に迷う場合は、システム要件よりもやや多めに見積もります。Squidの動作が能力の限界に近づくと、サービス品質が著しく低下する可能性があります。次の各項では、システム要因を重要度に従って説明します。
RAMサイズ
CPU速度/物理CPUコア数
ディスクキャッシュのサイズ
ハードディスク/SSDとそのアーキテクチャ
34.2.1 RAM #
Squidに必要なメモリ容量(RAM)は、キャッシュ内のオブジェクト数に比例します。ランダムアクセスメモリの方が、ハードディスク/SSDよりもはるかに高速です。したがって、スワップディスクを使用するとシステムのパフォーマンスが大幅に低下するため、Squidプロセス用に十分なメモリを用意する必要があります。
また、Squidでは、キャッシュオブジェクト参照と要求頻度の高いオブジェクトの取得を高速化するために、これらのデータがメインメモリに保存されます。その他、Squidでは、処理された全IPアドレスの表、正確なドメインネームキャッシュ、最もアクセス頻度の高いオブジェクト、アクセス制御リスト、バッファなどのデータもメモリに保持する必要があります。
34.2.2 CPU #
Squidは、プロセッサコアの数が比較的少ない(4~8個の物理コア)場合に、それぞれのコアがハイパフォーマンスで動作して、最高のパフォーマンスを発揮するように調整されます。ハイパースレディングなどの、仮想コアを提供する技術は、パフォーマンスを低下させます。
複数のCPUコアを最大限に活用するには、さまざまなキャッシュデバイスにデータを書き込む複数のワーカスレッドをセットアップする必要があります。多くの場合、マルチコアサポートはデフォルトで無効になっています。
34.2.3 ディスクキャッシュのサイズ #
キャッシュ容量が小さいと、キャッシュが簡単にいっぱいになってしまい、要求頻度の低いオブジェクトが新規オブジェクトに置き換えられるため、HIT
(要求された既存のオブジェクトの検出)の可能性は低くなります。逆に、キャッシュに1GBが使用可能で、ユーザが1日あたりの閲覧で10MBしか使用しなければ、キャッシュがいっぱいになるまでに100日以上かかることになります。
必要なキャッシュサイズを判断するのに最も簡単な方法は、接続の最大転送速度を考慮することです。1MBit/秒接続の場合、最大転送速度は128KB/秒です。このトラフィックがすべてキャッシュに入ると、1時間で合計460MBとなります。このトラフィックは、すべて8時間の営業時間帯にのみ発生すると仮定すれば、1日に3.6GBに達します。通常、接続がデータ量の上限に達するまで使用されることはないため、キャッシュで処理される合計データ量は約2GBと想定できます。このため、この例では、Squidで1日にブラウズされたデータをキャッシュに保持するために、2GBのディスク容量が必要となります。
34.2.4 ハードディスク/SSDのアーキテクチャ #
速度はキャッシュ処理に重要な役割を果たすため、この要因には特に注意する必要があります。ハードディスク/SSDの場合、このパラメータは「ランダムシーク時間」または「ランダム読み込み性能」と呼ばれ、ミリ秒単位で計測されます。Squidがハードディスク/SSDとの間で読み書きするデータブロックは少数である傾向があるため、データのスループットよりもハードディスク/SSDのシーク時間/読み込み性能の方が重要です。
プロキシに使用する場合は、回転速度の高いハードディスクを選択するかSSDを選択するのが最善の方法です。ハードディスクを使用する場合は、キャッシュディレクトリを1つずつ持つ小容量のハードディスクを複数使用して、読み込み時間が長くなりすぎないようにする方がよいこともあります。
RAIDシステムを使用すると、速度は低下しますが、信頼性を高めることができます。ただし、パフォーマンス上の理由により、(ソフトウェア)RAID5および同様の設定は避けてください。
ファイルシステムの選択は、通常は決定的な要因にはなりません。ただし、マウントオプションのnoatime
を使用すると、パフォーマンスが向上する可能性があります。Squidでは独自のタイムスタンプが使用されるので、ファイルシステムでアクセス時間を追跡する必要はありません。
34.3 Squidの基本的な使用法 #
まだインストールしていない場合は、パッケージ
squid
をインストールします。squid
は、SUSE® Linux Enterprise Serverにデフォルトでインストールされるパッケージには含まれていません。
SquidはSUSE Linux Enterprise Serverで事前に設定されているため、インストール直後に起動できます。スムーズに起動するように、インターネットおよび少なくとも1つのネームサーバにアクセスできるようにネットワークを設定してください。ダイナミックDNS設定でダイヤルアップ接続を使用すると、問題が発生する可能性があります。その場合は、少なくともネームサーバを明確に指定してください。/etc/resolv.conf
内でDNSサーバが検出されないとSquidが起動しないためです。
34.3.1 Squidの起動 #
Squidを起動するには、次のコマンドを使用します。
tux >
sudo systemctl start squid
Squidをシステムと同時に起動するには、systemctl enable squid
でサービスを有効にします。
34.3.2 Squidが機能しているかどうかの確認 #
Squidが機能しているかどうかを確認するには、次のどちらかの方法を選択します。
systemctl
を使用:tux >
systemctl status squid
このコマンドの出力で、Squidが
loaded
およびactive (running)
であることが示されます。Squid自体を使用:
tux >
sudo squid -k check | echo $?
このコマンドの出力は
0
になりますが、ほかの警告やメッセージが含まれる場合があります。
ローカルシステム上でSquidの機能をテストするには、次のどちらかの方法を選択します。
squidclient
を使用してテストできます。これは、wget
またはcurl
と同様に、Web要求に対する応答を出力できるコマンドラインツールです。これらのツールと異なり、
squidclient
は、Squidのデフォルトでセットアップされるプロキシであるlocalhost:3128
に自動的に接続します。ただし、Squidのこの設定を変更した場合は、コマンドラインオプションによって、異なる設定を使用するようにsquidclient
を設定する必要があります。詳細については、squidclient --help
を参照してください。例 34.1:squidclient
による要求 #tux >
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>例34.1「
squidclient
による要求」に示す出力は、次の2つの部分に分けられます。応答のプロトコルヘッダ: 空白行より前にある行
応答の実際の内容: 空白行より後にある行
Squidが使用されていることを確認するには、ヘッダの次の行を参照します。
ブラウザを使用して、プロキシとして
localhost
、ポートとして3128
をセットアップします。次に、ページをロードして、ブラウザの「インスペクタ」または「開発者ツール」の パネルで、応答ヘッダを確認します。例34.1「squidclient
による要求」と同様のヘッダが、再現されます。
ユーザ全員にSquidおよびインターネットへのアクセスを許可するには、設定ファイル/etc/squid/squid.conf
内のエントリをhttp_access deny all
からhttp_access allow all
に変更します。ただし、その場合は、この操作によりSquidが完全に誰でもアクセス可能になることに注意してください。したがって、プロキシへのアクセスを制御するACL(アクセス制御リスト)を定義します。設定ファイルを変更した後、Squidを再ロードまたは再起動する必要があります。ACLの詳細については、34.5.2項 「アクセス制御オプション」を参照してください。
Squidが正常に起動しても短時間で停止する場合は、ネームサーバエントリに誤りがないかどうかと、/etc/resolv.conf
ファイルが欠落していないかどうかを確認してください。起動エラーの原因は、Squidにより/var/log/squid/cache.log
ファイルに記録されます。
34.3.3 Squidの停止、再ロード、および再起動 #
Squidを再ロードするには、次のいずれかの方法を選択します。
systemctl
を使用:root #
systemctl
reload squidまたは
root #
systemctl
restart squidYaSTの使用:
Squidモジュールで、
をクリックします。ボタン.
Squidを停止するには、次のいずれかの方法を選択します。
systemctl
を使用:root #
systemctl
stop squidYaSTの使用
Squidモジュールで、
をクリックします。ボタン.
Squidのシャットダウンには時間がかかることがあります。クライアントへの接続を切断し、そのデータをディスクに書き込むまでに最大30秒待つからです(/etc/squid/squid.conf
のshutdown_lifetime
オプションを参照してください)。
kill
またはkillall
を使ってSquidを終了すると、キャッシュが破損してしまう可能性があります。Squidを再起動できるようにするには、破損したキャッシュを削除する必要があります。
34.3.4 Squidの削除 #
システムからSquidを削除しても、キャッシュ階層やログファイルは削除されません。これらを削除するには、/var/cache/squid
ディレクトリを手動で削除します。
34.3.5 ローカルDNSサーバ #
サーバで独自ドメインを管理しない場合も、ローカルDNSサーバをセットアップすると有効です。ローカルDNSサーバは単にキャッシュ専用ネームサーバとして機能し、特に設定しなくてもルートネームサーバを介してDNSリクエストを解決できます(26.4項 「BINDネームサーバの起動」を参照)。ローカルDNSサーバを有効にする方法は、インターネット接続の設定時にダイナミックDNSを選択したかどうかによって異なります。
- ダイナミックDNS
通常、ダイナミックDNSを使用すると、インターネット接続の確立時にプロバイダによってDNSサーバが設定され、ローカルの
/etc/resolv.conf
ファイルが自動的に調整されます。この動作は/etc/sysconfig/network/config
ファイルのNETCONFIG_DNS_POLICY
sysconfig変数で制御されます。設定NETCONFIG_DNS_POLICY
変更後:""
YaST sysconfig エディタを使用します。次に、
/etc/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の説明に従って、
/etc/resolv.conf
ファイルでローカルのDNSサーバを指定する必要があります。また、/etc/named.conf
ファイル内のforwarders
に、プロバイダのスタティックなネームサーバとそのIPアドレスを手動で指定する必要があります。
ただし、ファイアウォールを実行している場合は、DNSリクエストがファイアウォールを通過できることを確認してください。
34.4 YaST Squidモジュール #
YaST Squidモジュールには次のタブがあります。
Squidの起動方法と、どのインタフェースでどのファイアウォールポートを開くかを指定します。
SquidがクライアントのHTTP要求をリスンするすべてのポートを定義します。
Squidがキャッシュ内のオブジェクトをどのように処理するかを定義します。
キャッシュメモリ、最大および最小のオブジェクトサイズなどに関する設定を定義します。
Squidがすべてのキャッシュスワップファイルを格納する、トップレベルディレクトリを定義します。
ACLグループ経由でSquidサーバへのアクセスを制御します。
接続タイムアウトとクライアントの有効期間に加えて、アクセスログファイル、キャッシュログファイル、およびキャッシュ保存ログファイルへのパスを定義します。
管理者の言語とメールアドレスを設定します。
34.5 Squid環境設定ファイル #
Squidのプロキシサーバ設定は、すべて/etc/squid/squid.conf
ファイル内で行います。Squidを初めて起動する場合、このファイル内で設定を変更する必要はありませんが、外部クライアントは最初はアクセスを拒否されます。プロキシはlocalhost
に使用できます。デフォルトポートは3128
です。プリインストール済みの設定ファイル/etc/squid/squid.conf
には、オプションの詳細と多数の例が用意されています。
多くのエントリはコメント付きであり、コメント文字#
で始まります。関連する指定は行末にあります。示されている値は、通常はデフォルト値に関係しているため、いずれのパラメータも変更せずにコメント記号を削除しても、ほとんどの場合に影響はありません。コメント付きの行はそのまま残して、オプションと変更した値を次の行に挿入することをお勧めします。この方法では、デフォルト値を簡単に簡単に戻したり、変更した値と比較したりすることができます。
Squidを旧バージョンから更新した場合は、新規の/etc/squid/squid.conf
を編集して、旧バージョンのファイルで加えた変更のみを適用することをお勧めします。
Squidのオプションは、追加、削除、または変更される場合があります。したがって、旧バージョンのsquid.conf
ファイルを使用すると、Squidが正常に機能しなくなる危険性があります。
34.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-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
に直接転送されます。たとえば、使用しているプロバイダが、そのプロキシを使用するように指定している場合、またはそのファイアウォールによるインターネットへの直接アクセスを拒否している場合は、この設定が必要になる可能性があります。
34.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リライタを指定します。たとえば、不要なURLをブロックするsquidGuard(
/usr/sbin/squidGuard
)を指定できます。これにより、プロキシ認証と適切なACLを使用して、さまざまなユーザグループごとに個別にインターネットアクセスを制御できます。squidGuardの詳細については、34.8項 「squidGuard」を参照してください。
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
を使用すると、その検索が要求ごとに繰り返されるため、アクセス速度が低下する場合があります。
34.6 透過型プロキシの設定 #
プロキシサーバを使用する場合の一般的な動作としては、Webブラウザがプロキシサーバの特定のポートに要求を送信し、プロキシは常に、これらの要求されたオブジェクトを(オブジェクトがキャッシュに存在するかどうかに関係なく)提供します。ただし、次のような場合は、Squidの透過型プロキシモードを使用します。
セキュリティ上の理由から、すべてのクライアントがインターネットでのナビゲーションにはプロキシを使用することを推奨される場合。
すべてのクライアントが、プロキシを認識しているかどうかに関係なく、そのプロキシを使用する必要がある場合。
ネットワーク内のプロキシが移動されても、既存のクライアントは古い設定を保持する必要がある場合。
透過型プロキシはWebブラウザの要求を捕捉して応答するため、Webブラウザは要求したページを、出所を認識せずに受信します。名前が示すように、ユーザはこのプロセスの存在をまったく認識しません。
/etc/squid/squid.conf
のオプションhttp_port
の行にパラメータtransparent
を追加します。http_port 3128 transparent
Squidを再起動します。
tux >
sudo systemctl restart squid
HTTPトラフィックを
http_proxy
で指定されているポート(上記の例では3128)にリダイレクトするように、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 (ドメインネームサービス)を意味します。」このサービスは一般に使用されます。使用しない場合は、単に上記のエントリからdomain
を削除して、次のオプションをno
に設定します。FW_SERVICE_DNS="yes"
オプション
FW_REDIRECT
は、HTTPトラフィックを特定のポートに実際にリダイレクトするために使用するので、非常に重要です。設定ファイルでは、オプションの上にコメントとして構文の説明が記載されています。# 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
これは、次のことを意味します。
プロキシファイアウォールにアクセスする内部ネットワークのIPアドレスとネットマスクを指定します。
これらのクライアントからの要求の送信先となるIPアドレスとネットマスクを指定します。Webブラウザの場合は、ネットワーク
0/0
を指定します。これは、「あらゆる場所」を意味するワイルドカードです。これらの要求の送信先となるオリジナルポートを指定します。
すべての要求がリダイレクトされるポートを指定します。この後に示す例では、Webサービス(ポート
80
)のみがプロキシポート(ポート3128
)にリダイレクトされます。他にも追加するネットワークやサービスがある場合は、対応するエントリに空白1個で区切って指定する必要があります。Squidは、HTTP以外のプロトコルをサポートするので、他のポートへの要求もプロキシにリダイレクトできます。たとえば、ポート21(FTP)やポート443(HTTPSまたはSSL)もリダイレクトできます。
したがって、Squid設定で、次のように指定できます。
FW_REDIRECT="192.168.0.0/16,0/0,tcp,80,3128"
設定ファイル
/etc/sysconfig/SuSEfirewall2
で、エントリSTART_FW
が"yes"
に設定されていることを確認します。SuSEFirewall2を再起動します。
tux >
sudo systemctl restart SuSEfirewall2
すべてが正常に機能していることを確認するには、
/var/log/squid/access.log
のSquidログを確認します。すべてのポートが正常に設定されていることを確認するには、ネットワーク外部の任意のコンピュータから、マシンのポートスキャンを実行します。Webサービス(ポート80)のみがオープンしている必要があります。nmap
でポートをスキャンするには、次のコマンドを実行します。nmap
-O IP_ADDRESS
YaST Squidモジュールを起動します。
3128
を含む最初の行を選択します。をクリックして、作業を完了します。
手順34.1「透過型プロキシとしてのSquid (コマンドライン)」のステップ 3の説明に従って、ファイアウォール設定を設定します。
34.7 SquidキャッシュマネージャのCGIインタフェース(cachemgr.cgi
) #
SquidキャッシュマネージャのCGIインタフェース(cachemgr.cgi
)は、実行中のSquidプロセスによるメモリ使用状況に関する統計を表示するCGIユーティリティです。また、キャッシュを管理し、サーバのロギングなしで統計を表示できる便利な手段でもあります。
cachemgr.cgi
のセットアップ #システムでApache Webサーバが動作していることを確認します。第32章 「Apache HTTPサーバ」の説明に従って、Apacheを設定します。特に、32.5項 「CGIスクリプトの有効化」を参照してください。Apacheがすでに動作しているかどうかを確認するには、次のコマンドを実行します。
tux >
sudo systemctl status apache2
inactive
と表示された場合、SUSE Linux Enterprise Serverのデフォルト設定のままで、Apacheを起動できます。tux >
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
を変更する必要はありません。ただし、/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 >
sudo systemctl reload squid
統計情報を表示するには、セットアップした後で
cachemgr.cgi
ページに移動します。たとえば、http://webserver.example.org/squid/cgi-bin/cachemgr.cgi
のようなURLになります。適切なサーバを選択して、ユーザ名とパスワードが設定されている場合はそれらを指定します。
をクリックしてさまざまな統計情報をブラウズします。
34.8 squidGuard #
このセクションでは、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など、HTML埋込みスクリプトの編集、フィルタ処理または検閲。
使用できるように squidGuard をインストールします。
最小限の設定ファイルとして
/etc/squidguard.conf
を設定します。に設定例が用意されています。http://www.squidguard.org/Doc/examples.html最小限の設定で正常に動作したら、より複雑な設定を試してみてください。次に、クライアントがブラックリストに含まれるWebサイトを要求した場合にSquidがリダイレクトできる「アクセス拒否」HTMLページまたはCGIページを作成します。Apacheを使用することをお薦めします。
ここで、squidGuardを使用するようにSquidを設定します。/etc/squid.conf
ファイル内の次のエントリを使用してください。
redirect_program /usr/bin/squidGuard
他の
redirect_children
と呼ばれるオプションには、コンピュータ上で動作するリダイレクト(この場合はsquidGuard)プロセス数を設定します。「」 プロセスをより多く設定すると、RMMもそれだけ多く必要になります。最初は、4
などの少ない数で試します。redirect_children 4
最後に、
systemctl reload squid
を実行し、Squidに新規設定をロードさせます。ここで、ブラウザで設定をテストします。
34.9 Calamarisを使用したキャッシュレポート生成 #
Calamarisは、ASCIIまたはHTML形式でキャッシュアクティビティレポートを生成するためのPerlスクリプトです。このスクリプトはネイティブのSquidアクセスログファイルを処理します。Calamarisのホームページはhttp://cord.de/calamaris-englishにあります。このツールはSUSE Linux Enterprise Serverのデフォルトインストールスコープには含まれていません。これを使用するには、calamaris
パッケージをインストールしてください。
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が必要です。
34.10 詳細情報 #
http://www.squid-cache.org/にあるSquidのホームページにアクセスしてください。ここにはS「quid User Guide」が置かれており、Squidに関する広範囲なFAQ集もあります。
また、http://www.squid-cache.org/Support/mailing-lists.htmlで、Squidに関するメーリングリストに登録できます。