Show Table of Contents
このページには機械翻訳が使用されている場合があります (詳細はこちら)。
第20章 Squid キャッシングプロキシ
Squid とは、HTTP、Gopher、FTP データオブジェクトに対応する、Web クライアント用の高パフォーマンスなプロキシキャッシングサーバーです。頻繁に要求される Web ページをキャッシングして再利用することで、帯域幅を抑え、応答時間を改善します[17]。
Red Hat Enterprise Linux では、squid パッケージが Squid キャッシングプロキシを提供します。以下のコマンドを実行して squid パッケージがインストールされていることを確認します。
~]$ rpm -q squid
package squid is not installed
パッケージがインストールされておらず squid を使用したい場合は、root で
yum
ユーティリティーを使用してインストールします。
~]# yum install squid
20.1. Squid キャッシングプロキシと SELinux
SELinux を有効にすると、squid はデフォルトで制限のあるサービスとして実行されます。制限のあるプロセスはそれ自体のドメイン内で実行され、他の制限のあるプロセスとは分離されます。制限のあるプロセスが攻撃を受けると、SELinux ポリシー設定に応じて、攻撃側のリソースへのアクセスと攻撃者による被害は限定されます。以下で squid が自身のドメイン内で実行している squid プロセスの例を示します。ここでは squid パッケージがインストールされていることを前提としています。
getenforce
コマンドを実行して、SELinux が enforcing モードで実行していることを確認します。~]$
getenforce
EnforcingSELinux が enforcing モードで実行している場合は、Enforcing
が返されます。- root ユーザーで以下のコマンドを実行し、
squid
デーモンを起動します。~]#
systemctl start squid.service
サービスが稼働していることを確認します。出力は以下のようになり、タイムスタンプのみが異なります。~]#
systemctl status squid.service
squid.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 squid
system_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.service
squid.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_t
squid_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 0
squid
デーモンを起動します。~]#
systemctl start squid.service
Job 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 を設定したので、このデーモンはこのポートで正常に起動するようになります。
このページには機械翻訳が使用されている場合があります (詳細はこちら)。