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 用の keytab を作成し、/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. keytab ファイルの所有者を 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
      デフォルトでは、設定には、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 は、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
    ヘルパーユーティリティーがトークンを返すと、認証に成功しました。
    Token: YIIFtAYGKwYBBQUCoIIFqDC...
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.