Menu Close

Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

第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 を使用する場合は、root で yum ユーティリティーを使用してインストールします。
~]# yum install squid

19.1. Squid キャッシュプロキシーおよび SELinux

SELinux を有効にすると、Squid はデフォルトで制限のある実行されます。制限のあるプロセスは独自のドメインで実行され、他の制限のあるプロセスから分離されます。SELinux ポリシー設定によっては、攻撃者が制限されているプロセスが危険にさらされると、リソースへのアクセスが制限される可能性があります。以下の例は、独自のドメインで実行している Squid プロセスを示しています。この例では、squid パッケージがインストールされていることを前提としています。
  1. getenforce コマンドを実行して、SELinux が Enforcing モードで実行されていることを確認します。
    ~]$ getenforce
    Enforcing
    
    このコマンドは、SELinux が Enforcing モードで実行している場合に Enforcing を返します。
  2. 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
  3. 以下のコマンドを入力して、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_daemon
    
    squid プロセスに関連付けられている 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 ポリシー設定に追加します。以下の例は、squid を設定して、SELinux ポリシー設定で最初に定義されていないポートをリッスンするように設定します。その結果、サーバーは起動に失敗します。また、この例では、デーモンがポリシーに定義されていない標準以外のポートで正常にリッスンできるように SELinux システムを設定する方法も示しています。この例では、squid パッケージがインストールされていることを前提としています。以下の例で各コマンドを root ユーザーとして実行します。
  1. 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
  2. 以下のコマンドを実行して、SELinux で squid がリッスンできるようにポートを表示します。
    ~]# semanage port -l | grep -w -i squid_port_t
    squid_port_t                   tcp      3401, 4827
    squid_port_t                   udp      3401, 4827
    
    
  3. root で /etc/squid/squid.conf を編集します。squid の SELinux ポリシー設定で設定されていないポートを一覧表示するように、http _port オプションを設定します。この例では、デーモンはポート 10000 でリッスンするように設定されています。
    # Squid normally listens to port 3128
    http_port 10000
    
  4. setsebool コマンドを実行して、squid _connect_any のブール値が off に設定されていることを確認します。これにより squid は特定のポートでのみ操作できます。
    ~]# setsebool -P squid_connect_any 0
  5. 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
    
  6. SELinux で、squid がポート 10000 をリッスン できるようにするには、このコマンドが必要です。
    ~]# semanage port -a -t squid_port_t -p tcp 10000
  7. squid を再度開始して、新しいポートでリッスンします。
    ~]# systemctl start squid.service
  8. Squid が標準以外のポート(この例では TCP 10000)でリッスンできるように SELinux が設定されたため、このポートで正常に起動します。


[17] 詳細は、Squid Caching Proxy プロジェクトページを参照してください。