Show Table of Contents
第19章 Squid キャッシングプロキシ
Squid とは、HTTP、Gopher、FTP データオブジェクトに対応する、Web クライアント用の高パフォーマンスなプロキシキャッシングサーバーです。頻繁に要求される Web ページをキャッシングして再利用することで、帯域幅を抑え、応答時間を改善します[20]。
Red Hat Enterprise Linux では、squid パッケージが Squid キャッシングプロキシを提供します。以下のコマンドを実行して squid パッケージがインストールされていることを確認します。
~]$ rpm -q squid
package squid is not installed
パッケージがインストールされておらず squid を使用したい場合は、root で
yum ユーティリティーを使用してインストールします。
~]# yum install squid19.1. Squid キャッシングプロキシと SELinux
SELinux を有効にすると、squid はデフォルトで制限のあるサービスとして実行されます。制限のあるプロセスはそれ自体のドメイン内で実行され、他の制限のあるプロセスとは分離されます。制限のあるプロセスが攻撃を受けると、SELinux ポリシー設定に応じて、攻撃側のリソースへのアクセスと攻撃者による被害は限定されます。以下で squid が自身のドメイン内で実行している squid プロセスの例を示します。ここでは squid パッケージがインストールされていることを前提としています。
getenforceコマンドを実行して、SELinux が enforcing モードで実行していることを確認します。~]$
getenforceEnforcingSELinux が enforcing モードで実行している場合は、このコマンドはEnforcingを返します。- root ユーザーで以下のコマンドを実行し、
squidデーモンを起動します。~]#
systemctl start squid.serviceサービスが稼働していることを確認します。出力は以下のようになり、タイムスタンプのみが異なります。~]#
systemctl status squid.servicesquid.service - Squid caching proxy Loaded: loaded (/usr/lib/systemd/system/squid.service; disabled) Active: active (running) since Mon 2013-08-05 14:45:53 CEST; 2s ago - 以下のコマンドを実行して、
squidプロセスを表示します。~]$
ps -eZ | grep squidsystem_u:system_r:squid_t:s0 27018 ? 00:00:00 squid system_u:system_r:squid_t:s0 27020 ? 00:00:00 log_file_daemonsquidプロセスに関連する SELinux コンテキストはsystem_u:system_r:squid_t:s0です。コンテキストの最後から 2 番目の部分、squid_tがタイプになります。タイプは、プロセスのドメインやファイルのタイプを定義します。この例の場合、squid プロセスはsquid_tドメイン内で実行しています。
SELinux ポリシーは、
squid_t などのように、制限のあるドメイン内で実行しているプロセスがファイルや他のプロセス、システム全般などとどのように対話するのかを定義します。squid がファイルにアクセス可能とするには、ファイルに適切なラベルを付ける必要があります。
/etc/squid/squid.conf ファイルを設定して、squid がデフォルトの TCP ポート 3128、3401、4827 以外のポートでリッスンするようにするには、semanage port コマンドを使って SELinux ポリシー設定にそのポート番号を追加する必要があります。以下では、SELinux ポリシー設定では最初に squid 用に定義されていなかったポートでリッスンするように設定したため、このサーバーの起動に失敗する例を示します。また、SELinux システムを設定し、ポリシーではまだ定義されていなかった非標準のポートでこのデーモンがリッスンできるようにする方法についても示します。ここでは、squid パッケージがインストールされていることを前提としています。各コマンドは root ユーザーで実行してください。
squidが実行中ではないことを確認します。~]#
systemctl status squid.servicesquid.service - Squid caching proxy Loaded: loaded (/usr/lib/systemd/system/squid.service; disabled) Active: inactive (dead)出力が上記と異なる場合は、このプロセスを停止します。~]#
systemctl stop squid.service- 以下のコマンドを実行して、SELinux で
squidにリッスンを許可しているポートを表示します。~]#
semanage port -l | grep -w -i squid_port_tsquid_port_t tcp 3401, 4827 squid_port_t udp 3401, 4827 - root で
/etc/squid/squid.confを編集します。SELinux ポリシー設定ではsquid用に設定していないポートをリッスンするようhttp_portオプションを設定します。この例では、このデーモンがポート 10000 でリッスンするよう設定します。# Squid normally listens to port 3128 http_port 10000
setseboolコマンドを実行し、squid_connect_anyブール値をオフに設定します。これで、squidの動作は特定ポート上に限られることになります。~]#
setsebool -P squid_connect_any 0squidデーモンを起動します。~]#
systemctl start squid.serviceJob for squid.service failed. See 'systemctl status squid.service' and 'journalctl -xn' for details.以下のような SELinux 拒否メッセージがログ記録されます。localhost setroubleshoot: SELinux is preventing the squid (squid_t) from binding to port 10000. For complete SELinux messages. run sealert -l 97136444-4497-4fff-a7a7-c4d8442db982
- SELinux で
squidがこの例で使用しているポート 10000 をリッスンできるようにするには、以下のコマンドが必要になります。~]#
semanage port -a -t squid_port_t -p tcp 10000 squidを再起動して、新規ポートをリッスンするようにします。~]#
systemctl start squid.service- これで、Squid が非標準ポート (この例では TCP 10000) でリッスンできるように SELinux を設定したので、このデーモンはこのポートで正常に起動するようになります。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.