第9章 Squid キャッシングプロキシ
Squid Caching Proxy プロジェクトページより抜粋:
原文: "Squid is a caching proxy for the Web supporting HTTP, HTTPS, FTP, and more. It reduces bandwidth and improves response times by caching and reusing frequently-requested web pages. Squid has extensive access controls and makes a great server accelerator." (訳文: Squid とは HTTP、 HTTPS、 FTP などに対応する Web 用キャッシングプロキシです。 頻繁に要求される Web ページをキャッシングして再利用することで帯域幅の使用を抑えます。 Squid は豊富なアクセス制御機能が備わっている強力なサーバーアクセラレーターになります。)
Red Hat Enterprise Linux では、 Squid キャッシングプロキシは squid パッケージにより提供されます。
rpm -q squid を実行して squid パッケージがインストールされているか確認します。squid を使用する予定にも関わらず、このパッケージがインストールされていない場合は、root ユーザーで次のコマンドを実行してパッケージのインストールを行ないます。
yum install squid
# yum install squid
9.1. Squid キャッシングプロキシと SELinux リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
SELinux を有効にすると、 squid はデフォルトで制限のあるサービスとして実行されます。 制限のあるプロセスはそれ自体のドメイン内で実行され、 他の制限のあるプロセスとは分離されます。 制限のあるプロセスが攻撃を受けると、 SELinux ポリシー設定に応じて、 攻撃側がリソースにアクセスして加えることができる被害は限定されます。 以下に、 squid 自体のドメイン内で実行している squid プロセスの例を示します。 ここでは squid パッケージがインストールされていることを前提としています。
getenforceを実行して、 SELinux が enforcing モードで実行しているか確認します。getenforce
$ getenforce EnforcingCopy to Clipboard Copied! Toggle word wrap Toggle overflow SELinux が enforcing モードで実行している場合は、getenforceコマンドを実行するとEnforcingが返されます。- root ユーザーで
service squid startを実行し、squidを起動します。service squid start
# service squid start Starting squid: [ OK ]Copy to Clipboard Copied! Toggle word wrap Toggle overflow ps -eZ | grep squidを実行し、squidプロセスを表示させます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow squidプロセスに関連する SELinux コンテキストはunconfined_u:system_r:squid_t:s0です。 コンテキストの最後から 2 番目の部分、squid_tがタイプになります。 プロセスのドメインやファイルのタイプを定義するのがタイプです。 この例の場合、squidプロセスはsquid_tドメイン内で実行しています。
squid_t などの制限ドメイン内で実行しているプロセスがファイルや他のプロセス、 システムなどとどのように交信するのかをSELinux ポリシーで定義します。squid によるアクセスを許可するには、 ファイルに適切なラベルを付けを行なう必要があります。
/etc/squid/squid.conf を設定して、squid にデフォルトの TCP ポート 3128、3401、4827 以外のポートでリッスンさせる場合は、semanage port コマンドを使って SELinux ポリシー設定にそのポート番号を追加する必要があります。以下では、SELinux ポリシー設定では最初 squid 用には定義されていなかったポートでリッスンするよう squid を設定したため、squid の起動に失敗する例を示します。また、SELinux システムを設定し、ポリシーではまだ定義されていなかった非標準のポートで squid によるリッスンを許可する方法についても示します。ここでは、squid パッケージがインストールされていることを前提としています。各コマンドは root ユーザーで実行してください。
service squid statusを実行し、squidが実行中ではないことを確認します。service squid status
# service squid status squid is stoppedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力が上記と異なる場合は、service squid stopを実行してプロセスを停止します。service squid stop
# service squid stop Stopping squid: [ OK ]Copy to Clipboard Copied! Toggle word wrap Toggle overflow semanage port -l | grep -w squid_port_tを実行して、 SELinux でsquidにリッスンを許可しているポートを表示させます。semanage port -l | grep -w -i squid_port_t squid_port_t tcp 3401, 4827 squid_port_t udp 3401, 4827
semanage port -l | grep -w -i squid_port_t squid_port_t tcp 3401, 4827 squid_port_t udp 3401, 4827Copy to Clipboard Copied! Toggle word wrap Toggle overflow - root ユーザーで
/etc/squid/squid.confを編集します。SELinux ポリシー設定ではsquid用に設定していないポートをリッスンするようhttp_portオプションを設定します。この例では、ポート 10000 でリッスンするようsquidを設定しています。Squid normally listens to port 3128
# Squid normally listens to port 3128 http_port 10000Copy to Clipboard Copied! Toggle word wrap Toggle overflow setseboolコマンドを実行し、squid_connect_anyBoolean をオフに設定します。 これで、 squid の動作は特定ポート上に限られることになります。setsebool -P squid_connect_any 0
setsebool -P squid_connect_any 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow service squid startを実行し、squidを起動します。service squid start
# service squid start Starting squid: .................... [FAILED]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のような 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
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-c4d8442db982Copy to Clipboard Copied! Toggle word wrap Toggle overflow squidによるポート 10000 のリッスンを SELinux で許可するには、例で使用しているものと同じ次のコマンドが必要になります。semanage port -a -t squid_port_t -p tcp 10000
# semanage port -a -t squid_port_t -p tcp 10000Copy to Clipboard Copied! Toggle word wrap Toggle overflow - もう一度
service squid startを実行して、squidを起動させ新しいポートをリッスンするようにします。service squid start
# service squid start Starting squid: [ OK ]Copy to Clipboard Copied! Toggle word wrap Toggle overflow - これで、
squidによる非標準のポート (この例では TCP 10000) でのリッスンを許可する SELinux 設定が完了しました。squidはこのポートで正常に起動するようになります。