16.3. Kerberos 認証を使用したキャッシュプロキシーとしての Squid の設定

本セクションでは、Kerberos を使用して Active Directory (AD) にユーザーを認証するキャッシュプロキシーとしての Squid 基本設定を説明します。この手順では、認証されたユーザーのみがプロキシーを使用できるように設定します。

前提条件

  • この手順では、/etc/squid/squid.conf ファイルが squid パッケージにより提供されることを前提としています。このファイルを編集した場合は、ファイルを削除し、パッケージを再インストールします。
  • Squid をインストールするサーバーは、AD ドメインのメンバーになります。詳細は、『Red Hat Enterprise Linux 7 システム管理者のガイド』のSamba をドメインメンバーとしてセットアップを参照してください。

手順

  1. 以下のパッケージをインストールします。
    # yum install squid krb5-workstation
  2. AD ドメイン管理者として認証します。
    # kinit administrator@AD.EXAMPLE.COM
  3. Squid 用のキータブを作成し、これを /etc/squid/HTTP.keytab ファイルに保存します。
    # export KRB5_KTNAME=FILE:/etc/squid/HTTP.keytab
    # net ads keytab CREATE -U administrator
  4. HTTP サービスプリンシパルをキータブに追加します。
    # net ads keytab ADD HTTP -U administrator
  5. キータブファイルの所有者を squid ユーザーに設定します。
    # chown squid /etc/squid/HTTP.keytab
  6. 必要に応じて、キータブファイルに、プロキシーサーバーの完全修飾ドメイン名 (FQDN) の HTTP サービスプリンシパルが含まれていることを確認します。
    #  klist -k /etc/squid/HTTP.keytab
    Keytab name: FILE:/etc/squid/HTTP.keytab
    KVNO Principal
    ---- --------------------------------------------------------------------------
    ...
       2 HTTP/proxy.ad.example.com@AD.EXAMPLE.COM
    ...
  7. /etc/squid/squid.conf ファイルを編集します。
    1. negotiate_kerberos_auth ヘルパーユーティリティーを設定するには、/etc/squid/squid.conf 部に以下の設定エントリーを追加します。
      auth_param negotiate program /usr/lib64/squid/negotiate_kerberos_auth -k /etc/squid/HTTP.keytab -s HTTP/proxy.ad.example.com@AD.EXAMPLE.COM
      以下は、上記の例で negotiate_kerberos_auth ヘルパーユーティリティーに渡されるパラメーターを説明します。
      • -k file は、キータブファイルへのパスを設定します。squid ユーザーにこのファイルの読み取り権限が必要なことに注意してください。
      • -s HTTP/host_name@kerberos_realm は、Squid が使用する Kerberos プリンシパルを設定します。
      必要に応じて、以下のパラメーターのいずれかまたは両方をヘルパーユーティリティーに渡すことによりロギングを有効にできます。
      • -i は、認証ユーザーなどの情報メッセージをログに記録します。
      • -d は、デバッグのロギングを有効にします。
      Squid は、ヘルパーユーティリティーから、/var/log/squid/cache.log ファイルにデバッグ情報のログに記録します。
    2. 以下の ACL およびルールを追加して、認証されたユーザーのみがプロキシーを使用できるように Squid を設定します。
      acl kerb-auth proxy_auth REQUIRED
      http_access allow kerb-auth

      重要

      http_access deny all ルールの前にこの設定を指定します。
    3. 以下のルールを削除して、localnet ACL で指定された IP 範囲のプロキシー認証の回避を無効にします。
      http_access allow localnet
    4. 以下の ACL はデフォルト設定にあり、HTTPS プロトコルを使用するポートとして 443 を定義します。
      acl SSL_ports port 443
      ユーザーが他のポートでも HTTPS プロトコルを使用できるようにするには、以下の各ポートに ACL を追加します。
      acl SSL_ports port port_number
    5. 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 で定義されていないポートへのアクセス拒否を定義します。
    6. 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 はキャッシュをメモリーに保存します。
  8. 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 パッケージをインストールします。
  9. ファイアウォールで 3128 ポートを開きます。
    # firewall-cmd --permanent --add-port=3128/tcp
    # firewall-cmd --reload
  10. squid サービスを開始します。
    # systemctl start squid
  11. squid サービスを有効にして、システムの起動時に自動的に起動するようにします。
    # systemctl enable squid

検証手順

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

トラブルシューティングの手順

Kerberos 認証を手動でテストするには、以下を行います。
  1. AD アカウント用の Kerberos チケットを取得します。
    # kinit user@AD.EXAMPLE.COM
  2. 必要に応じて、チケットを表示します。
    # klist
  3. negotiate_kerberos_auth_test ユーティリティーを使用して認証をテストします。
    # /usr/lib64/squid/negotiate_kerberos_auth_test proxy.ad.example.com
    ヘルパーユーティリティーがトークンを返すと、認証に成功しました。
    トークン: YIIFtAYGKwYBBQUCoIIFqDC...

このページには機械翻訳が使用されている場合があります (詳細はこちら)。