第19章 Squid キャッシングプロキシー
Squid は、Web クライアント向けの高パフォーマンスのプロキシーキャッシュサーバーで、FTP、Gopher、および HTTP のデータオブジェクトをサポートします。これにより、帯域幅が削減され、頻繁に要求される Web ページのキャッシュと再利用により応答時間が改善されます。[17]
Red Hat Enterprise Linux では、squid パッケージに Squid キャッシングプロキシーが同梱されています。以下のコマンドを実行して、squid パッケージがインストールされているかどうかを確認します。
~]$ rpm -q squid
package squid is not installed
パッケージがインストールされておらず、squid を使用する場合は、
yum ユーティリティーを使って root でインストールします。
~]# yum install squid
19.1. Squid キャッシングプロキシーおよび SELinux リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
SELinux が有効になると、Squid はデフォルトで制限されて実行します。制限のあるプロセスは、独自のドメインで実行され、他の制限のあるプロセスから分離されます。制限のあるプロセスが攻撃者によって侵害された場合、SELinux ポリシーの設定に応じて、攻撃者のリソースへのアクセスと、攻撃者が行う可能性のある損害は制限されます。以下の例は、独自のドメインで実行している 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 ファイルが、デフォルトの TCP ポート 3128、3401、または 4827 以外のポートを squid がリッスンするように設定されている場合は、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.servicesquidがリッスンできるポートを表示するには、以下のコマンドを実行します。~]# 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を編集します。http_portオプションを設定して、squid用の SELinux ポリシー設定で設定されていないポートのリストを表示するようにします。この例では、デーモンがポート 10000 をリッスンするように設定されています。# Squid normally listens to port 3128 http_port 10000 - setsebool コマンドを実行して、
squid_connect_anyのブール値が off に設定されていることを確認します。これにより、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 で、
httpdがポート 10000 をリッスンできるようにするには、以下のコマンドが必要です。~]# semanage port -a -t squid_port_t -p tcp 10000 squidを再起動して、新しいポートでリッスンするようにします。~]# systemctl start squid.service- 現在、SELinux は、標準以外のポート (この例では TCP 10000) で Squid がリッスンできるように設定されており、このポートで正常に起動します。