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

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

前提条件

  • この手順では、/etc/squid/squid.conf ファイルが squid パッケージにより提供されることを前提としています。このファイルを編集した場合は、ファイルを削除し、パッケージを再インストールします。
  • uid=proxy_user,cn=users,cn=accounts,dc=example,dc=com などのサービスユーザーが LDAP ディレクトリーに存在します。Squid はこのアカウントを使用して認証ユーザーを検索します。認証ユーザーが存在すると、Squid はこのユーザーをディレクトリーにバインドして認証を確認します。

手順

  1. squid パッケージをインストールします。
    # yum install squid
  2. /etc/squid/squid.conf ファイルを編集します。
    1. basic_ldap_auth ヘルパーユーティリティーを設定するには、/etc/squid/squid.conf に以下の設定エントリーを追加します。
      auth_param basic program /usr/lib64/squid/basic_ldap_auth -b "cn=users,cn=accounts,dc=example,dc=com" -D "uid=proxy_user,cn=users,cn=accounts,dc=example,dc=com" -W /etc/squid/ldap_password -f "(&(objectClass=person)(uid=%s))" -ZZ -H ldap://ldap_server.example.com:389
      以下では、上記の basic_ldap_auth ヘルパーユーティリティーに渡されるパラメーターを説明します。
      • -B base_DN は、LDAP 検索ベースを設定します。
      • -D proxy_service_user_DN は、Squid がこのディレクトリー内の認証ユーザーを検索するのに使用するアカウントの識別名 (DN) を設定します。
      • -W path_to_password_file は、プロキシーサービスユーザーのパスワードが含まれるファイルへのパスを設定します。パスワードファイルを使用すると、オペレーティングシステムのプロセス一覧にパスワードが表示されなくなります。
      • -f LDAP_filter は LDAP 検索フィルターを指定します。Squid は、%s 変数を、認証ユーザーにより提供されるユーザー名に置き換えます。
        この例の (&(objectClass=person)(uid=%s)) フィルターは、uid 属性に設定した値と一致し、ディレクトリーエントリーに person オブジェクトクラスが含まれることを定義します。
      • -ZZ は、STARTTLS コマンドを使用して、LDAP プロトコルで TLS 暗号化接続を強制します。以下の状況では -ZZ を省略します。
        • LDAP サーバーは、暗号化された接続に対応していません。
        • URL に指定されたポートは LDAPS プロトコルを使用します。
      • -H LDAP_URL パラメーターは、プロトコル、ホスト名または IP アドレス、および LDAP サーバーのポートを URL 形式で指定します。
    2. 以下の ACL およびルールを追加して、認証されたユーザーのみがプロキシーを使用できるように Squid を設定します。
      acl ldap-auth proxy_auth REQUIRED
      http_access allow ldap-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 はキャッシュをメモリーに保存します。
  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. LDAP サービスユーザーのパスワードを /etc/squid/ldap_password ファイルに保存し、ファイルに適切なパーミッションを設定します。
    # echo "password" > /etc/squid/ldap_password
    # chown root:squid /etc/squid/ldap_password
    # chmod 640 /etc/squid/ldap_password
  5. ファイアウォールで 3128 ポートを開きます。
    # firewall-cmd --permanent --add-port=3128/tcp
    # firewall-cmd --reload
  6. squid サービスを開始します。
    # systemctl start squid
  7. squid サービスを有効にして、システムの起動時に自動的に起動するようにします。
    # systemctl enable squid

検証手順

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

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

ヘルパーユーティリティーが正しく機能することを確認するには、以下を行います。
  1. auth_param パラメーターで使用したのと同じ設定でヘルパーユーティリティーを手動で起動します。
    # /usr/lib64/squid/basic_ldap_auth -b "cn=users,cn=accounts,dc=example,dc=com" -D "uid=proxy_user,cn=users,cn=accounts,dc=example,dc=com" -W /etc/squid/ldap_password -f "(&(objectClass=person)(uid=%s))" -ZZ -H ldap://ldap_server.example.com:389
  2. 有効なユーザー名およびパスワードを入力し、Enter を押します。
    user_name password
    ヘルパーユーティリティーが OK を返すと、認証に成功しました。

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