第16章 Squid キャッシュプロキシーサーバーの設定

Squid は、コンテンツをキャッシュして帯域幅を減らし、Web ページをより迅速に読み込むプロキシーサーバーです。本章では、HTTP、HTTPS、FTP プロトコルのプロキシーとして Squid を設定する方法と、アクセスの認証と制限を説明します。

16.1. 認証なしで Squid をキャッシュプロキシーとして設定

本セクションでは、認証を使用しないキャッシュプロキシーとする Squid の基本設定を説明します。この手順では、IP 範囲に基づいてプロキシーへのアクセスを制限します。

前提条件

  • この手順では、/etc/squid/squid.conf ファイルが squid パッケージにより提供されることを前提としています。このファイルを編集した場合は、ファイルを削除し、パッケージを再インストールします。

手順

  1. squid パッケージをインストールします。
    # yum install squid
  2. /etc/squid/squid.conf ファイルを編集します。
    1. localnet アクセス制御リスト (ACL) を、プロキシーを使用できる IP 範囲と一致するように変更します。
      acl localnet src 192.0.2.0/24
      acl localnet 2001:db8::/32
      デフォルトでは、/etc/squid/squid.conf ファイルには localnet ACL で指定されたすべての IP 範囲のプロキシーを使用できるようにするルールが含まれます。http_access allow localnet ルールの前に、すべての localnet ACL を指定する必要がある点に注意してください。

      重要

      環境に一致しない既存の acl localnet エントリーをすべて削除します。
    2. 以下の ACL はデフォルト設定にあり、HTTPS プロトコルを使用するポートとして 443 を定義します。
      acl SSL_ports port 443
      ユーザーが他のポートでも HTTPS プロトコルを使用できるようにするには、以下の各ポートに ACL を追加します。
      acl SSL_ports port port_number
    3. Squid が接続を確立できるポートに設定する acl Safe_ports ルールの一覧を更新します。たとえば、プロキシーを使用するクライアントがポート 21 (FTP)、80 (HTTP)、443 (HTTPS) のリソースにのみアクセスできるようにするには、その設定の以下の acl Safe_ports ステートメントのみを保持します。
      acl Safe_ports port 21
      acl Safe_ports port 80
      acl Safe_ports port 443
      デフォルトでは、設定には http_access deny !Safe_ports ルールが含まれ、Safe_ports ACL で定義されていないポートへのアクセス拒否を定義します。
    4. cache_dir パラメーターにキャッシュタイプ、キャッシュディレクトリーへのパス、キャッシュサイズ、さらにキャッシュタイプ固有の設定を設定します。
      cache_dir ufs /var/spool/squid 10000 16 256
      この設定により、以下が可能になります。
      • Squid は、ufs キャッシュタイプを使用します。
      • Squid は、キャッシュを /var/spool/squid/ ディレクトリーに保存します。
      • キャッシュのサイズが 10000 MB まで大きくなります。
      • Squid は、16 個の レベル 1 サブディレクトリーを /var/spool/squid/ ディレクトリーに作成します。
      • Squid は、レベル 1 の各ディレクトリーに 256 個のサブディレクトリーを作成します。
      cache_dir ディレクティブを設定しない場合、Squid はキャッシュをメモリーに保存します。
  3. cache_dir パラメーターに /var/spool/squid/ 以外のキャッシュディレクトリーを設定する場合は、以下を行います。
    1. キャッシュディレクトリーを作成します。
      # mkdir -p path_to_cache_directory
    2. キャッシュディレクトリーの権限を設定します。
      # chown squid:squid path_to_cache_directory
    3. SELinux を enforcing モードで実行する場合は、squid_cache_t コンテキストをキャッシュディレクトリーに設定します。
      # semanage fcontext -a -t squid_cache_t "path_to_cache_directory(/.*)?"
      # restorecon -Rv path_to_cache_directory
      semanage ユーティリティーがシステムで利用できない場合は、policycoreutils-python-utils パッケージをインストールします。
  4. ファイアウォールで 3128 ポートを開きます。
    # firewall-cmd --permanent --add-port=3128/tcp
    # firewall-cmd --reload
  5. squid サービスを開始します。
    # systemctl start squid
  6. squid サービスを有効にして、システムの起動時に自動的に起動するようにします。
    # systemctl enable squid

検証手順

プロキシーが正しく機能することを確認するには、curl ユーティリティーを使用して Web ページをダウンロードします。
# curl -O -L "https://www.redhat.com/index.html" -x "proxy.example.com:3128"
curl がエラーを表示せず、index.html ファイルが現在のディレクトリーにダウンロードされている場合は、プロキシーが動作します。