6.3. kerberos 認証を使用したキャッシングプロキシーとしての Squid の設定

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

前提条件

  • /etc/squid/squid.conf ファイルが、squid パッケージにより提供されている。このファイルを編集した場合は、ファイルを削除して、パッケージを再インストールしている。
  • Squid をインストールするサーバーが、AD ドメインのメンバーである。詳細は、Red Hat Enterprise Linux 8 の『さまざまな種類のサーバーのデプロイメント』「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 ファイル は、キータブファイルへのパスを設定します。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

      デフォルトでは、設定には、Safe_ports ACL に定義されていないポートへのアクセス拒否を定義する http_access deny !Safe_ports ルールが含まれています。

    6. cache_dir パラメーターにキャッシュの種類、キャッシュディレクトリーへのパス、キャッシュサイズ、さらにキャッシュの種類ごとの設定を構成します。

      cache_dir ufs /var/spool/squid 10000 16 256

      この設定により、以下が可能になります。

      • Squid は、キャッシュの種類 ufs を使用します。
      • Squid は、キャッシュを /var/spool/squid/ ディレクトリーに保存します。
      • キャッシュのサイズが最大 10000 MB になります。
      • Squid は、/var/spool/squid/ ディレクトリーに 16 個のレベル 1 サブディレクトリーを作成します。
      • 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 enable --now 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

    ヘルパーユーティリティーがトークンを返すと、認証に成功しました。

    Token: YIIFtAYGKwYBBQUCoIIFqDC...

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